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

char ** cwd_tab_completion(char *buf,_Bool allow_files,size_t *num_matches,size_t buf_len)

{
  int iVar1;
  size_t sVar2;
  char *pcVar3;
  byte *pbVar4;
  size_t sVar5;
  size_t sVar6;
  DIR *__dirp;
  dirent64 *pdVar7;
  int iVar8;
  size_t sVar9;
  char *pcVar10;
  char *__haystack;
  char *pcVar11;
  char *pcVar12;
  char *pcVar13;
  int in_GS_OFFSET;
  bool bVar14;
  bool bVar15;
  bool bVar16;
  byte bVar17;
  byte *local_bc;
  char *local_b0;
  char **local_ac;
  stat fileinfo;
  
  bVar17 = 0;
  iVar1 = *(int *)(in_GS_OFFSET + 0x14);
  local_bc = (byte *)mallocstrcpy((char *)0x0,buf);
  *num_matches = 0;
  local_bc[buf_len] = 0;
  pcVar3 = strrchr((char *)local_bc,0x2f);
  if (pcVar3 == (char *)0x0) {
    local_b0 = mallocstrcpy((char *)0x0,present_path);
  }
  else {
    pbVar4 = (byte *)mallocstrcpy((char *)0x0,pcVar3 + 1);
    pcVar3[1] = '\0';
    if (*local_bc == 0x7e) {
      local_b0 = real_dir_from_tilde((char *)local_bc);
    }
    else {
      local_b0 = mallocstrcpy((char *)0x0,(char *)local_bc);
    }
    if (*local_b0 != '/') {
      sVar5 = strlen(present_path);
      sVar6 = strlen((char *)local_bc);
      local_b0 = (char *)nrealloc(local_b0,sVar5 + 1 + sVar6);
      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",present_path,local_bc);
    }
    free(local_bc);
    local_bc = pbVar4;
  }
  __dirp = opendir(local_b0);
  if (__dirp != (DIR *)0x0) {
    sVar5 = strlen((char *)local_bc);
    local_ac = (char **)0x0;
LAB_0001fb20:
    do {
      pdVar7 = readdir64(__dirp);
      if (pdVar7 == (dirent64 *)0x0) goto LAB_0001fcb0;
      pcVar3 = pdVar7->d_name;
      iVar8 = strncmp(pcVar3,(char *)local_bc,sVar5);
      if (iVar8 == 0) {
        bVar14 = *local_bc < 0x2e;
        bVar16 = *local_bc == 0x2e;
        if (!bVar16) {
          iVar8 = 2;
          pcVar10 = pcVar3;
          pbVar4 = &DAT_0005c437;
          do {
            if (iVar8 == 0) break;
            iVar8 = iVar8 + -1;
            bVar14 = (byte)*pcVar10 < *pbVar4;
            bVar16 = *pcVar10 == *pbVar4;
            pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1;
            pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1;
          } while (bVar16);
          bVar15 = false;
          bVar14 = (!bVar14 && !bVar16) == bVar14;
          if (bVar14) goto LAB_0001fb20;
          iVar8 = 3;
          pcVar10 = pcVar3;
          pbVar4 = (byte *)0x60801;
          do {
            if (iVar8 == 0) break;
            iVar8 = iVar8 + -1;
            bVar15 = (byte)*pcVar10 < *pbVar4;
            bVar14 = *pcVar10 == *pbVar4;
            pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1;
            pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1;
          } while (bVar14);
          if ((!bVar15 && !bVar14) == bVar15) goto LAB_0001fb20;
        }
        sVar6 = strlen(local_b0);
        sVar9 = strlen(pcVar3);
        pcVar10 = (char *)nmalloc(sVar6 + 1 + sVar9);
        __sprintf_chk(pcVar10,1,0xffffffff,"%s%s",local_b0,pcVar3);
        if (operating_dir == (char *)0x0) {
LAB_0001fc60:
          if (!allow_files) {
            if (*pcVar10 == '~') {
              pcVar13 = real_dir_from_tilde(pcVar10);
            }
            else {
              pcVar13 = mallocstrcpy((char *)0x0,pcVar10);
            }
            iVar8 = __xstat64(3,pcVar13,(stat64 *)&fileinfo);
            if ((iVar8 == -1) || ((fileinfo.st_mode & 0xf000) != 0x4000)) {
              free(pcVar13);
              goto LAB_0001fc27;
            }
            free(pcVar13);
          }
          free(pcVar10);
          local_ac = (char **)nrealloc(local_ac,*num_matches * 4 + 4);
          sVar2 = *num_matches;
          pcVar3 = mallocstrcpy((char *)0x0,pcVar3);
          local_ac[sVar2] = pcVar3;
          *num_matches = *num_matches + 1;
        }
        else {
          __haystack = get_full_path(pcVar10);
          pcVar13 = operating_dir;
          if (__haystack != (char *)0x0) {
            pcVar11 = strstr(__haystack,operating_dir);
            pcVar12 = strstr(pcVar13,__haystack);
            free(__haystack);
            if ((__haystack == pcVar11) || (pcVar13 == pcVar12)) goto LAB_0001fc60;
          }
LAB_0001fc27:
          free(pcVar10);
        }
      }
    } while( true );
  }
  beep();
  free(local_bc);
  free(local_b0);
  local_ac = (char **)0x0;
LAB_0001fcd3:
  if (iVar1 == *(int *)(in_GS_OFFSET + 0x14)) {
    return local_ac;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail_local();
LAB_0001fcb0:
  closedir(__dirp);
  free(local_b0);
  free(local_bc);
  goto LAB_0001fcd3;
}



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

int FUN_0001f9d0(undefined4 param_1,char param_2,int *param_3,int param_4)

{
  char *pcVar1;
  byte *pbVar2;
  size_t sVar3;
  size_t sVar4;
  DIR *__dirp;
  dirent64 *pdVar5;
  int iVar6;
  size_t sVar7;
  char *pcVar8;
  char *__haystack;
  char *pcVar9;
  char *pcVar10;
  undefined4 uVar11;
  char *pcVar12;
  int in_GS_OFFSET;
  bool bVar13;
  bool bVar14;
  bool bVar15;
  byte bVar16;
  byte *local_bc;
  char *local_b0;
  int local_ac;
  stat64 local_80;
  int local_20;
  undefined4 uStack_14;
  
  bVar16 = 0;
  uStack_14 = 0x1f9d9;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  local_bc = (byte *)FUN_0003dbd0(0,param_1);
  *param_3 = 0;
  local_bc[param_4] = 0;
  pcVar1 = strrchr((char *)local_bc,0x2f);
  if (pcVar1 == (char *)0x0) {
    local_b0 = (char *)FUN_0003dbd0(0,DAT_0007b674);
  }
  else {
    pbVar2 = (byte *)FUN_0003dbd0(0,pcVar1 + 1);
    pcVar1[1] = '\0';
    if (*local_bc == 0x7e) {
      local_b0 = (char *)FUN_0001a620();
    }
    else {
      local_b0 = (char *)FUN_0003dbd0(0,local_bc);
    }
    if (*local_b0 != '/') {
      sVar3 = strlen(DAT_0007b674);
      sVar4 = strlen((char *)local_bc);
      local_b0 = (char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4);
      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc);
    }
    free(local_bc);
    local_bc = pbVar2;
  }
  __dirp = opendir(local_b0);
  if (__dirp != (DIR *)0x0) {
    sVar3 = strlen((char *)local_bc);
    local_ac = 0;
LAB_0001fb20:
    do {
      pdVar5 = readdir64(__dirp);
      if (pdVar5 == (dirent64 *)0x0) goto LAB_0001fcb0;
      pcVar1 = pdVar5->d_name;
      iVar6 = strncmp(pcVar1,(char *)local_bc,sVar3);
      if (iVar6 == 0) {
        bVar13 = *local_bc < 0x2e;
        bVar15 = *local_bc == 0x2e;
        if (!bVar15) {
          iVar6 = 2;
          pcVar8 = pcVar1;
          pbVar2 = &DAT_0005c437;
          do {
            if (iVar6 == 0) break;
            iVar6 = iVar6 + -1;
            bVar13 = (byte)*pcVar8 < *pbVar2;
            bVar15 = *pcVar8 == *pbVar2;
            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;
            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;
          } while (bVar15);
          bVar14 = false;
          bVar13 = (!bVar13 && !bVar15) == bVar13;
          if (bVar13) goto LAB_0001fb20;
          iVar6 = 3;
          pcVar8 = pcVar1;
          pbVar2 = (byte *)0x60801;
          do {
            if (iVar6 == 0) break;
            iVar6 = iVar6 + -1;
            bVar14 = (byte)*pcVar8 < *pbVar2;
            bVar13 = *pcVar8 == *pbVar2;
            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;
            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;
          } while (bVar13);
          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;
        }
        sVar4 = strlen(local_b0);
        sVar7 = strlen(pcVar1);
        pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);
        __sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);
        if (DAT_0007b614 == (char *)0x0) {
LAB_0001fc60:
          if (param_2 == '\0') {
            if (*pcVar8 == '~') {
              pcVar12 = (char *)FUN_0001a620();
            }
            else {
              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);
            }
            iVar6 = __xstat64(3,pcVar12,&local_80);
            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {
              free(pcVar12);
              goto LAB_0001fc27;
            }
            free(pcVar12);
          }
          free(pcVar8);
          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);
          iVar6 = *param_3;
          uVar11 = FUN_0003dbd0(0,pcVar1);
          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;
          *param_3 = *param_3 + 1;
        }
        else {
          __haystack = (char *)FUN_0001bac0(pcVar8);
          pcVar12 = DAT_0007b614;
          if (__haystack != (char *)0x0) {
            pcVar9 = strstr(__haystack,DAT_0007b614);
            pcVar10 = strstr(pcVar12,__haystack);
            free(__haystack);
            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;
          }
LAB_0001fc27:
          free(pcVar8);
        }
      }
    } while( true );
  }
  beep();
  free(local_bc);
  free(local_b0);
  local_ac = 0;
LAB_0001fcd3:
  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {
    return local_ac;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0005a8b0();
LAB_0001fcb0:
  closedir(__dirp);
  free(local_b0);
  free(local_bc);
  goto LAB_0001fcd3;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x00015680
ADD EBX,0x5b1f7
SUB ESP,0xb4
MOV EDI,dword ptr [ESP + 0xd0]
MOVZX EAX,byte ptr [ESP + 0xcc]
MOV dword ptr [ESP + 0x2c],EDI
MOV byte ptr [ESP + 0x2b],AL
MOV EAX,GS:[0x14]
MOV dword ptr [ESP + 0xa4],EAX
XOR EAX,EAX
PUSH dword ptr [ESP + 0xc8]
PUSH 0x0
CALL 0x0003dbd0
MOV dword ptr [EDI],0x0
MOV ESI,EAX
MOV EAX,dword ptr [ESP + 0xdc]
MOV byte ptr [ESI + EAX*0x1],0x0
POP EAX
POP EDX
PUSH 0x2f
PUSH ESI
CALL 0x000138c0
ADD ESP,0x10
TEST EAX,EAX
JZ 0x0001fd50
SUB ESP,0x8
MOV EDI,EAX
LEA EAX,[EAX + 0x1]
PUSH EAX
PUSH 0x0
CALL 0x0003dbd0
MOV byte ptr [EDI + 0x1],0x0
MOV dword ptr [ESP + 0x10],EAX
ADD ESP,0x10
CMP byte ptr [ESI],0x7e
JNZ 0x0001fc40
MOV EAX,ESI
CALL 0x0001a620
MOV dword ptr [ESP + 0xc],EAX
MOV EAX,dword ptr [ESP + 0xc]
CMP byte ptr [EAX],0x2f
JZ 0x0001fac2
LEA EDI,[EBX + 0xaa4]
SUB ESP,0xc
PUSH dword ptr [EDI]
CALL 0x00013630
MOV dword ptr [ESP],ESI
MOV EBP,EAX
CALL 0x00013630
POP EDX
POP ECX
LEA EAX,[EBP + EAX*0x1 + 0x1]
PUSH EAX
PUSH dword ptr [ESP + 0x18]
CALL 0x0003dad0
MOV dword ptr [ESP + 0x1c],EAX
MOV EDX,EAX
POP EBP
POP EAX
LEA EAX,[EBX + 0xfffe0902]
PUSH ESI
PUSH dword ptr [EDI]
PUSH EAX
PUSH -0x1
PUSH 0x1
PUSH EDX
CALL 0x00013b30
ADD ESP,0x20
SUB ESP,0xc
PUSH ESI
CALL 0x00013200
ADD ESP,0x10
SUB ESP,0xc
PUSH dword ptr [ESP + 0x18]
CALL 0x00013ad0
MOV dword ptr [ESP + 0x14],EAX
ADD ESP,0x10
TEST EAX,EAX
JZ 0x0001fd9b
SUB ESP,0xc
PUSH dword ptr [ESP + 0xc]
CALL 0x00013630
ADD ESP,0x10
MOV dword ptr [ESP + 0x8],EAX
LEA EAX,[EBX + 0xfffe0902]
MOV dword ptr [ESP + 0x1c],EAX
LEA EAX,[EBX + 0xa44]
MOV dword ptr [ESP + 0x10],0x0
MOV dword ptr [ESP + 0x14],EAX
LEA ESI,[ESI]
NOP
SUB ESP,0xc
PUSH dword ptr [ESP + 0x10]
CALL 0x00013990
ADD ESP,0x10
TEST EAX,EAX
JZ 0x0001fcb0
SUB ESP,0x4
LEA EBP,[EAX + 0x13]
PUSH dword ptr [ESP + 0xc]
MOV EDI,dword ptr [ESP + 0x8]
PUSH EDI
PUSH EBP
CALL 0x000139f0
ADD ESP,0x10
TEST EAX,EAX
JNZ 0x0001fb20
CMP byte ptr [EDI],0x2e
JZ 0x0001fb88
MOV ECX,0x2
LEA EDI,[EBX + 0xfffe1867]
MOV ESI,EBP
CMPSB.REPE ES:EDI,ESI
SETA AL
SBB AL,0x0
TEST AL,AL
JZ 0x0001fb20
MOV ECX,0x3
LEA EDI,[EBX + 0xfffe5c31]
MOV ESI,EBP
CMPSB.REPE ES:EDI,ESI
SETA AL
SBB AL,0x0
TEST AL,AL
JZ 0x0001fb20
SUB ESP,0xc
PUSH dword ptr [ESP + 0x18]
CALL 0x00013630
MOV dword ptr [ESP],EBP
MOV ESI,EAX
CALL 0x00013630
LEA EAX,[ESI + EAX*0x1 + 0x1]
MOV dword ptr [ESP],EAX
CALL 0x0003da70
POP ESI
MOV EDI,EAX
POP EAX
PUSH EBP
PUSH dword ptr [ESP + 0x18]
PUSH dword ptr [ESP + 0x2c]
PUSH -0x1
PUSH 0x1
PUSH EDI
CALL 0x00013b30
ADD ESP,0x20
MOV EAX,dword ptr [ESP + 0x14]
MOV EAX,dword ptr [EAX]
TEST EAX,EAX
JZ 0x0001fc60
SUB ESP,0xc
PUSH EDI
CALL 0x0001bac0
ADD ESP,0x10
MOV ESI,EAX
TEST EAX,EAX
JZ 0x0001fc27
MOV EAX,dword ptr [ESP + 0x14]
SUB ESP,0x8
MOV EDX,dword ptr [EAX]
MOV dword ptr [ESP + 0x20],EDX
PUSH EDX
PUSH ESI
CALL 0x000130e0
POP EDX
POP ECX
MOV dword ptr [ESP + 0x30],EAX
PUSH ESI
PUSH dword ptr [ESP + 0x24]
CALL 0x000130e0
MOV dword ptr [ESP],ESI
MOV dword ptr [ESP + 0x3c],EAX
CALL 0x00013200
ADD ESP,0x10
CMP ESI,dword ptr [ESP + 0x28]
JZ 0x0001fc60
MOV EAX,dword ptr [ESP + 0x2c]
CMP dword ptr [ESP + 0x18],EAX
JZ 0x0001fc60
SUB ESP,0xc
PUSH EDI
CALL 0x00013200
ADD ESP,0x10
JMP 0x0001fb20
SUB ESP,0x8
PUSH ESI
PUSH 0x0
CALL 0x0003dbd0
MOV dword ptr [ESP + 0x1c],EAX
ADD ESP,0x10
JMP 0x0001fa70
CMP byte ptr [ESP + 0x23],0x0
JZ 0x0001fd00
SUB ESP,0xc
PUSH EDI
CALL 0x00013200
POP EAX
POP EDX
MOV EDI,dword ptr [ESP + 0x2c]
MOV EAX,dword ptr [EDI]
LEA EAX,[EAX*0x4 + 0x4]
PUSH EAX
PUSH dword ptr [ESP + 0x1c]
CALL 0x0003dad0
MOV dword ptr [ESP + 0x20],EAX
MOV EDX,EAX
MOV EAX,dword ptr [EDI]
POP ECX
LEA ESI,[EDX + EAX*0x4]
POP EAX
PUSH EBP
PUSH 0x0
CALL 0x0003dbd0
ADD ESP,0x10
MOV dword ptr [ESI],EAX
ADD dword ptr [EDI],0x1
JMP 0x0001fb20
SUB ESP,0xc
PUSH dword ptr [ESP + 0x10]
CALL 0x00013ac0
POP EAX
PUSH dword ptr [ESP + 0x18]
CALL 0x00013200
POP EAX
PUSH dword ptr [ESP + 0xc]
CALL 0x00013200
ADD ESP,0x10
MOV ECX,dword ptr [ESP + 0x9c]
XOR ECX,dword ptr GS:[0x14]
MOV EAX,dword ptr [ESP + 0x10]
JNZ 0x0001fdc6
ADD ESP,0xac
POP EBX
POP ESI
POP EDI
POP EBP
RET
CMP byte ptr [EDI],0x7e
JNZ 0x0001fd78
MOV EAX,EDI
CALL 0x0001a620
MOV ESI,EAX
SUB ESP,0x4
LEA EAX,[ESP + 0x40]
PUSH EAX
PUSH ESI
PUSH 0x3
CALL 0x00013a50
ADD ESP,0x10
CMP EAX,-0x1
JZ 0x0001fd36
MOV EAX,dword ptr [ESP + 0x4c]
AND EAX,0xf000
CMP EAX,0x4000
JZ 0x0001fd8a
SUB ESP,0xc
PUSH ESI
CALL 0x00013200
ADD ESP,0x10
JMP 0x0001fc27
LEA EAX,[EBX + 0xaa4]
SUB ESP,0x8
PUSH dword ptr [EAX]
PUSH 0x0
CALL 0x0003dbd0
MOV dword ptr [ESP + 0x1c],EAX
ADD ESP,0x10
MOV dword ptr [ESP],ESI
JMP 0x0001face
SUB ESP,0x8
PUSH EDI
PUSH 0x0
CALL 0x0003dbd0
ADD ESP,0x10
MOV ESI,EAX
JMP 0x0001fd0e
SUB ESP,0xc
PUSH ESI
CALL 0x00013200
ADD ESP,0x10
JMP 0x0001fc6b
CALL 0x00013560
SUB ESP,0xc
PUSH dword ptr [ESP + 0xc]
CALL 0x00013200
POP EAX
PUSH dword ptr [ESP + 0x18]
CALL 0x00013200
ADD ESP,0x10
MOV dword ptr [ESP + 0x10],0x0
JMP 0x0001fcd3
CALL 0x0005a8b0
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nint FUN_0001f9d0(undefined4 param_1,char param_2,int *param_3,int param_4)\n\n{\n  char *pcVar1;\n  byte *pbVar2;\n  size_t sVar3;\n  size_t sVar4;\n  DIR *__dirp;\n  dirent64 *pdVar5;\n  int iVar6;\n  size_t sVar7;\n  char *pcVar8;\n  char *__haystack;\n  char *pcVar9;\n  char *pcVar10;\n  undefined4 uVar11;\n  char *pcVar12;\n  int in_GS_OFFSET;\n  bool bVar13;\n  bool bVar14;\n  bool bVar15;\n  byte bVar16;\n  byte *local_bc;\n  char *local_b0;\n  int local_ac;\n  stat64 local_80;\n  int local_20;\n  undefined4 uStack_14;\n  \n  bVar16 = 0;\n  uStack_14 = 0x1f9d9;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  local_bc = (byte *)FUN_0003dbd0(0,param_1);\n  *param_3 = 0;\n  local_bc[param_4] = 0;\n  pcVar1 = strrchr((char *)local_bc,0x2f);\n  if (pcVar1 == (char *)0x0) {\n    local_b0 = (char *)FUN_0003dbd0(0,DAT_0007b674);\n  }\n  else {\n    pbVar2 = (byte *)FUN_0003dbd0(0,pcVar1 + 1);\n    pcVar1[1] = '\0';\n    if (*local_bc == 0x7e) {\n      local_b0 = (char *)FUN_0001a620();\n    }\n    else {\n      local_b0 = (char *)FUN_0003dbd0(0,local_bc);\n    }\n    if (*local_b0 != '/') {\n      sVar3 = strlen(DAT_0007b674);\n      sVar4 = strlen((char *)local_bc);\n      local_b0 = (char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4);\n      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc);\n    }\n    free(local_bc);\n    local_bc = pbVar2;\n  }\n  __dirp = opendir(local_b0);\n  if (__dirp != (DIR *)0x0) {\n    sVar3 = strlen((char *)local_bc);\n    local_ac = 0;\nLAB_0001fb20:\n    do {\n      pdVar5 = readdir64(__dirp);\n      if (pdVar5 == (dirent64 *)0x0) goto LAB_0001fcb0;\n      pcVar1 = pdVar5->d_name;\n      iVar6 = strncmp(pcVar1,(char *)local_bc,sVar3);\n      if (iVar6 == 0) {\n        bVar13 = *local_bc < 0x2e;\n        bVar15 = *local_bc == 0x2e;\n        if (!bVar15) {\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }\n        sVar4 = strlen(local_b0);\n        sVar7 = strlen(pcVar1);\n        pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);\n        __sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);\n        if (DAT_0007b614 == (char *)0x0) {\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }\n        else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }\n      }\n    } while( true );\n  }\n  beep();\n  free(local_bc);\n  free(local_b0);\n  local_ac = 0;\nLAB_0001fcd3:\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return local_ac;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_0005a8b0();\nLAB_0001fcb0:\n  closedir(__dirp);\n  free(local_b0);\n  free(local_bc);\n  goto LAB_0001fcd3;\n}\n\n" comment (function_definition "int FUN_0001f9d0(undefined4 param_1,char param_2,int *param_3,int param_4)\n\n{\n  char *pcVar1;\n  byte *pbVar2;\n  size_t sVar3;\n  size_t sVar4;\n  DIR *__dirp;\n  dirent64 *pdVar5;\n  int iVar6;\n  size_t sVar7;\n  char *pcVar8;\n  char *__haystack;\n  char *pcVar9;\n  char *pcVar10;\n  undefined4 uVar11;\n  char *pcVar12;\n  int in_GS_OFFSET;\n  bool bVar13;\n  bool bVar14;\n  bool bVar15;\n  byte bVar16;\n  byte *local_bc;\n  char *local_b0;\n  int local_ac;\n  stat64 local_80;\n  int local_20;\n  undefined4 uStack_14;\n  \n  bVar16 = 0;\n  uStack_14 = 0x1f9d9;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  local_bc = (byte *)FUN_0003dbd0(0,param_1);\n  *param_3 = 0;\n  local_bc[param_4] = 0;\n  pcVar1 = strrchr((char *)local_bc,0x2f);\n  if (pcVar1 == (char *)0x0) {\n    local_b0 = (char *)FUN_0003dbd0(0,DAT_0007b674);\n  }\n  else {\n    pbVar2 = (byte *)FUN_0003dbd0(0,pcVar1 + 1);\n    pcVar1[1] = '\0';\n    if (*local_bc == 0x7e) {\n      local_b0 = (char *)FUN_0001a620();\n    }\n    else {\n      local_b0 = (char *)FUN_0003dbd0(0,local_bc);\n    }\n    if (*local_b0 != '/') {\n      sVar3 = strlen(DAT_0007b674);\n      sVar4 = strlen((char *)local_bc);\n      local_b0 = (char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4);\n      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc);\n    }\n    free(local_bc);\n    local_bc = pbVar2;\n  }\n  __dirp = opendir(local_b0);\n  if (__dirp != (DIR *)0x0) {\n    sVar3 = strlen((char *)local_bc);\n    local_ac = 0;\nLAB_0001fb20:\n    do {\n      pdVar5 = readdir64(__dirp);\n      if (pdVar5 == (dirent64 *)0x0) goto LAB_0001fcb0;\n      pcVar1 = pdVar5->d_name;\n      iVar6 = strncmp(pcVar1,(char *)local_bc,sVar3);\n      if (iVar6 == 0) {\n        bVar13 = *local_bc < 0x2e;\n        bVar15 = *local_bc == 0x2e;\n        if (!bVar15) {\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }\n        sVar4 = strlen(local_b0);\n        sVar7 = strlen(pcVar1);\n        pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);\n        __sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);\n        if (DAT_0007b614 == (char *)0x0) {\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }\n        else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }\n      }\n    } while( true );\n  }\n  beep();\n  free(local_bc);\n  free(local_b0);\n  local_ac = 0;\nLAB_0001fcd3:\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return local_ac;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_0005a8b0();\nLAB_0001fcb0:\n  closedir(__dirp);\n  free(local_b0);\n  free(local_bc);\n  goto LAB_0001fcd3;\n}" primitive_type (function_declarator "FUN_0001f9d0(undefined4 param_1,char param_2,int *param_3,int param_4)" identifier (parameter_list "(undefined4 param_1,char param_2,int *param_3,int param_4)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "char param_2" primitive_type identifier) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "int param_4" primitive_type identifier) ))) (compound_statement "{\n  char *pcVar1;\n  byte *pbVar2;\n  size_t sVar3;\n  size_t sVar4;\n  DIR *__dirp;\n  dirent64 *pdVar5;\n  int iVar6;\n  size_t sVar7;\n  char *pcVar8;\n  char *__haystack;\n  char *pcVar9;\n  char *pcVar10;\n  undefined4 uVar11;\n  char *pcVar12;\n  int in_GS_OFFSET;\n  bool bVar13;\n  bool bVar14;\n  bool bVar15;\n  byte bVar16;\n  byte *local_bc;\n  char *local_b0;\n  int local_ac;\n  stat64 local_80;\n  int local_20;\n  undefined4 uStack_14;\n  \n  bVar16 = 0;\n  uStack_14 = 0x1f9d9;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  local_bc = (byte *)FUN_0003dbd0(0,param_1);\n  *param_3 = 0;\n  local_bc[param_4] = 0;\n  pcVar1 = strrchr((char *)local_bc,0x2f);\n  if (pcVar1 == (char *)0x0) {\n    local_b0 = (char *)FUN_0003dbd0(0,DAT_0007b674);\n  }\n  else {\n    pbVar2 = (byte *)FUN_0003dbd0(0,pcVar1 + 1);\n    pcVar1[1] = '\0';\n    if (*local_bc == 0x7e) {\n      local_b0 = (char *)FUN_0001a620();\n    }\n    else {\n      local_b0 = (char *)FUN_0003dbd0(0,local_bc);\n    }\n    if (*local_b0 != '/') {\n      sVar3 = strlen(DAT_0007b674);\n      sVar4 = strlen((char *)local_bc);\n      local_b0 = (char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4);\n      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc);\n    }\n    free(local_bc);\n    local_bc = pbVar2;\n  }\n  __dirp = opendir(local_b0);\n  if (__dirp != (DIR *)0x0) {\n    sVar3 = strlen((char *)local_bc);\n    local_ac = 0;\nLAB_0001fb20:\n    do {\n      pdVar5 = readdir64(__dirp);\n      if (pdVar5 == (dirent64 *)0x0) goto LAB_0001fcb0;\n      pcVar1 = pdVar5->d_name;\n      iVar6 = strncmp(pcVar1,(char *)local_bc,sVar3);\n      if (iVar6 == 0) {\n        bVar13 = *local_bc < 0x2e;\n        bVar15 = *local_bc == 0x2e;\n        if (!bVar15) {\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }\n        sVar4 = strlen(local_b0);\n        sVar7 = strlen(pcVar1);\n        pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);\n        __sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);\n        if (DAT_0007b614 == (char *)0x0) {\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }\n        else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }\n      }\n    } while( true );\n  }\n  beep();\n  free(local_bc);\n  free(local_b0);\n  local_ac = 0;\nLAB_0001fcd3:\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return local_ac;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_0005a8b0();\nLAB_0001fcb0:\n  closedir(__dirp);\n  free(local_b0);\n  free(local_bc);\n  goto LAB_0001fcd3;\n}" { (declaration "char *pcVar1;" primitive_type (pointer_declarator "*pcVar1" * identifier) ;) (declaration "byte *pbVar2;" type_identifier (pointer_declarator "*pbVar2" * identifier) ;) (declaration "size_t sVar3;" primitive_type identifier ;) (declaration "size_t sVar4;" primitive_type identifier ;) (declaration "DIR *__dirp;" type_identifier (pointer_declarator "*__dirp" * identifier) ;) (declaration "dirent64 *pdVar5;" type_identifier (pointer_declarator "*pdVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "size_t sVar7;" primitive_type identifier ;) (declaration "char *pcVar8;" primitive_type (pointer_declarator "*pcVar8" * identifier) ;) (declaration "char *__haystack;" primitive_type (pointer_declarator "*__haystack" * identifier) ;) (declaration "char *pcVar9;" primitive_type (pointer_declarator "*pcVar9" * identifier) ;) (declaration "char *pcVar10;" primitive_type (pointer_declarator "*pcVar10" * identifier) ;) (declaration "undefined4 uVar11;" type_identifier identifier ;) (declaration "char *pcVar12;" primitive_type (pointer_declarator "*pcVar12" * identifier) ;) (declaration "int in_GS_OFFSET;" primitive_type identifier ;) (declaration "bool bVar13;" primitive_type identifier ;) (declaration "bool bVar14;" primitive_type identifier ;) (declaration "bool bVar15;" primitive_type identifier ;) (declaration "byte bVar16;" type_identifier identifier ;) (declaration "byte *local_bc;" type_identifier (pointer_declarator "*local_bc" * identifier) ;) (declaration "char *local_b0;" primitive_type (pointer_declarator "*local_b0" * identifier) ;) (declaration "int local_ac;" primitive_type identifier ;) (declaration "stat64 local_80;" type_identifier identifier ;) (declaration "int local_20;" primitive_type identifier ;) (declaration "undefined4 uStack_14;" type_identifier identifier ;) (expression_statement "bVar16 = 0;" (assignment_expression "bVar16 = 0" identifier = number_literal) ;) (expression_statement "uStack_14 = 0x1f9d9;" (assignment_expression "uStack_14 = 0x1f9d9" identifier = number_literal) ;) (expression_statement "local_20 = *(int *)(in_GS_OFFSET + 0x14);" (assignment_expression "local_20 = *(int *)(in_GS_OFFSET + 0x14)" identifier = (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) ;) (expression_statement "local_bc = (byte *)FUN_0003dbd0(0,param_1);" (assignment_expression "local_bc = (byte *)FUN_0003dbd0(0,param_1)" identifier = (cast_expression "(byte *)FUN_0003dbd0(0,param_1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0003dbd0(0,param_1)" identifier (argument_list "(0,param_1)" ( number_literal , identifier ))))) ;) (expression_statement "*param_3 = 0;" (assignment_expression "*param_3 = 0" (pointer_expression "*param_3" * identifier) = number_literal) ;) (expression_statement "local_bc[param_4] = 0;" (assignment_expression "local_bc[param_4] = 0" (subscript_expression "local_bc[param_4]" identifier [ identifier ]) = number_literal) ;) (expression_statement "pcVar1 = strrchr((char *)local_bc,0x2f);" (assignment_expression "pcVar1 = strrchr((char *)local_bc,0x2f)" identifier = (call_expression "strrchr((char *)local_bc,0x2f)" identifier (argument_list "((char *)local_bc,0x2f)" ( (cast_expression "(char *)local_bc" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , number_literal )))) ;) (if_statement "if (pcVar1 == (char *)0x0) {\n    local_b0 = (char *)FUN_0003dbd0(0,DAT_0007b674);\n  }\n  else {\n    pbVar2 = (byte *)FUN_0003dbd0(0,pcVar1 + 1);\n    pcVar1[1] = '\0';\n    if (*local_bc == 0x7e) {\n      local_b0 = (char *)FUN_0001a620();\n    }\n    else {\n      local_b0 = (char *)FUN_0003dbd0(0,local_bc);\n    }\n    if (*local_b0 != '/') {\n      sVar3 = strlen(DAT_0007b674);\n      sVar4 = strlen((char *)local_bc);\n      local_b0 = (char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4);\n      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc);\n    }\n    free(local_bc);\n    local_bc = pbVar2;\n  }" if (parenthesized_expression "(pcVar1 == (char *)0x0)" ( (binary_expression "pcVar1 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    local_b0 = (char *)FUN_0003dbd0(0,DAT_0007b674);\n  }" { (expression_statement "local_b0 = (char *)FUN_0003dbd0(0,DAT_0007b674);" (assignment_expression "local_b0 = (char *)FUN_0003dbd0(0,DAT_0007b674)" identifier = (cast_expression "(char *)FUN_0003dbd0(0,DAT_0007b674)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0003dbd0(0,DAT_0007b674)" identifier (argument_list "(0,DAT_0007b674)" ( number_literal , identifier ))))) ;) }) (else_clause "else {\n    pbVar2 = (byte *)FUN_0003dbd0(0,pcVar1 + 1);\n    pcVar1[1] = '\0';\n    if (*local_bc == 0x7e) {\n      local_b0 = (char *)FUN_0001a620();\n    }\n    else {\n      local_b0 = (char *)FUN_0003dbd0(0,local_bc);\n    }\n    if (*local_b0 != '/') {\n      sVar3 = strlen(DAT_0007b674);\n      sVar4 = strlen((char *)local_bc);\n      local_b0 = (char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4);\n      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc);\n    }\n    free(local_bc);\n    local_bc = pbVar2;\n  }" else (compound_statement "{\n    pbVar2 = (byte *)FUN_0003dbd0(0,pcVar1 + 1);\n    pcVar1[1] = '\0';\n    if (*local_bc == 0x7e) {\n      local_b0 = (char *)FUN_0001a620();\n    }\n    else {\n      local_b0 = (char *)FUN_0003dbd0(0,local_bc);\n    }\n    if (*local_b0 != '/') {\n      sVar3 = strlen(DAT_0007b674);\n      sVar4 = strlen((char *)local_bc);\n      local_b0 = (char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4);\n      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc);\n    }\n    free(local_bc);\n    local_bc = pbVar2;\n  }" { (expression_statement "pbVar2 = (byte *)FUN_0003dbd0(0,pcVar1 + 1);" (assignment_expression "pbVar2 = (byte *)FUN_0003dbd0(0,pcVar1 + 1)" identifier = (cast_expression "(byte *)FUN_0003dbd0(0,pcVar1 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0003dbd0(0,pcVar1 + 1)" identifier (argument_list "(0,pcVar1 + 1)" ( number_literal , (binary_expression "pcVar1 + 1" identifier + number_literal) ))))) ;) (expression_statement "pcVar1[1] = '\0';" (assignment_expression "pcVar1[1] = '\0'" (subscript_expression "pcVar1[1]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (if_statement "if (*local_bc == 0x7e) {\n      local_b0 = (char *)FUN_0001a620();\n    }\n    else {\n      local_b0 = (char *)FUN_0003dbd0(0,local_bc);\n    }" if (parenthesized_expression "(*local_bc == 0x7e)" ( (binary_expression "*local_bc == 0x7e" (pointer_expression "*local_bc" * identifier) == number_literal) )) (compound_statement "{\n      local_b0 = (char *)FUN_0001a620();\n    }" { (expression_statement "local_b0 = (char *)FUN_0001a620();" (assignment_expression "local_b0 = (char *)FUN_0001a620()" identifier = (cast_expression "(char *)FUN_0001a620()" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0001a620()" identifier (argument_list "()" ( ))))) ;) }) (else_clause "else {\n      local_b0 = (char *)FUN_0003dbd0(0,local_bc);\n    }" else (compound_statement "{\n      local_b0 = (char *)FUN_0003dbd0(0,local_bc);\n    }" { (expression_statement "local_b0 = (char *)FUN_0003dbd0(0,local_bc);" (assignment_expression "local_b0 = (char *)FUN_0003dbd0(0,local_bc)" identifier = (cast_expression "(char *)FUN_0003dbd0(0,local_bc)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0003dbd0(0,local_bc)" identifier (argument_list "(0,local_bc)" ( number_literal , identifier ))))) ;) }))) (if_statement "if (*local_b0 != '/') {\n      sVar3 = strlen(DAT_0007b674);\n      sVar4 = strlen((char *)local_bc);\n      local_b0 = (char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4);\n      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc);\n    }" if (parenthesized_expression "(*local_b0 != '/')" ( (binary_expression "*local_b0 != '/'" (pointer_expression "*local_b0" * identifier) != (char_literal "'/'" ' character ')) )) (compound_statement "{\n      sVar3 = strlen(DAT_0007b674);\n      sVar4 = strlen((char *)local_bc);\n      local_b0 = (char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4);\n      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc);\n    }" { (expression_statement "sVar3 = strlen(DAT_0007b674);" (assignment_expression "sVar3 = strlen(DAT_0007b674)" identifier = (call_expression "strlen(DAT_0007b674)" identifier (argument_list "(DAT_0007b674)" ( identifier )))) ;) (expression_statement "sVar4 = strlen((char *)local_bc);" (assignment_expression "sVar4 = strlen((char *)local_bc)" identifier = (call_expression "strlen((char *)local_bc)" identifier (argument_list "((char *)local_bc)" ( (cast_expression "(char *)local_bc" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) (expression_statement "local_b0 = (char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4);" (assignment_expression "local_b0 = (char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4)" identifier = (cast_expression "(char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0003dad0(local_b0,sVar3 + 1 + sVar4)" identifier (argument_list "(local_b0,sVar3 + 1 + sVar4)" ( identifier , (binary_expression "sVar3 + 1 + sVar4" (binary_expression "sVar3 + 1" identifier + number_literal) + identifier) ))))) ;) (expression_statement "__sprintf_chk(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc);" (call_expression "__sprintf_chk(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc)" identifier (argument_list "(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc)" ( identifier , number_literal , number_literal , (string_literal ""%s%s"" " string_content ") , identifier , identifier ))) ;) })) (expression_statement "free(local_bc);" (call_expression "free(local_bc)" identifier (argument_list "(local_bc)" ( identifier ))) ;) (expression_statement "local_bc = pbVar2;" (assignment_expression "local_bc = pbVar2" identifier = identifier) ;) }))) (expression_statement "__dirp = opendir(local_b0);" (assignment_expression "__dirp = opendir(local_b0)" identifier = (call_expression "opendir(local_b0)" identifier (argument_list "(local_b0)" ( identifier )))) ;) (if_statement "if (__dirp != (DIR *)0x0) {\n    sVar3 = strlen((char *)local_bc);\n    local_ac = 0;\nLAB_0001fb20:\n    do {\n      pdVar5 = readdir64(__dirp);\n      if (pdVar5 == (dirent64 *)0x0) goto LAB_0001fcb0;\n      pcVar1 = pdVar5->d_name;\n      iVar6 = strncmp(pcVar1,(char *)local_bc,sVar3);\n      if (iVar6 == 0) {\n        bVar13 = *local_bc < 0x2e;\n        bVar15 = *local_bc == 0x2e;\n        if (!bVar15) {\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }\n        sVar4 = strlen(local_b0);\n        sVar7 = strlen(pcVar1);\n        pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);\n        __sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);\n        if (DAT_0007b614 == (char *)0x0) {\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }\n        else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }\n      }\n    } while( true );\n  }" if (parenthesized_expression "(__dirp != (DIR *)0x0)" ( (binary_expression "__dirp != (DIR *)0x0" identifier != (cast_expression "(DIR *)0x0" ( (type_descriptor "DIR *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    sVar3 = strlen((char *)local_bc);\n    local_ac = 0;\nLAB_0001fb20:\n    do {\n      pdVar5 = readdir64(__dirp);\n      if (pdVar5 == (dirent64 *)0x0) goto LAB_0001fcb0;\n      pcVar1 = pdVar5->d_name;\n      iVar6 = strncmp(pcVar1,(char *)local_bc,sVar3);\n      if (iVar6 == 0) {\n        bVar13 = *local_bc < 0x2e;\n        bVar15 = *local_bc == 0x2e;\n        if (!bVar15) {\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }\n        sVar4 = strlen(local_b0);\n        sVar7 = strlen(pcVar1);\n        pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);\n        __sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);\n        if (DAT_0007b614 == (char *)0x0) {\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }\n        else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }\n      }\n    } while( true );\n  }" { (expression_statement "sVar3 = strlen((char *)local_bc);" (assignment_expression "sVar3 = strlen((char *)local_bc)" identifier = (call_expression "strlen((char *)local_bc)" identifier (argument_list "((char *)local_bc)" ( (cast_expression "(char *)local_bc" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) (expression_statement "local_ac = 0;" (assignment_expression "local_ac = 0" identifier = number_literal) ;) (labeled_statement "LAB_0001fb20:\n    do {\n      pdVar5 = readdir64(__dirp);\n      if (pdVar5 == (dirent64 *)0x0) goto LAB_0001fcb0;\n      pcVar1 = pdVar5->d_name;\n      iVar6 = strncmp(pcVar1,(char *)local_bc,sVar3);\n      if (iVar6 == 0) {\n        bVar13 = *local_bc < 0x2e;\n        bVar15 = *local_bc == 0x2e;\n        if (!bVar15) {\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }\n        sVar4 = strlen(local_b0);\n        sVar7 = strlen(pcVar1);\n        pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);\n        __sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);\n        if (DAT_0007b614 == (char *)0x0) {\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }\n        else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }\n      }\n    } while( true );" statement_identifier : (do_statement "do {\n      pdVar5 = readdir64(__dirp);\n      if (pdVar5 == (dirent64 *)0x0) goto LAB_0001fcb0;\n      pcVar1 = pdVar5->d_name;\n      iVar6 = strncmp(pcVar1,(char *)local_bc,sVar3);\n      if (iVar6 == 0) {\n        bVar13 = *local_bc < 0x2e;\n        bVar15 = *local_bc == 0x2e;\n        if (!bVar15) {\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }\n        sVar4 = strlen(local_b0);\n        sVar7 = strlen(pcVar1);\n        pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);\n        __sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);\n        if (DAT_0007b614 == (char *)0x0) {\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }\n        else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }\n      }\n    } while( true );" do (compound_statement "{\n      pdVar5 = readdir64(__dirp);\n      if (pdVar5 == (dirent64 *)0x0) goto LAB_0001fcb0;\n      pcVar1 = pdVar5->d_name;\n      iVar6 = strncmp(pcVar1,(char *)local_bc,sVar3);\n      if (iVar6 == 0) {\n        bVar13 = *local_bc < 0x2e;\n        bVar15 = *local_bc == 0x2e;\n        if (!bVar15) {\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }\n        sVar4 = strlen(local_b0);\n        sVar7 = strlen(pcVar1);\n        pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);\n        __sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);\n        if (DAT_0007b614 == (char *)0x0) {\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }\n        else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }\n      }\n    }" { (expression_statement "pdVar5 = readdir64(__dirp);" (assignment_expression "pdVar5 = readdir64(__dirp)" identifier = (call_expression "readdir64(__dirp)" identifier (argument_list "(__dirp)" ( identifier )))) ;) (if_statement "if (pdVar5 == (dirent64 *)0x0) goto LAB_0001fcb0;" if (parenthesized_expression "(pdVar5 == (dirent64 *)0x0)" ( (binary_expression "pdVar5 == (dirent64 *)0x0" identifier == (cast_expression "(dirent64 *)0x0" ( (type_descriptor "dirent64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0001fcb0;" goto statement_identifier ;)) (expression_statement "pcVar1 = pdVar5->d_name;" (assignment_expression "pcVar1 = pdVar5->d_name" identifier = (field_expression "pdVar5->d_name" identifier -> field_identifier)) ;) (expression_statement "iVar6 = strncmp(pcVar1,(char *)local_bc,sVar3);" (assignment_expression "iVar6 = strncmp(pcVar1,(char *)local_bc,sVar3)" identifier = (call_expression "strncmp(pcVar1,(char *)local_bc,sVar3)" identifier (argument_list "(pcVar1,(char *)local_bc,sVar3)" ( identifier , (cast_expression "(char *)local_bc" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , identifier )))) ;) (if_statement "if (iVar6 == 0) {\n        bVar13 = *local_bc < 0x2e;\n        bVar15 = *local_bc == 0x2e;\n        if (!bVar15) {\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }\n        sVar4 = strlen(local_b0);\n        sVar7 = strlen(pcVar1);\n        pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);\n        __sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);\n        if (DAT_0007b614 == (char *)0x0) {\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }\n        else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }\n      }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n        bVar13 = *local_bc < 0x2e;\n        bVar15 = *local_bc == 0x2e;\n        if (!bVar15) {\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }\n        sVar4 = strlen(local_b0);\n        sVar7 = strlen(pcVar1);\n        pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);\n        __sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);\n        if (DAT_0007b614 == (char *)0x0) {\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }\n        else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }\n      }" { (expression_statement "bVar13 = *local_bc < 0x2e;" (assignment_expression "bVar13 = *local_bc < 0x2e" identifier = (binary_expression "*local_bc < 0x2e" (pointer_expression "*local_bc" * identifier) < number_literal)) ;) (expression_statement "bVar15 = *local_bc == 0x2e;" (assignment_expression "bVar15 = *local_bc == 0x2e" identifier = (binary_expression "*local_bc == 0x2e" (pointer_expression "*local_bc" * identifier) == number_literal)) ;) (if_statement "if (!bVar15) {\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }" if (parenthesized_expression "(!bVar15)" ( (unary_expression "!bVar15" ! identifier) )) (compound_statement "{\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }" { (expression_statement "iVar6 = 2;" (assignment_expression "iVar6 = 2" identifier = number_literal) ;) (expression_statement "pcVar8 = pcVar1;" (assignment_expression "pcVar8 = pcVar1" identifier = identifier) ;) (expression_statement "pbVar2 = &DAT_0005c437;" (assignment_expression "pbVar2 = &DAT_0005c437" identifier = (pointer_expression "&DAT_0005c437" & identifier)) ;) (do_statement "do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);" do (compound_statement "{\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          }" { (if_statement "if (iVar6 == 0) break;" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar6 = iVar6 + -1;" (assignment_expression "iVar6 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (expression_statement "bVar13 = (byte)*pcVar8 < *pbVar2;" (assignment_expression "bVar13 = (byte)*pcVar8 < *pbVar2" identifier = (binary_expression "(byte)*pcVar8 < *pbVar2" (binary_expression "(byte)*pcVar8" (parenthesized_expression "(byte)" ( identifier )) * identifier) < (pointer_expression "*pbVar2" * identifier))) ;) (expression_statement "bVar15 = *pcVar8 == *pbVar2;" (assignment_expression "bVar15 = *pcVar8 == *pbVar2" identifier = (binary_expression "*pcVar8 == *pbVar2" (pointer_expression "*pcVar8" * identifier) == (pointer_expression "*pbVar2" * identifier))) ;) (expression_statement "pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;" (assignment_expression "pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1" identifier = (binary_expression "pcVar8 + (uint)bVar16 * -2 + 1" (binary_expression "pcVar8 + (uint)bVar16 * -2" identifier + (binary_expression "(uint)bVar16 * -2" (cast_expression "(uint)bVar16" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;" (assignment_expression "pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1" identifier = (binary_expression "pbVar2 + (uint)bVar16 * -2 + 1" (binary_expression "pbVar2 + (uint)bVar16 * -2" identifier + (binary_expression "(uint)bVar16 * -2" (cast_expression "(uint)bVar16" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar15)" ( identifier )) ;) (expression_statement "bVar14 = false;" (assignment_expression "bVar14 = false" identifier = false) ;) (expression_statement "bVar13 = (!bVar13 && !bVar15) == bVar13;" (assignment_expression "bVar13 = (!bVar13 && !bVar15) == bVar13" identifier = (binary_expression "(!bVar13 && !bVar15) == bVar13" (parenthesized_expression "(!bVar13 && !bVar15)" ( (binary_expression "!bVar13 && !bVar15" (unary_expression "!bVar13" ! identifier) && (unary_expression "!bVar15" ! identifier)) )) == identifier)) ;) (if_statement "if (bVar13) goto LAB_0001fb20;" if (parenthesized_expression "(bVar13)" ( identifier )) (goto_statement "goto LAB_0001fb20;" goto statement_identifier ;)) (expression_statement "iVar6 = 3;" (assignment_expression "iVar6 = 3" identifier = number_literal) ;) (expression_statement "pcVar8 = pcVar1;" (assignment_expression "pcVar8 = pcVar1" identifier = identifier) ;) (expression_statement "pbVar2 = (byte *)0x60801;" (assignment_expression "pbVar2 = (byte *)0x60801" identifier = (cast_expression "(byte *)0x60801" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (do_statement "do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);" do (compound_statement "{\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          }" { (if_statement "if (iVar6 == 0) break;" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar6 = iVar6 + -1;" (assignment_expression "iVar6 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (expression_statement "bVar14 = (byte)*pcVar8 < *pbVar2;" (assignment_expression "bVar14 = (byte)*pcVar8 < *pbVar2" identifier = (binary_expression "(byte)*pcVar8 < *pbVar2" (binary_expression "(byte)*pcVar8" (parenthesized_expression "(byte)" ( identifier )) * identifier) < (pointer_expression "*pbVar2" * identifier))) ;) (expression_statement "bVar13 = *pcVar8 == *pbVar2;" (assignment_expression "bVar13 = *pcVar8 == *pbVar2" identifier = (binary_expression "*pcVar8 == *pbVar2" (pointer_expression "*pcVar8" * identifier) == (pointer_expression "*pbVar2" * identifier))) ;) (expression_statement "pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;" (assignment_expression "pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1" identifier = (binary_expression "pcVar8 + (uint)bVar16 * -2 + 1" (binary_expression "pcVar8 + (uint)bVar16 * -2" identifier + (binary_expression "(uint)bVar16 * -2" (cast_expression "(uint)bVar16" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;" (assignment_expression "pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1" identifier = (binary_expression "pbVar2 + (uint)bVar16 * -2 + 1" (binary_expression "pbVar2 + (uint)bVar16 * -2" identifier + (binary_expression "(uint)bVar16 * -2" (cast_expression "(uint)bVar16" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar13)" ( identifier )) ;) (if_statement "if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;" if (parenthesized_expression "((!bVar14 && !bVar13) == bVar14)" ( (binary_expression "(!bVar14 && !bVar13) == bVar14" (parenthesized_expression "(!bVar14 && !bVar13)" ( (binary_expression "!bVar14 && !bVar13" (unary_expression "!bVar14" ! identifier) && (unary_expression "!bVar13" ! identifier)) )) == identifier) )) (goto_statement "goto LAB_0001fb20;" goto statement_identifier ;)) })) (expression_statement "sVar4 = strlen(local_b0);" (assignment_expression "sVar4 = strlen(local_b0)" identifier = (call_expression "strlen(local_b0)" identifier (argument_list "(local_b0)" ( identifier )))) ;) (expression_statement "sVar7 = strlen(pcVar1);" (assignment_expression "sVar7 = strlen(pcVar1)" identifier = (call_expression "strlen(pcVar1)" identifier (argument_list "(pcVar1)" ( identifier )))) ;) (expression_statement "pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);" (assignment_expression "pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7)" identifier = (cast_expression "(char *)FUN_0003da70(sVar4 + 1 + sVar7)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0003da70(sVar4 + 1 + sVar7)" identifier (argument_list "(sVar4 + 1 + sVar7)" ( (binary_expression "sVar4 + 1 + sVar7" (binary_expression "sVar4 + 1" identifier + number_literal) + identifier) ))))) ;) (expression_statement "__sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);" (call_expression "__sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1)" identifier (argument_list "(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1)" ( identifier , number_literal , number_literal , (string_literal ""%s%s"" " string_content ") , identifier , identifier ))) ;) (if_statement "if (DAT_0007b614 == (char *)0x0) {\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }\n        else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }" if (parenthesized_expression "(DAT_0007b614 == (char *)0x0)" ( (binary_expression "DAT_0007b614 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }" { (labeled_statement "LAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }" statement_identifier : (if_statement "if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }" if (parenthesized_expression "(param_2 == '\0')" ( (binary_expression "param_2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }" { (if_statement "if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }" if (parenthesized_expression "(*pcVar8 == '~')" ( (binary_expression "*pcVar8 == '~'" (pointer_expression "*pcVar8" * identifier) == (char_literal "'~'" ' character ')) )) (compound_statement "{\n              pcVar12 = (char *)FUN_0001a620();\n            }" { (expression_statement "pcVar12 = (char *)FUN_0001a620();" (assignment_expression "pcVar12 = (char *)FUN_0001a620()" identifier = (cast_expression "(char *)FUN_0001a620()" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0001a620()" identifier (argument_list "()" ( ))))) ;) }) (else_clause "else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }" else (compound_statement "{\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }" { (expression_statement "pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);" (assignment_expression "pcVar12 = (char *)FUN_0003dbd0(0,pcVar8)" identifier = (cast_expression "(char *)FUN_0003dbd0(0,pcVar8)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0003dbd0(0,pcVar8)" identifier (argument_list "(0,pcVar8)" ( number_literal , identifier ))))) ;) }))) (expression_statement "iVar6 = __xstat64(3,pcVar12,&local_80);" (assignment_expression "iVar6 = __xstat64(3,pcVar12,&local_80)" identifier = (call_expression "__xstat64(3,pcVar12,&local_80)" identifier (argument_list "(3,pcVar12,&local_80)" ( number_literal , identifier , (pointer_expression "&local_80" & identifier) )))) ;) (if_statement "if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }" if (parenthesized_expression "((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000))" ( (binary_expression "(iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)" (parenthesized_expression "(iVar6 == -1)" ( (binary_expression "iVar6 == -1" identifier == number_literal) )) || (parenthesized_expression "((local_80.st_mode & 0xf000) != 0x4000)" ( (binary_expression "(local_80.st_mode & 0xf000) != 0x4000" (parenthesized_expression "(local_80.st_mode & 0xf000)" ( (binary_expression "local_80.st_mode & 0xf000" (field_expression "local_80.st_mode" identifier . field_identifier) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }" { (expression_statement "free(pcVar12);" (call_expression "free(pcVar12)" identifier (argument_list "(pcVar12)" ( identifier ))) ;) (goto_statement "goto LAB_0001fc27;" goto statement_identifier ;) })) (expression_statement "free(pcVar12);" (call_expression "free(pcVar12)" identifier (argument_list "(pcVar12)" ( identifier ))) ;) }))) (expression_statement "free(pcVar8);" (call_expression "free(pcVar8)" identifier (argument_list "(pcVar8)" ( identifier ))) ;) (expression_statement "local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);" (assignment_expression "local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4)" identifier = (call_expression "FUN_0003dad0(local_ac,*param_3 * 4 + 4)" identifier (argument_list "(local_ac,*param_3 * 4 + 4)" ( identifier , (binary_expression "*param_3 * 4 + 4" (binary_expression "*param_3 * 4" (pointer_expression "*param_3" * identifier) * number_literal) + number_literal) )))) ;) (expression_statement "iVar6 = *param_3;" (assignment_expression "iVar6 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (expression_statement "uVar11 = FUN_0003dbd0(0,pcVar1);" (assignment_expression "uVar11 = FUN_0003dbd0(0,pcVar1)" identifier = (call_expression "FUN_0003dbd0(0,pcVar1)" identifier (argument_list "(0,pcVar1)" ( number_literal , identifier )))) ;) (expression_statement "*(undefined4 *)(local_ac + iVar6 * 4) = uVar11;" (assignment_expression "*(undefined4 *)(local_ac + iVar6 * 4) = uVar11" (pointer_expression "*(undefined4 *)(local_ac + iVar6 * 4)" * (cast_expression "(undefined4 *)(local_ac + iVar6 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_ac + iVar6 * 4)" ( (binary_expression "local_ac + iVar6 * 4" identifier + (binary_expression "iVar6 * 4" identifier * number_literal)) )))) = identifier) ;) (expression_statement "*param_3 = *param_3 + 1;" (assignment_expression "*param_3 = *param_3 + 1" (pointer_expression "*param_3" * identifier) = (binary_expression "*param_3 + 1" (pointer_expression "*param_3" * identifier) + number_literal)) ;) }) (else_clause "else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }" else (compound_statement "{\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }" { (expression_statement "__haystack = (char *)FUN_0001bac0(pcVar8);" (assignment_expression "__haystack = (char *)FUN_0001bac0(pcVar8)" identifier = (cast_expression "(char *)FUN_0001bac0(pcVar8)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0001bac0(pcVar8)" identifier (argument_list "(pcVar8)" ( identifier ))))) ;) (expression_statement "pcVar12 = DAT_0007b614;" (assignment_expression "pcVar12 = DAT_0007b614" identifier = identifier) ;) (if_statement "if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }" if (parenthesized_expression "(__haystack != (char *)0x0)" ( (binary_expression "__haystack != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }" { (expression_statement "pcVar9 = strstr(__haystack,DAT_0007b614);" (assignment_expression "pcVar9 = strstr(__haystack,DAT_0007b614)" identifier = (call_expression "strstr(__haystack,DAT_0007b614)" identifier (argument_list "(__haystack,DAT_0007b614)" ( identifier , identifier )))) ;) (expression_statement "pcVar10 = strstr(pcVar12,__haystack);" (assignment_expression "pcVar10 = strstr(pcVar12,__haystack)" identifier = (call_expression "strstr(pcVar12,__haystack)" identifier (argument_list "(pcVar12,__haystack)" ( identifier , identifier )))) ;) (expression_statement "free(__haystack);" (call_expression "free(__haystack)" identifier (argument_list "(__haystack)" ( identifier ))) ;) (if_statement "if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;" if (parenthesized_expression "((__haystack == pcVar9) || (pcVar12 == pcVar10))" ( (binary_expression "(__haystack == pcVar9) || (pcVar12 == pcVar10)" (parenthesized_expression "(__haystack == pcVar9)" ( (binary_expression "__haystack == pcVar9" identifier == identifier) )) || (parenthesized_expression "(pcVar12 == pcVar10)" ( (binary_expression "pcVar12 == pcVar10" identifier == identifier) ))) )) (goto_statement "goto LAB_0001fc60;" goto statement_identifier ;)) })) (labeled_statement "LAB_0001fc27:\n          free(pcVar8);" statement_identifier : (expression_statement "free(pcVar8);" (call_expression "free(pcVar8)" identifier (argument_list "(pcVar8)" ( identifier ))) ;)) }))) })) }) while (parenthesized_expression "( true )" ( true )) ;)) })) (expression_statement "beep();" (call_expression "beep()" identifier (argument_list "()" ( ))) ;) (expression_statement "free(local_bc);" (call_expression "free(local_bc)" identifier (argument_list "(local_bc)" ( identifier ))) ;) (expression_statement "free(local_b0);" (call_expression "free(local_b0)" identifier (argument_list "(local_b0)" ( identifier ))) ;) (expression_statement "local_ac = 0;" (assignment_expression "local_ac = 0" identifier = number_literal) ;) (labeled_statement "LAB_0001fcd3:\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return local_ac;\n  }" statement_identifier : (if_statement "if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return local_ac;\n  }" if (parenthesized_expression "(local_20 == *(int *)(in_GS_OFFSET + 0x14))" ( (binary_expression "local_20 == *(int *)(in_GS_OFFSET + 0x14)" identifier == (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) )) (compound_statement "{\n    return local_ac;\n  }" { (return_statement "return local_ac;" return identifier ;) }))) comment (expression_statement "FUN_0005a8b0();" (call_expression "FUN_0005a8b0()" identifier (argument_list "()" ( ))) ;) (labeled_statement "LAB_0001fcb0:\n  closedir(__dirp);" statement_identifier : (expression_statement "closedir(__dirp);" (call_expression "closedir(__dirp)" identifier (argument_list "(__dirp)" ( identifier ))) ;)) (expression_statement "free(local_b0);" (call_expression "free(local_b0)" identifier (argument_list "(local_b0)" ( identifier ))) ;) (expression_statement "free(local_bc);" (call_expression "free(local_bc)" identifier (argument_list "(local_bc)" ( identifier ))) ;) (goto_statement "goto LAB_0001fcd3;" goto statement_identifier ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n/* WARNING: Unknown calling convention */\n\nchar ** cwd_tab_completion(char *buf,_Bool allow_files,size_t *num_matches,size_t buf_len)\n\n{\n  int iVar1;\n  size_t sVar2;\n  char *pcVar3;\n  byte *pbVar4;\n  size_t sVar5;\n  size_t sVar6;\n  DIR *__dirp;\n  dirent64 *pdVar7;\n  int iVar8;\n  size_t sVar9;\n  char *pcVar10;\n  char *__haystack;\n  char *pcVar11;\n  char *pcVar12;\n  char *pcVar13;\n  int in_GS_OFFSET;\n  bool bVar14;\n  bool bVar15;\n  bool bVar16;\n  byte bVar17;\n  byte *local_bc;\n  char *local_b0;\n  char **local_ac;\n  stat fileinfo;\n  \n  bVar17 = 0;\n  iVar1 = *(int *)(in_GS_OFFSET + 0x14);\n  local_bc = (byte *)mallocstrcpy((char *)0x0,buf);\n  *num_matches = 0;\n  local_bc[buf_len] = 0;\n  pcVar3 = strrchr((char *)local_bc,0x2f);\n  if (pcVar3 == (char *)0x0) {\n    local_b0 = mallocstrcpy((char *)0x0,present_path);\n  }\n  else {\n    pbVar4 = (byte *)mallocstrcpy((char *)0x0,pcVar3 + 1);\n    pcVar3[1] = '\0';\n    if (*local_bc == 0x7e) {\n      local_b0 = real_dir_from_tilde((char *)local_bc);\n    }\n    else {\n      local_b0 = mallocstrcpy((char *)0x0,(char *)local_bc);\n    }\n    if (*local_b0 != '/') {\n      sVar5 = strlen(present_path);\n      sVar6 = strlen((char *)local_bc);\n      local_b0 = (char *)nrealloc(local_b0,sVar5 + 1 + sVar6);\n      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",present_path,local_bc);\n    }\n    free(local_bc);\n    local_bc = pbVar4;\n  }\n  __dirp = opendir(local_b0);\n  if (__dirp != (DIR *)0x0) {\n    sVar5 = strlen((char *)local_bc);\n    local_ac = (char **)0x0;\nLAB_0001fb20:\n    do {\n      pdVar7 = readdir64(__dirp);\n      if (pdVar7 == (dirent64 *)0x0) goto LAB_0001fcb0;\n      pcVar3 = pdVar7->d_name;\n      iVar8 = strncmp(pcVar3,(char *)local_bc,sVar5);\n      if (iVar8 == 0) {\n        bVar14 = *local_bc < 0x2e;\n        bVar16 = *local_bc == 0x2e;\n        if (!bVar16) {\n          iVar8 = 2;\n          pcVar10 = pcVar3;\n          pbVar4 = &DAT_0005c437;\n          do {\n            if (iVar8 == 0) break;\n            iVar8 = iVar8 + -1;\n            bVar14 = (byte)*pcVar10 < *pbVar4;\n            bVar16 = *pcVar10 == *pbVar4;\n            pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1;\n            pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1;\n          } while (bVar16);\n          bVar15 = false;\n          bVar14 = (!bVar14 && !bVar16) == bVar14;\n          if (bVar14) goto LAB_0001fb20;\n          iVar8 = 3;\n          pcVar10 = pcVar3;\n          pbVar4 = (byte *)0x60801;\n          do {\n            if (iVar8 == 0) break;\n            iVar8 = iVar8 + -1;\n            bVar15 = (byte)*pcVar10 < *pbVar4;\n            bVar14 = *pcVar10 == *pbVar4;\n            pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1;\n            pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1;\n          } while (bVar14);\n          if ((!bVar15 && !bVar14) == bVar15) goto LAB_0001fb20;\n        }\n        sVar6 = strlen(local_b0);\n        sVar9 = strlen(pcVar3);\n        pcVar10 = (char *)nmalloc(sVar6 + 1 + sVar9);\n        __sprintf_chk(pcVar10,1,0xffffffff,"%s%s",local_b0,pcVar3);\n        if (operating_dir == (char *)0x0) {\nLAB_0001fc60:\n          if (!allow_files) {\n            if (*pcVar10 == '~') {\n              pcVar13 = real_dir_from_tilde(pcVar10);\n            }\n            else {\n              pcVar13 = mallocstrcpy((char *)0x0,pcVar10);\n            }\n            iVar8 = __xstat64(3,pcVar13,(stat64 *)&fileinfo);\n            if ((iVar8 == -1) || ((fileinfo.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar13);\n              goto LAB_0001fc27;\n            }\n            free(pcVar13);\n          }\n          free(pcVar10);\n          local_ac = (char **)nrealloc(local_ac,*num_matches * 4 + 4);\n          sVar2 = *num_matches;\n          pcVar3 = mallocstrcpy((char *)0x0,pcVar3);\n          local_ac[sVar2] = pcVar3;\n          *num_matches = *num_matches + 1;\n        }\n        else {\n          __haystack = get_full_path(pcVar10);\n          pcVar13 = operating_dir;\n          if (__haystack != (char *)0x0) {\n            pcVar11 = strstr(__haystack,operating_dir);\n            pcVar12 = strstr(pcVar13,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar11) || (pcVar13 == pcVar12)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar10);\n        }\n      }\n    } while( true );\n  }\n  beep();\n  free(local_bc);\n  free(local_b0);\n  local_ac = (char **)0x0;\nLAB_0001fcd3:\n  if (iVar1 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return local_ac;\n  }\n                    /* WARNING: Subroutine does not return */\n  __stack_chk_fail_local();\nLAB_0001fcb0:\n  closedir(__dirp);\n  free(local_b0);\n  free(local_bc);\n  goto LAB_0001fcd3;\n}\n\n" comment comment (function_definition "char ** cwd_tab_completion(char *buf,_Bool allow_files,size_t *num_matches,size_t buf_len)\n\n{\n  int iVar1;\n  size_t sVar2;\n  char *pcVar3;\n  byte *pbVar4;\n  size_t sVar5;\n  size_t sVar6;\n  DIR *__dirp;\n  dirent64 *pdVar7;\n  int iVar8;\n  size_t sVar9;\n  char *pcVar10;\n  char *__haystack;\n  char *pcVar11;\n  char *pcVar12;\n  char *pcVar13;\n  int in_GS_OFFSET;\n  bool bVar14;\n  bool bVar15;\n  bool bVar16;\n  byte bVar17;\n  byte *local_bc;\n  char *local_b0;\n  char **local_ac;\n  stat fileinfo;\n  \n  bVar17 = 0;\n  iVar1 = *(int *)(in_GS_OFFSET + 0x14);\n  local_bc = (byte *)mallocstrcpy((char *)0x0,buf);\n  *num_matches = 0;\n  local_bc[buf_len] = 0;\n  pcVar3 = strrchr((char *)local_bc,0x2f);\n  if (pcVar3 == (char *)0x0) {\n    local_b0 = mallocstrcpy((char *)0x0,present_path);\n  }\n  else {\n    pbVar4 = (byte *)mallocstrcpy((char *)0x0,pcVar3 + 1);\n    pcVar3[1] = '\0';\n    if (*local_bc == 0x7e) {\n      local_b0 = real_dir_from_tilde((char *)local_bc);\n    }\n    else {\n      local_b0 = mallocstrcpy((char *)0x0,(char *)local_bc);\n    }\n    if (*local_b0 != '/') {\n      sVar5 = strlen(present_path);\n      sVar6 = strlen((char *)local_bc);\n      local_b0 = (char *)nrealloc(local_b0,sVar5 + 1 + sVar6);\n      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",present_path,local_bc);\n    }\n    free(local_bc);\n    local_bc = pbVar4;\n  }\n  __dirp = opendir(local_b0);\n  if (__dirp != (DIR *)0x0) {\n    sVar5 = strlen((char *)local_bc);\n    local_ac = (char **)0x0;\nLAB_0001fb20:\n    do {\n      pdVar7 = readdir64(__dirp);\n      if (pdVar7 == (dirent64 *)0x0) goto LAB_0001fcb0;\n      pcVar3 = pdVar7->d_name;\n      iVar8 = strncmp(pcVar3,(char *)local_bc,sVar5);\n      if (iVar8 == 0) {\n        bVar14 = *local_bc < 0x2e;\n        bVar16 = *local_bc == 0x2e;\n        if (!bVar16) {\n          iVar8 = 2;\n          pcVar10 = pcVar3;\n          pbVar4 = &DAT_0005c437;\n          do {\n            if (iVar8 == 0) break;\n            iVar8 = iVar8 + -1;\n            bVar14 = (byte)*pcVar10 < *pbVar4;\n            bVar16 = *pcVar10 == *pbVar4;\n            pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1;\n            pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1;\n          } while (bVar16);\n          bVar15 = false;\n          bVar14 = (!bVar14 && !bVar16) == bVar14;\n          if (bVar14) goto LAB_0001fb20;\n          iVar8 = 3;\n          pcVar10 = pcVar3;\n          pbVar4 = (byte *)0x60801;\n          do {\n            if (iVar8 == 0) break;\n            iVar8 = iVar8 + -1;\n            bVar15 = (byte)*pcVar10 < *pbVar4;\n            bVar14 = *pcVar10 == *pbVar4;\n            pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1;\n            pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1;\n          } while (bVar14);\n          if ((!bVar15 && !bVar14) == bVar15) goto LAB_0001fb20;\n        }\n        sVar6 = strlen(local_b0);\n        sVar9 = strlen(pcVar3);\n        pcVar10 = (char *)nmalloc(sVar6 + 1 + sVar9);\n        __sprintf_chk(pcVar10,1,0xffffffff,"%s%s",local_b0,pcVar3);\n        if (operating_dir == (char *)0x0) {\nLAB_0001fc60:\n          if (!allow_files) {\n            if (*pcVar10 == '~') {\n              pcVar13 = real_dir_from_tilde(pcVar10);\n            }\n            else {\n              pcVar13 = mallocstrcpy((char *)0x0,pcVar10);\n            }\n            iVar8 = __xstat64(3,pcVar13,(stat64 *)&fileinfo);\n            if ((iVar8 == -1) || ((fileinfo.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar13);\n              goto LAB_0001fc27;\n            }\n            free(pcVar13);\n          }\n          free(pcVar10);\n          local_ac = (char **)nrealloc(local_ac,*num_matches * 4 + 4);\n          sVar2 = *num_matches;\n          pcVar3 = mallocstrcpy((char *)0x0,pcVar3);\n          local_ac[sVar2] = pcVar3;\n          *num_matches = *num_matches + 1;\n        }\n        else {\n          __haystack = get_full_path(pcVar10);\n          pcVar13 = operating_dir;\n          if (__haystack != (char *)0x0) {\n            pcVar11 = strstr(__haystack,operating_dir);\n            pcVar12 = strstr(pcVar13,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar11) || (pcVar13 == pcVar12)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar10);\n        }\n      }\n    } while( true );\n  }\n  beep();\n  free(local_bc);\n  free(local_b0);\n  local_ac = (char **)0x0;\nLAB_0001fcd3:\n  if (iVar1 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return local_ac;\n  }\n                    /* WARNING: Subroutine does not return */\n  __stack_chk_fail_local();\nLAB_0001fcb0:\n  closedir(__dirp);\n  free(local_b0);\n  free(local_bc);\n  goto LAB_0001fcd3;\n}" primitive_type (pointer_declarator "** cwd_tab_completion(char *buf,_Bool allow_files,size_t *num_matches,size_t buf_len)" * (pointer_declarator "* cwd_tab_completion(char *buf,_Bool allow_files,size_t *num_matches,size_t buf_len)" * (function_declarator "cwd_tab_completion(char *buf,_Bool allow_files,size_t *num_matches,size_t buf_len)" identifier (parameter_list "(char *buf,_Bool allow_files,size_t *num_matches,size_t buf_len)" ( (parameter_declaration "char *buf" primitive_type (pointer_declarator "*buf" * identifier)) , (parameter_declaration "_Bool allow_files" type_identifier identifier) , (parameter_declaration "size_t *num_matches" primitive_type (pointer_declarator "*num_matches" * identifier)) , (parameter_declaration "size_t buf_len" primitive_type identifier) ))))) (compound_statement "{\n  int iVar1;\n  size_t sVar2;\n  char *pcVar3;\n  byte *pbVar4;\n  size_t sVar5;\n  size_t sVar6;\n  DIR *__dirp;\n  dirent64 *pdVar7;\n  int iVar8;\n  size_t sVar9;\n  char *pcVar10;\n  char *__haystack;\n  char *pcVar11;\n  char *pcVar12;\n  char *pcVar13;\n  int in_GS_OFFSET;\n  bool bVar14;\n  bool bVar15;\n  bool bVar16;\n  byte bVar17;\n  byte *local_bc;\n  char *local_b0;\n  char **local_ac;\n  stat fileinfo;\n  \n  bVar17 = 0;\n  iVar1 = *(int *)(in_GS_OFFSET + 0x14);\n  local_bc = (byte *)mallocstrcpy((char *)0x0,buf);\n  *num_matches = 0;\n  local_bc[buf_len] = 0;\n  pcVar3 = strrchr((char *)local_bc,0x2f);\n  if (pcVar3 == (char *)0x0) {\n    local_b0 = mallocstrcpy((char *)0x0,present_path);\n  }\n  else {\n    pbVar4 = (byte *)mallocstrcpy((char *)0x0,pcVar3 + 1);\n    pcVar3[1] = '\0';\n    if (*local_bc == 0x7e) {\n      local_b0 = real_dir_from_tilde((char *)local_bc);\n    }\n    else {\n      local_b0 = mallocstrcpy((char *)0x0,(char *)local_bc);\n    }\n    if (*local_b0 != '/') {\n      sVar5 = strlen(present_path);\n      sVar6 = strlen((char *)local_bc);\n      local_b0 = (char *)nrealloc(local_b0,sVar5 + 1 + sVar6);\n      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",present_path,local_bc);\n    }\n    free(local_bc);\n    local_bc = pbVar4;\n  }\n  __dirp = opendir(local_b0);\n  if (__dirp != (DIR *)0x0) {\n    sVar5 = strlen((char *)local_bc);\n    local_ac = (char **)0x0;\nLAB_0001fb20:\n    do {\n      pdVar7 = readdir64(__dirp);\n      if (pdVar7 == (dirent64 *)0x0) goto LAB_0001fcb0;\n      pcVar3 = pdVar7->d_name;\n      iVar8 = strncmp(pcVar3,(char *)local_bc,sVar5);\n      if (iVar8 == 0) {\n        bVar14 = *local_bc < 0x2e;\n        bVar16 = *local_bc == 0x2e;\n        if (!bVar16) {\n          iVar8 = 2;\n          pcVar10 = pcVar3;\n          pbVar4 = &DAT_0005c437;\n          do {\n            if (iVar8 == 0) break;\n            iVar8 = iVar8 + -1;\n            bVar14 = (byte)*pcVar10 < *pbVar4;\n            bVar16 = *pcVar10 == *pbVar4;\n            pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1;\n            pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1;\n          } while (bVar16);\n          bVar15 = false;\n          bVar14 = (!bVar14 && !bVar16) == bVar14;\n          if (bVar14) goto LAB_0001fb20;\n          iVar8 = 3;\n          pcVar10 = pcVar3;\n          pbVar4 = (byte *)0x60801;\n          do {\n            if (iVar8 == 0) break;\n            iVar8 = iVar8 + -1;\n            bVar15 = (byte)*pcVar10 < *pbVar4;\n            bVar14 = *pcVar10 == *pbVar4;\n            pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1;\n            pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1;\n          } while (bVar14);\n          if ((!bVar15 && !bVar14) == bVar15) goto LAB_0001fb20;\n        }\n        sVar6 = strlen(local_b0);\n        sVar9 = strlen(pcVar3);\n        pcVar10 = (char *)nmalloc(sVar6 + 1 + sVar9);\n        __sprintf_chk(pcVar10,1,0xffffffff,"%s%s",local_b0,pcVar3);\n        if (operating_dir == (char *)0x0) {\nLAB_0001fc60:\n          if (!allow_files) {\n            if (*pcVar10 == '~') {\n              pcVar13 = real_dir_from_tilde(pcVar10);\n            }\n            else {\n              pcVar13 = mallocstrcpy((char *)0x0,pcVar10);\n            }\n            iVar8 = __xstat64(3,pcVar13,(stat64 *)&fileinfo);\n            if ((iVar8 == -1) || ((fileinfo.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar13);\n              goto LAB_0001fc27;\n            }\n            free(pcVar13);\n          }\n          free(pcVar10);\n          local_ac = (char **)nrealloc(local_ac,*num_matches * 4 + 4);\n          sVar2 = *num_matches;\n          pcVar3 = mallocstrcpy((char *)0x0,pcVar3);\n          local_ac[sVar2] = pcVar3;\n          *num_matches = *num_matches + 1;\n        }\n        else {\n          __haystack = get_full_path(pcVar10);\n          pcVar13 = operating_dir;\n          if (__haystack != (char *)0x0) {\n            pcVar11 = strstr(__haystack,operating_dir);\n            pcVar12 = strstr(pcVar13,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar11) || (pcVar13 == pcVar12)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar10);\n        }\n      }\n    } while( true );\n  }\n  beep();\n  free(local_bc);\n  free(local_b0);\n  local_ac = (char **)0x0;\nLAB_0001fcd3:\n  if (iVar1 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return local_ac;\n  }\n                    /* WARNING: Subroutine does not return */\n  __stack_chk_fail_local();\nLAB_0001fcb0:\n  closedir(__dirp);\n  free(local_b0);\n  free(local_bc);\n  goto LAB_0001fcd3;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "size_t sVar2;" primitive_type identifier ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "byte *pbVar4;" type_identifier (pointer_declarator "*pbVar4" * identifier) ;) (declaration "size_t sVar5;" primitive_type identifier ;) (declaration "size_t sVar6;" primitive_type identifier ;) (declaration "DIR *__dirp;" type_identifier (pointer_declarator "*__dirp" * identifier) ;) (declaration "dirent64 *pdVar7;" type_identifier (pointer_declarator "*pdVar7" * identifier) ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "size_t sVar9;" primitive_type identifier ;) (declaration "char *pcVar10;" primitive_type (pointer_declarator "*pcVar10" * identifier) ;) (declaration "char *__haystack;" primitive_type (pointer_declarator "*__haystack" * identifier) ;) (declaration "char *pcVar11;" primitive_type (pointer_declarator "*pcVar11" * identifier) ;) (declaration "char *pcVar12;" primitive_type (pointer_declarator "*pcVar12" * identifier) ;) (declaration "char *pcVar13;" primitive_type (pointer_declarator "*pcVar13" * identifier) ;) (declaration "int in_GS_OFFSET;" primitive_type identifier ;) (declaration "bool bVar14;" primitive_type identifier ;) (declaration "bool bVar15;" primitive_type identifier ;) (declaration "bool bVar16;" primitive_type identifier ;) (declaration "byte bVar17;" type_identifier identifier ;) (declaration "byte *local_bc;" type_identifier (pointer_declarator "*local_bc" * identifier) ;) (declaration "char *local_b0;" primitive_type (pointer_declarator "*local_b0" * identifier) ;) (declaration "char **local_ac;" primitive_type (pointer_declarator "**local_ac" * (pointer_declarator "*local_ac" * identifier)) ;) (declaration "stat fileinfo;" type_identifier identifier ;) (expression_statement "bVar17 = 0;" (assignment_expression "bVar17 = 0" identifier = number_literal) ;) (expression_statement "iVar1 = *(int *)(in_GS_OFFSET + 0x14);" (assignment_expression "iVar1 = *(int *)(in_GS_OFFSET + 0x14)" identifier = (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) ;) (expression_statement "local_bc = (byte *)mallocstrcpy((char *)0x0,buf);" (assignment_expression "local_bc = (byte *)mallocstrcpy((char *)0x0,buf)" identifier = (cast_expression "(byte *)mallocstrcpy((char *)0x0,buf)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "mallocstrcpy((char *)0x0,buf)" identifier (argument_list "((char *)0x0,buf)" ( (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) , identifier ))))) ;) (expression_statement "*num_matches = 0;" (assignment_expression "*num_matches = 0" (pointer_expression "*num_matches" * identifier) = number_literal) ;) (expression_statement "local_bc[buf_len] = 0;" (assignment_expression "local_bc[buf_len] = 0" (subscript_expression "local_bc[buf_len]" identifier [ identifier ]) = number_literal) ;) (expression_statement "pcVar3 = strrchr((char *)local_bc,0x2f);" (assignment_expression "pcVar3 = strrchr((char *)local_bc,0x2f)" identifier = (call_expression "strrchr((char *)local_bc,0x2f)" identifier (argument_list "((char *)local_bc,0x2f)" ( (cast_expression "(char *)local_bc" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , number_literal )))) ;) (if_statement "if (pcVar3 == (char *)0x0) {\n    local_b0 = mallocstrcpy((char *)0x0,present_path);\n  }\n  else {\n    pbVar4 = (byte *)mallocstrcpy((char *)0x0,pcVar3 + 1);\n    pcVar3[1] = '\0';\n    if (*local_bc == 0x7e) {\n      local_b0 = real_dir_from_tilde((char *)local_bc);\n    }\n    else {\n      local_b0 = mallocstrcpy((char *)0x0,(char *)local_bc);\n    }\n    if (*local_b0 != '/') {\n      sVar5 = strlen(present_path);\n      sVar6 = strlen((char *)local_bc);\n      local_b0 = (char *)nrealloc(local_b0,sVar5 + 1 + sVar6);\n      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",present_path,local_bc);\n    }\n    free(local_bc);\n    local_bc = pbVar4;\n  }" if (parenthesized_expression "(pcVar3 == (char *)0x0)" ( (binary_expression "pcVar3 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    local_b0 = mallocstrcpy((char *)0x0,present_path);\n  }" { (expression_statement "local_b0 = mallocstrcpy((char *)0x0,present_path);" (assignment_expression "local_b0 = mallocstrcpy((char *)0x0,present_path)" identifier = (call_expression "mallocstrcpy((char *)0x0,present_path)" identifier (argument_list "((char *)0x0,present_path)" ( (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) , identifier )))) ;) }) (else_clause "else {\n    pbVar4 = (byte *)mallocstrcpy((char *)0x0,pcVar3 + 1);\n    pcVar3[1] = '\0';\n    if (*local_bc == 0x7e) {\n      local_b0 = real_dir_from_tilde((char *)local_bc);\n    }\n    else {\n      local_b0 = mallocstrcpy((char *)0x0,(char *)local_bc);\n    }\n    if (*local_b0 != '/') {\n      sVar5 = strlen(present_path);\n      sVar6 = strlen((char *)local_bc);\n      local_b0 = (char *)nrealloc(local_b0,sVar5 + 1 + sVar6);\n      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",present_path,local_bc);\n    }\n    free(local_bc);\n    local_bc = pbVar4;\n  }" else (compound_statement "{\n    pbVar4 = (byte *)mallocstrcpy((char *)0x0,pcVar3 + 1);\n    pcVar3[1] = '\0';\n    if (*local_bc == 0x7e) {\n      local_b0 = real_dir_from_tilde((char *)local_bc);\n    }\n    else {\n      local_b0 = mallocstrcpy((char *)0x0,(char *)local_bc);\n    }\n    if (*local_b0 != '/') {\n      sVar5 = strlen(present_path);\n      sVar6 = strlen((char *)local_bc);\n      local_b0 = (char *)nrealloc(local_b0,sVar5 + 1 + sVar6);\n      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",present_path,local_bc);\n    }\n    free(local_bc);\n    local_bc = pbVar4;\n  }" { (expression_statement "pbVar4 = (byte *)mallocstrcpy((char *)0x0,pcVar3 + 1);" (assignment_expression "pbVar4 = (byte *)mallocstrcpy((char *)0x0,pcVar3 + 1)" identifier = (cast_expression "(byte *)mallocstrcpy((char *)0x0,pcVar3 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "mallocstrcpy((char *)0x0,pcVar3 + 1)" identifier (argument_list "((char *)0x0,pcVar3 + 1)" ( (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) , (binary_expression "pcVar3 + 1" identifier + number_literal) ))))) ;) (expression_statement "pcVar3[1] = '\0';" (assignment_expression "pcVar3[1] = '\0'" (subscript_expression "pcVar3[1]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (if_statement "if (*local_bc == 0x7e) {\n      local_b0 = real_dir_from_tilde((char *)local_bc);\n    }\n    else {\n      local_b0 = mallocstrcpy((char *)0x0,(char *)local_bc);\n    }" if (parenthesized_expression "(*local_bc == 0x7e)" ( (binary_expression "*local_bc == 0x7e" (pointer_expression "*local_bc" * identifier) == number_literal) )) (compound_statement "{\n      local_b0 = real_dir_from_tilde((char *)local_bc);\n    }" { (expression_statement "local_b0 = real_dir_from_tilde((char *)local_bc);" (assignment_expression "local_b0 = real_dir_from_tilde((char *)local_bc)" identifier = (call_expression "real_dir_from_tilde((char *)local_bc)" identifier (argument_list "((char *)local_bc)" ( (cast_expression "(char *)local_bc" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) }) (else_clause "else {\n      local_b0 = mallocstrcpy((char *)0x0,(char *)local_bc);\n    }" else (compound_statement "{\n      local_b0 = mallocstrcpy((char *)0x0,(char *)local_bc);\n    }" { (expression_statement "local_b0 = mallocstrcpy((char *)0x0,(char *)local_bc);" (assignment_expression "local_b0 = mallocstrcpy((char *)0x0,(char *)local_bc)" identifier = (call_expression "mallocstrcpy((char *)0x0,(char *)local_bc)" identifier (argument_list "((char *)0x0,(char *)local_bc)" ( (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) , (cast_expression "(char *)local_bc" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) }))) (if_statement "if (*local_b0 != '/') {\n      sVar5 = strlen(present_path);\n      sVar6 = strlen((char *)local_bc);\n      local_b0 = (char *)nrealloc(local_b0,sVar5 + 1 + sVar6);\n      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",present_path,local_bc);\n    }" if (parenthesized_expression "(*local_b0 != '/')" ( (binary_expression "*local_b0 != '/'" (pointer_expression "*local_b0" * identifier) != (char_literal "'/'" ' character ')) )) (compound_statement "{\n      sVar5 = strlen(present_path);\n      sVar6 = strlen((char *)local_bc);\n      local_b0 = (char *)nrealloc(local_b0,sVar5 + 1 + sVar6);\n      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",present_path,local_bc);\n    }" { (expression_statement "sVar5 = strlen(present_path);" (assignment_expression "sVar5 = strlen(present_path)" identifier = (call_expression "strlen(present_path)" identifier (argument_list "(present_path)" ( identifier )))) ;) (expression_statement "sVar6 = strlen((char *)local_bc);" (assignment_expression "sVar6 = strlen((char *)local_bc)" identifier = (call_expression "strlen((char *)local_bc)" identifier (argument_list "((char *)local_bc)" ( (cast_expression "(char *)local_bc" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) (expression_statement "local_b0 = (char *)nrealloc(local_b0,sVar5 + 1 + sVar6);" (assignment_expression "local_b0 = (char *)nrealloc(local_b0,sVar5 + 1 + sVar6)" identifier = (cast_expression "(char *)nrealloc(local_b0,sVar5 + 1 + sVar6)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "nrealloc(local_b0,sVar5 + 1 + sVar6)" identifier (argument_list "(local_b0,sVar5 + 1 + sVar6)" ( identifier , (binary_expression "sVar5 + 1 + sVar6" (binary_expression "sVar5 + 1" identifier + number_literal) + identifier) ))))) ;) (expression_statement "__sprintf_chk(local_b0,1,0xffffffff,"%s%s",present_path,local_bc);" (call_expression "__sprintf_chk(local_b0,1,0xffffffff,"%s%s",present_path,local_bc)" identifier (argument_list "(local_b0,1,0xffffffff,"%s%s",present_path,local_bc)" ( identifier , number_literal , number_literal , (string_literal ""%s%s"" " string_content ") , identifier , identifier ))) ;) })) (expression_statement "free(local_bc);" (call_expression "free(local_bc)" identifier (argument_list "(local_bc)" ( identifier ))) ;) (expression_statement "local_bc = pbVar4;" (assignment_expression "local_bc = pbVar4" identifier = identifier) ;) }))) (expression_statement "__dirp = opendir(local_b0);" (assignment_expression "__dirp = opendir(local_b0)" identifier = (call_expression "opendir(local_b0)" identifier (argument_list "(local_b0)" ( identifier )))) ;) (if_statement "if (__dirp != (DIR *)0x0) {\n    sVar5 = strlen((char *)local_bc);\n    local_ac = (char **)0x0;\nLAB_0001fb20:\n    do {\n      pdVar7 = readdir64(__dirp);\n      if (pdVar7 == (dirent64 *)0x0) goto LAB_0001fcb0;\n      pcVar3 = pdVar7->d_name;\n      iVar8 = strncmp(pcVar3,(char *)local_bc,sVar5);\n      if (iVar8 == 0) {\n        bVar14 = *local_bc < 0x2e;\n        bVar16 = *local_bc == 0x2e;\n        if (!bVar16) {\n          iVar8 = 2;\n          pcVar10 = pcVar3;\n          pbVar4 = &DAT_0005c437;\n          do {\n            if (iVar8 == 0) break;\n            iVar8 = iVar8 + -1;\n            bVar14 = (byte)*pcVar10 < *pbVar4;\n            bVar16 = *pcVar10 == *pbVar4;\n            pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1;\n            pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1;\n          } while (bVar16);\n          bVar15 = false;\n          bVar14 = (!bVar14 && !bVar16) == bVar14;\n          if (bVar14) goto LAB_0001fb20;\n          iVar8 = 3;\n          pcVar10 = pcVar3;\n          pbVar4 = (byte *)0x60801;\n          do {\n            if (iVar8 == 0) break;\n            iVar8 = iVar8 + -1;\n            bVar15 = (byte)*pcVar10 < *pbVar4;\n            bVar14 = *pcVar10 == *pbVar4;\n            pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1;\n            pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1;\n          } while (bVar14);\n          if ((!bVar15 && !bVar14) == bVar15) goto LAB_0001fb20;\n        }\n        sVar6 = strlen(local_b0);\n        sVar9 = strlen(pcVar3);\n        pcVar10 = (char *)nmalloc(sVar6 + 1 + sVar9);\n        __sprintf_chk(pcVar10,1,0xffffffff,"%s%s",local_b0,pcVar3);\n        if (operating_dir == (char *)0x0) {\nLAB_0001fc60:\n          if (!allow_files) {\n            if (*pcVar10 == '~') {\n              pcVar13 = real_dir_from_tilde(pcVar10);\n            }\n            else {\n              pcVar13 = mallocstrcpy((char *)0x0,pcVar10);\n            }\n            iVar8 = __xstat64(3,pcVar13,(stat64 *)&fileinfo);\n            if ((iVar8 == -1) || ((fileinfo.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar13);\n              goto LAB_0001fc27;\n            }\n            free(pcVar13);\n          }\n          free(pcVar10);\n          local_ac = (char **)nrealloc(local_ac,*num_matches * 4 + 4);\n          sVar2 = *num_matches;\n          pcVar3 = mallocstrcpy((char *)0x0,pcVar3);\n          local_ac[sVar2] = pcVar3;\n          *num_matches = *num_matches + 1;\n        }\n        else {\n          __haystack = get_full_path(pcVar10);\n          pcVar13 = operating_dir;\n          if (__haystack != (char *)0x0) {\n            pcVar11 = strstr(__haystack,operating_dir);\n            pcVar12 = strstr(pcVar13,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar11) || (pcVar13 == pcVar12)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar10);\n        }\n      }\n    } while( true );\n  }" if (parenthesized_expression "(__dirp != (DIR *)0x0)" ( (binary_expression "__dirp != (DIR *)0x0" identifier != (cast_expression "(DIR *)0x0" ( (type_descriptor "DIR *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    sVar5 = strlen((char *)local_bc);\n    local_ac = (char **)0x0;\nLAB_0001fb20:\n    do {\n      pdVar7 = readdir64(__dirp);\n      if (pdVar7 == (dirent64 *)0x0) goto LAB_0001fcb0;\n      pcVar3 = pdVar7->d_name;\n      iVar8 = strncmp(pcVar3,(char *)local_bc,sVar5);\n      if (iVar8 == 0) {\n        bVar14 = *local_bc < 0x2e;\n        bVar16 = *local_bc == 0x2e;\n        if (!bVar16) {\n          iVar8 = 2;\n          pcVar10 = pcVar3;\n          pbVar4 = &DAT_0005c437;\n          do {\n            if (iVar8 == 0) break;\n            iVar8 = iVar8 + -1;\n            bVar14 = (byte)*pcVar10 < *pbVar4;\n            bVar16 = *pcVar10 == *pbVar4;\n            pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1;\n            pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1;\n          } while (bVar16);\n          bVar15 = false;\n          bVar14 = (!bVar14 && !bVar16) == bVar14;\n          if (bVar14) goto LAB_0001fb20;\n          iVar8 = 3;\n          pcVar10 = pcVar3;\n          pbVar4 = (byte *)0x60801;\n          do {\n            if (iVar8 == 0) break;\n            iVar8 = iVar8 + -1;\n            bVar15 = (byte)*pcVar10 < *pbVar4;\n            bVar14 = *pcVar10 == *pbVar4;\n            pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1;\n            pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1;\n          } while (bVar14);\n          if ((!bVar15 && !bVar14) == bVar15) goto LAB_0001fb20;\n        }\n        sVar6 = strlen(local_b0);\n        sVar9 = strlen(pcVar3);\n        pcVar10 = (char *)nmalloc(sVar6 + 1 + sVar9);\n        __sprintf_chk(pcVar10,1,0xffffffff,"%s%s",local_b0,pcVar3);\n        if (operating_dir == (char *)0x0) {\nLAB_0001fc60:\n          if (!allow_files) {\n            if (*pcVar10 == '~') {\n              pcVar13 = real_dir_from_tilde(pcVar10);\n            }\n            else {\n              pcVar13 = mallocstrcpy((char *)0x0,pcVar10);\n            }\n            iVar8 = __xstat64(3,pcVar13,(stat64 *)&fileinfo);\n            if ((iVar8 == -1) || ((fileinfo.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar13);\n              goto LAB_0001fc27;\n            }\n            free(pcVar13);\n          }\n          free(pcVar10);\n          local_ac = (char **)nrealloc(local_ac,*num_matches * 4 + 4);\n          sVar2 = *num_matches;\n          pcVar3 = mallocstrcpy((char *)0x0,pcVar3);\n          local_ac[sVar2] = pcVar3;\n          *num_matches = *num_matches + 1;\n        }\n        else {\n          __haystack = get_full_path(pcVar10);\n          pcVar13 = operating_dir;\n          if (__haystack != (char *)0x0) {\n            pcVar11 = strstr(__haystack,operating_dir);\n            pcVar12 = strstr(pcVar13,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar11) || (pcVar13 == pcVar12)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar10);\n        }\n      }\n    } while( true );\n  }" { (expression_statement "sVar5 = strlen((char *)local_bc);" (assignment_expression "sVar5 = strlen((char *)local_bc)" identifier = (call_expression "strlen((char *)local_bc)" identifier (argument_list "((char *)local_bc)" ( (cast_expression "(char *)local_bc" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) (expression_statement "local_ac = (char **)0x0;" (assignment_expression "local_ac = (char **)0x0" identifier = (cast_expression "(char **)0x0" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) ;) (labeled_statement "LAB_0001fb20:\n    do {\n      pdVar7 = readdir64(__dirp);\n      if (pdVar7 == (dirent64 *)0x0) goto LAB_0001fcb0;\n      pcVar3 = pdVar7->d_name;\n      iVar8 = strncmp(pcVar3,(char *)local_bc,sVar5);\n      if (iVar8 == 0) {\n        bVar14 = *local_bc < 0x2e;\n        bVar16 = *local_bc == 0x2e;\n        if (!bVar16) {\n          iVar8 = 2;\n          pcVar10 = pcVar3;\n          pbVar4 = &DAT_0005c437;\n          do {\n            if (iVar8 == 0) break;\n            iVar8 = iVar8 + -1;\n            bVar14 = (byte)*pcVar10 < *pbVar4;\n            bVar16 = *pcVar10 == *pbVar4;\n            pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1;\n            pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1;\n          } while (bVar16);\n          bVar15 = false;\n          bVar14 = (!bVar14 && !bVar16) == bVar14;\n          if (bVar14) goto LAB_0001fb20;\n          iVar8 = 3;\n          pcVar10 = pcVar3;\n          pbVar4 = (byte *)0x60801;\n          do {\n            if (iVar8 == 0) break;\n            iVar8 = iVar8 + -1;\n            bVar15 = (byte)*pcVar10 < *pbVar4;\n            bVar14 = *pcVar10 == *pbVar4;\n            pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1;\n            pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1;\n          } while (bVar14);\n          if ((!bVar15 && !bVar14) == bVar15) goto LAB_0001fb20;\n        }\n        sVar6 = strlen(local_b0);\n        sVar9 = strlen(pcVar3);\n        pcVar10 = (char *)nmalloc(sVar6 + 1 + sVar9);\n        __sprintf_chk(pcVar10,1,0xffffffff,"%s%s",local_b0,pcVar3);\n        if (operating_dir == (char *)0x0) {\nLAB_0001fc60:\n          if (!allow_files) {\n            if (*pcVar10 == '~') {\n              pcVar13 = real_dir_from_tilde(pcVar10);\n            }\n            else {\n              pcVar13 = mallocstrcpy((char *)0x0,pcVar10);\n            }\n            iVar8 = __xstat64(3,pcVar13,(stat64 *)&fileinfo);\n            if ((iVar8 == -1) || ((fileinfo.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar13);\n              goto LAB_0001fc27;\n            }\n            free(pcVar13);\n          }\n          free(pcVar10);\n          local_ac = (char **)nrealloc(local_ac,*num_matches * 4 + 4);\n          sVar2 = *num_matches;\n          pcVar3 = mallocstrcpy((char *)0x0,pcVar3);\n          local_ac[sVar2] = pcVar3;\n          *num_matches = *num_matches + 1;\n        }\n        else {\n          __haystack = get_full_path(pcVar10);\n          pcVar13 = operating_dir;\n          if (__haystack != (char *)0x0) {\n            pcVar11 = strstr(__haystack,operating_dir);\n            pcVar12 = strstr(pcVar13,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar11) || (pcVar13 == pcVar12)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar10);\n        }\n      }\n    } while( true );" statement_identifier : (do_statement "do {\n      pdVar7 = readdir64(__dirp);\n      if (pdVar7 == (dirent64 *)0x0) goto LAB_0001fcb0;\n      pcVar3 = pdVar7->d_name;\n      iVar8 = strncmp(pcVar3,(char *)local_bc,sVar5);\n      if (iVar8 == 0) {\n        bVar14 = *local_bc < 0x2e;\n        bVar16 = *local_bc == 0x2e;\n        if (!bVar16) {\n          iVar8 = 2;\n          pcVar10 = pcVar3;\n          pbVar4 = &DAT_0005c437;\n          do {\n            if (iVar8 == 0) break;\n            iVar8 = iVar8 + -1;\n            bVar14 = (byte)*pcVar10 < *pbVar4;\n            bVar16 = *pcVar10 == *pbVar4;\n            pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1;\n            pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1;\n          } while (bVar16);\n          bVar15 = false;\n          bVar14 = (!bVar14 && !bVar16) == bVar14;\n          if (bVar14) goto LAB_0001fb20;\n          iVar8 = 3;\n          pcVar10 = pcVar3;\n          pbVar4 = (byte *)0x60801;\n          do {\n            if (iVar8 == 0) break;\n            iVar8 = iVar8 + -1;\n            bVar15 = (byte)*pcVar10 < *pbVar4;\n            bVar14 = *pcVar10 == *pbVar4;\n            pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1;\n            pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1;\n          } while (bVar14);\n          if ((!bVar15 && !bVar14) == bVar15) goto LAB_0001fb20;\n        }\n        sVar6 = strlen(local_b0);\n        sVar9 = strlen(pcVar3);\n        pcVar10 = (char *)nmalloc(sVar6 + 1 + sVar9);\n        __sprintf_chk(pcVar10,1,0xffffffff,"%s%s",local_b0,pcVar3);\n        if (operating_dir == (char *)0x0) {\nLAB_0001fc60:\n          if (!allow_files) {\n            if (*pcVar10 == '~') {\n              pcVar13 = real_dir_from_tilde(pcVar10);\n            }\n            else {\n              pcVar13 = mallocstrcpy((char *)0x0,pcVar10);\n            }\n            iVar8 = __xstat64(3,pcVar13,(stat64 *)&fileinfo);\n            if ((iVar8 == -1) || ((fileinfo.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar13);\n              goto LAB_0001fc27;\n            }\n            free(pcVar13);\n          }\n          free(pcVar10);\n          local_ac = (char **)nrealloc(local_ac,*num_matches * 4 + 4);\n          sVar2 = *num_matches;\n          pcVar3 = mallocstrcpy((char *)0x0,pcVar3);\n          local_ac[sVar2] = pcVar3;\n          *num_matches = *num_matches + 1;\n        }\n        else {\n          __haystack = get_full_path(pcVar10);\n          pcVar13 = operating_dir;\n          if (__haystack != (char *)0x0) {\n            pcVar11 = strstr(__haystack,operating_dir);\n            pcVar12 = strstr(pcVar13,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar11) || (pcVar13 == pcVar12)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar10);\n        }\n      }\n    } while( true );" do (compound_statement "{\n      pdVar7 = readdir64(__dirp);\n      if (pdVar7 == (dirent64 *)0x0) goto LAB_0001fcb0;\n      pcVar3 = pdVar7->d_name;\n      iVar8 = strncmp(pcVar3,(char *)local_bc,sVar5);\n      if (iVar8 == 0) {\n        bVar14 = *local_bc < 0x2e;\n        bVar16 = *local_bc == 0x2e;\n        if (!bVar16) {\n          iVar8 = 2;\n          pcVar10 = pcVar3;\n          pbVar4 = &DAT_0005c437;\n          do {\n            if (iVar8 == 0) break;\n            iVar8 = iVar8 + -1;\n            bVar14 = (byte)*pcVar10 < *pbVar4;\n            bVar16 = *pcVar10 == *pbVar4;\n            pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1;\n            pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1;\n          } while (bVar16);\n          bVar15 = false;\n          bVar14 = (!bVar14 && !bVar16) == bVar14;\n          if (bVar14) goto LAB_0001fb20;\n          iVar8 = 3;\n          pcVar10 = pcVar3;\n          pbVar4 = (byte *)0x60801;\n          do {\n            if (iVar8 == 0) break;\n            iVar8 = iVar8 + -1;\n            bVar15 = (byte)*pcVar10 < *pbVar4;\n            bVar14 = *pcVar10 == *pbVar4;\n            pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1;\n            pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1;\n          } while (bVar14);\n          if ((!bVar15 && !bVar14) == bVar15) goto LAB_0001fb20;\n        }\n        sVar6 = strlen(local_b0);\n        sVar9 = strlen(pcVar3);\n        pcVar10 = (char *)nmalloc(sVar6 + 1 + sVar9);\n        __sprintf_chk(pcVar10,1,0xffffffff,"%s%s",local_b0,pcVar3);\n        if (operating_dir == (char *)0x0) {\nLAB_0001fc60:\n          if (!allow_files) {\n            if (*pcVar10 == '~') {\n              pcVar13 = real_dir_from_tilde(pcVar10);\n            }\n            else {\n              pcVar13 = mallocstrcpy((char *)0x0,pcVar10);\n            }\n            iVar8 = __xstat64(3,pcVar13,(stat64 *)&fileinfo);\n            if ((iVar8 == -1) || ((fileinfo.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar13);\n              goto LAB_0001fc27;\n            }\n            free(pcVar13);\n          }\n          free(pcVar10);\n          local_ac = (char **)nrealloc(local_ac,*num_matches * 4 + 4);\n          sVar2 = *num_matches;\n          pcVar3 = mallocstrcpy((char *)0x0,pcVar3);\n          local_ac[sVar2] = pcVar3;\n          *num_matches = *num_matches + 1;\n        }\n        else {\n          __haystack = get_full_path(pcVar10);\n          pcVar13 = operating_dir;\n          if (__haystack != (char *)0x0) {\n            pcVar11 = strstr(__haystack,operating_dir);\n            pcVar12 = strstr(pcVar13,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar11) || (pcVar13 == pcVar12)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar10);\n        }\n      }\n    }" { (expression_statement "pdVar7 = readdir64(__dirp);" (assignment_expression "pdVar7 = readdir64(__dirp)" identifier = (call_expression "readdir64(__dirp)" identifier (argument_list "(__dirp)" ( identifier )))) ;) (if_statement "if (pdVar7 == (dirent64 *)0x0) goto LAB_0001fcb0;" if (parenthesized_expression "(pdVar7 == (dirent64 *)0x0)" ( (binary_expression "pdVar7 == (dirent64 *)0x0" identifier == (cast_expression "(dirent64 *)0x0" ( (type_descriptor "dirent64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0001fcb0;" goto statement_identifier ;)) (expression_statement "pcVar3 = pdVar7->d_name;" (assignment_expression "pcVar3 = pdVar7->d_name" identifier = (field_expression "pdVar7->d_name" identifier -> field_identifier)) ;) (expression_statement "iVar8 = strncmp(pcVar3,(char *)local_bc,sVar5);" (assignment_expression "iVar8 = strncmp(pcVar3,(char *)local_bc,sVar5)" identifier = (call_expression "strncmp(pcVar3,(char *)local_bc,sVar5)" identifier (argument_list "(pcVar3,(char *)local_bc,sVar5)" ( identifier , (cast_expression "(char *)local_bc" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , identifier )))) ;) (if_statement "if (iVar8 == 0) {\n        bVar14 = *local_bc < 0x2e;\n        bVar16 = *local_bc == 0x2e;\n        if (!bVar16) {\n          iVar8 = 2;\n          pcVar10 = pcVar3;\n          pbVar4 = &DAT_0005c437;\n          do {\n            if (iVar8 == 0) break;\n            iVar8 = iVar8 + -1;\n            bVar14 = (byte)*pcVar10 < *pbVar4;\n            bVar16 = *pcVar10 == *pbVar4;\n            pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1;\n            pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1;\n          } while (bVar16);\n          bVar15 = false;\n          bVar14 = (!bVar14 && !bVar16) == bVar14;\n          if (bVar14) goto LAB_0001fb20;\n          iVar8 = 3;\n          pcVar10 = pcVar3;\n          pbVar4 = (byte *)0x60801;\n          do {\n            if (iVar8 == 0) break;\n            iVar8 = iVar8 + -1;\n            bVar15 = (byte)*pcVar10 < *pbVar4;\n            bVar14 = *pcVar10 == *pbVar4;\n            pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1;\n            pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1;\n          } while (bVar14);\n          if ((!bVar15 && !bVar14) == bVar15) goto LAB_0001fb20;\n        }\n        sVar6 = strlen(local_b0);\n        sVar9 = strlen(pcVar3);\n        pcVar10 = (char *)nmalloc(sVar6 + 1 + sVar9);\n        __sprintf_chk(pcVar10,1,0xffffffff,"%s%s",local_b0,pcVar3);\n        if (operating_dir == (char *)0x0) {\nLAB_0001fc60:\n          if (!allow_files) {\n            if (*pcVar10 == '~') {\n              pcVar13 = real_dir_from_tilde(pcVar10);\n            }\n            else {\n              pcVar13 = mallocstrcpy((char *)0x0,pcVar10);\n            }\n            iVar8 = __xstat64(3,pcVar13,(stat64 *)&fileinfo);\n            if ((iVar8 == -1) || ((fileinfo.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar13);\n              goto LAB_0001fc27;\n            }\n            free(pcVar13);\n          }\n          free(pcVar10);\n          local_ac = (char **)nrealloc(local_ac,*num_matches * 4 + 4);\n          sVar2 = *num_matches;\n          pcVar3 = mallocstrcpy((char *)0x0,pcVar3);\n          local_ac[sVar2] = pcVar3;\n          *num_matches = *num_matches + 1;\n        }\n        else {\n          __haystack = get_full_path(pcVar10);\n          pcVar13 = operating_dir;\n          if (__haystack != (char *)0x0) {\n            pcVar11 = strstr(__haystack,operating_dir);\n            pcVar12 = strstr(pcVar13,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar11) || (pcVar13 == pcVar12)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar10);\n        }\n      }" if (parenthesized_expression "(iVar8 == 0)" ( (binary_expression "iVar8 == 0" identifier == number_literal) )) (compound_statement "{\n        bVar14 = *local_bc < 0x2e;\n        bVar16 = *local_bc == 0x2e;\n        if (!bVar16) {\n          iVar8 = 2;\n          pcVar10 = pcVar3;\n          pbVar4 = &DAT_0005c437;\n          do {\n            if (iVar8 == 0) break;\n            iVar8 = iVar8 + -1;\n            bVar14 = (byte)*pcVar10 < *pbVar4;\n            bVar16 = *pcVar10 == *pbVar4;\n            pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1;\n            pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1;\n          } while (bVar16);\n          bVar15 = false;\n          bVar14 = (!bVar14 && !bVar16) == bVar14;\n          if (bVar14) goto LAB_0001fb20;\n          iVar8 = 3;\n          pcVar10 = pcVar3;\n          pbVar4 = (byte *)0x60801;\n          do {\n            if (iVar8 == 0) break;\n            iVar8 = iVar8 + -1;\n            bVar15 = (byte)*pcVar10 < *pbVar4;\n            bVar14 = *pcVar10 == *pbVar4;\n            pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1;\n            pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1;\n          } while (bVar14);\n          if ((!bVar15 && !bVar14) == bVar15) goto LAB_0001fb20;\n        }\n        sVar6 = strlen(local_b0);\n        sVar9 = strlen(pcVar3);\n        pcVar10 = (char *)nmalloc(sVar6 + 1 + sVar9);\n        __sprintf_chk(pcVar10,1,0xffffffff,"%s%s",local_b0,pcVar3);\n        if (operating_dir == (char *)0x0) {\nLAB_0001fc60:\n          if (!allow_files) {\n            if (*pcVar10 == '~') {\n              pcVar13 = real_dir_from_tilde(pcVar10);\n            }\n            else {\n              pcVar13 = mallocstrcpy((char *)0x0,pcVar10);\n            }\n            iVar8 = __xstat64(3,pcVar13,(stat64 *)&fileinfo);\n            if ((iVar8 == -1) || ((fileinfo.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar13);\n              goto LAB_0001fc27;\n            }\n            free(pcVar13);\n          }\n          free(pcVar10);\n          local_ac = (char **)nrealloc(local_ac,*num_matches * 4 + 4);\n          sVar2 = *num_matches;\n          pcVar3 = mallocstrcpy((char *)0x0,pcVar3);\n          local_ac[sVar2] = pcVar3;\n          *num_matches = *num_matches + 1;\n        }\n        else {\n          __haystack = get_full_path(pcVar10);\n          pcVar13 = operating_dir;\n          if (__haystack != (char *)0x0) {\n            pcVar11 = strstr(__haystack,operating_dir);\n            pcVar12 = strstr(pcVar13,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar11) || (pcVar13 == pcVar12)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar10);\n        }\n      }" { (expression_statement "bVar14 = *local_bc < 0x2e;" (assignment_expression "bVar14 = *local_bc < 0x2e" identifier = (binary_expression "*local_bc < 0x2e" (pointer_expression "*local_bc" * identifier) < number_literal)) ;) (expression_statement "bVar16 = *local_bc == 0x2e;" (assignment_expression "bVar16 = *local_bc == 0x2e" identifier = (binary_expression "*local_bc == 0x2e" (pointer_expression "*local_bc" * identifier) == number_literal)) ;) (if_statement "if (!bVar16) {\n          iVar8 = 2;\n          pcVar10 = pcVar3;\n          pbVar4 = &DAT_0005c437;\n          do {\n            if (iVar8 == 0) break;\n            iVar8 = iVar8 + -1;\n            bVar14 = (byte)*pcVar10 < *pbVar4;\n            bVar16 = *pcVar10 == *pbVar4;\n            pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1;\n            pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1;\n          } while (bVar16);\n          bVar15 = false;\n          bVar14 = (!bVar14 && !bVar16) == bVar14;\n          if (bVar14) goto LAB_0001fb20;\n          iVar8 = 3;\n          pcVar10 = pcVar3;\n          pbVar4 = (byte *)0x60801;\n          do {\n            if (iVar8 == 0) break;\n            iVar8 = iVar8 + -1;\n            bVar15 = (byte)*pcVar10 < *pbVar4;\n            bVar14 = *pcVar10 == *pbVar4;\n            pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1;\n            pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1;\n          } while (bVar14);\n          if ((!bVar15 && !bVar14) == bVar15) goto LAB_0001fb20;\n        }" if (parenthesized_expression "(!bVar16)" ( (unary_expression "!bVar16" ! identifier) )) (compound_statement "{\n          iVar8 = 2;\n          pcVar10 = pcVar3;\n          pbVar4 = &DAT_0005c437;\n          do {\n            if (iVar8 == 0) break;\n            iVar8 = iVar8 + -1;\n            bVar14 = (byte)*pcVar10 < *pbVar4;\n            bVar16 = *pcVar10 == *pbVar4;\n            pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1;\n            pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1;\n          } while (bVar16);\n          bVar15 = false;\n          bVar14 = (!bVar14 && !bVar16) == bVar14;\n          if (bVar14) goto LAB_0001fb20;\n          iVar8 = 3;\n          pcVar10 = pcVar3;\n          pbVar4 = (byte *)0x60801;\n          do {\n            if (iVar8 == 0) break;\n            iVar8 = iVar8 + -1;\n            bVar15 = (byte)*pcVar10 < *pbVar4;\n            bVar14 = *pcVar10 == *pbVar4;\n            pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1;\n            pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1;\n          } while (bVar14);\n          if ((!bVar15 && !bVar14) == bVar15) goto LAB_0001fb20;\n        }" { (expression_statement "iVar8 = 2;" (assignment_expression "iVar8 = 2" identifier = number_literal) ;) (expression_statement "pcVar10 = pcVar3;" (assignment_expression "pcVar10 = pcVar3" identifier = identifier) ;) (expression_statement "pbVar4 = &DAT_0005c437;" (assignment_expression "pbVar4 = &DAT_0005c437" identifier = (pointer_expression "&DAT_0005c437" & identifier)) ;) (do_statement "do {\n            if (iVar8 == 0) break;\n            iVar8 = iVar8 + -1;\n            bVar14 = (byte)*pcVar10 < *pbVar4;\n            bVar16 = *pcVar10 == *pbVar4;\n            pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1;\n            pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1;\n          } while (bVar16);" do (compound_statement "{\n            if (iVar8 == 0) break;\n            iVar8 = iVar8 + -1;\n            bVar14 = (byte)*pcVar10 < *pbVar4;\n            bVar16 = *pcVar10 == *pbVar4;\n            pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1;\n            pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1;\n          }" { (if_statement "if (iVar8 == 0) break;" if (parenthesized_expression "(iVar8 == 0)" ( (binary_expression "iVar8 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar8 = iVar8 + -1;" (assignment_expression "iVar8 = iVar8 + -1" identifier = (binary_expression "iVar8 + -1" identifier + number_literal)) ;) (expression_statement "bVar14 = (byte)*pcVar10 < *pbVar4;" (assignment_expression "bVar14 = (byte)*pcVar10 < *pbVar4" identifier = (binary_expression "(byte)*pcVar10 < *pbVar4" (binary_expression "(byte)*pcVar10" (parenthesized_expression "(byte)" ( identifier )) * identifier) < (pointer_expression "*pbVar4" * identifier))) ;) (expression_statement "bVar16 = *pcVar10 == *pbVar4;" (assignment_expression "bVar16 = *pcVar10 == *pbVar4" identifier = (binary_expression "*pcVar10 == *pbVar4" (pointer_expression "*pcVar10" * identifier) == (pointer_expression "*pbVar4" * identifier))) ;) (expression_statement "pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1;" (assignment_expression "pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1" identifier = (binary_expression "pcVar10 + (uint)bVar17 * -2 + 1" (binary_expression "pcVar10 + (uint)bVar17 * -2" identifier + (binary_expression "(uint)bVar17 * -2" (cast_expression "(uint)bVar17" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1;" (assignment_expression "pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1" identifier = (binary_expression "pbVar4 + (uint)bVar17 * -2 + 1" (binary_expression "pbVar4 + (uint)bVar17 * -2" identifier + (binary_expression "(uint)bVar17 * -2" (cast_expression "(uint)bVar17" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar16)" ( identifier )) ;) (expression_statement "bVar15 = false;" (assignment_expression "bVar15 = false" identifier = false) ;) (expression_statement "bVar14 = (!bVar14 && !bVar16) == bVar14;" (assignment_expression "bVar14 = (!bVar14 && !bVar16) == bVar14" identifier = (binary_expression "(!bVar14 && !bVar16) == bVar14" (parenthesized_expression "(!bVar14 && !bVar16)" ( (binary_expression "!bVar14 && !bVar16" (unary_expression "!bVar14" ! identifier) && (unary_expression "!bVar16" ! identifier)) )) == identifier)) ;) (if_statement "if (bVar14) goto LAB_0001fb20;" if (parenthesized_expression "(bVar14)" ( identifier )) (goto_statement "goto LAB_0001fb20;" goto statement_identifier ;)) (expression_statement "iVar8 = 3;" (assignment_expression "iVar8 = 3" identifier = number_literal) ;) (expression_statement "pcVar10 = pcVar3;" (assignment_expression "pcVar10 = pcVar3" identifier = identifier) ;) (expression_statement "pbVar4 = (byte *)0x60801;" (assignment_expression "pbVar4 = (byte *)0x60801" identifier = (cast_expression "(byte *)0x60801" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (do_statement "do {\n            if (iVar8 == 0) break;\n            iVar8 = iVar8 + -1;\n            bVar15 = (byte)*pcVar10 < *pbVar4;\n            bVar14 = *pcVar10 == *pbVar4;\n            pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1;\n            pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1;\n          } while (bVar14);" do (compound_statement "{\n            if (iVar8 == 0) break;\n            iVar8 = iVar8 + -1;\n            bVar15 = (byte)*pcVar10 < *pbVar4;\n            bVar14 = *pcVar10 == *pbVar4;\n            pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1;\n            pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1;\n          }" { (if_statement "if (iVar8 == 0) break;" if (parenthesized_expression "(iVar8 == 0)" ( (binary_expression "iVar8 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar8 = iVar8 + -1;" (assignment_expression "iVar8 = iVar8 + -1" identifier = (binary_expression "iVar8 + -1" identifier + number_literal)) ;) (expression_statement "bVar15 = (byte)*pcVar10 < *pbVar4;" (assignment_expression "bVar15 = (byte)*pcVar10 < *pbVar4" identifier = (binary_expression "(byte)*pcVar10 < *pbVar4" (binary_expression "(byte)*pcVar10" (parenthesized_expression "(byte)" ( identifier )) * identifier) < (pointer_expression "*pbVar4" * identifier))) ;) (expression_statement "bVar14 = *pcVar10 == *pbVar4;" (assignment_expression "bVar14 = *pcVar10 == *pbVar4" identifier = (binary_expression "*pcVar10 == *pbVar4" (pointer_expression "*pcVar10" * identifier) == (pointer_expression "*pbVar4" * identifier))) ;) (expression_statement "pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1;" (assignment_expression "pcVar10 = pcVar10 + (uint)bVar17 * -2 + 1" identifier = (binary_expression "pcVar10 + (uint)bVar17 * -2 + 1" (binary_expression "pcVar10 + (uint)bVar17 * -2" identifier + (binary_expression "(uint)bVar17 * -2" (cast_expression "(uint)bVar17" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1;" (assignment_expression "pbVar4 = pbVar4 + (uint)bVar17 * -2 + 1" identifier = (binary_expression "pbVar4 + (uint)bVar17 * -2 + 1" (binary_expression "pbVar4 + (uint)bVar17 * -2" identifier + (binary_expression "(uint)bVar17 * -2" (cast_expression "(uint)bVar17" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar14)" ( identifier )) ;) (if_statement "if ((!bVar15 && !bVar14) == bVar15) goto LAB_0001fb20;" if (parenthesized_expression "((!bVar15 && !bVar14) == bVar15)" ( (binary_expression "(!bVar15 && !bVar14) == bVar15" (parenthesized_expression "(!bVar15 && !bVar14)" ( (binary_expression "!bVar15 && !bVar14" (unary_expression "!bVar15" ! identifier) && (unary_expression "!bVar14" ! identifier)) )) == identifier) )) (goto_statement "goto LAB_0001fb20;" goto statement_identifier ;)) })) (expression_statement "sVar6 = strlen(local_b0);" (assignment_expression "sVar6 = strlen(local_b0)" identifier = (call_expression "strlen(local_b0)" identifier (argument_list "(local_b0)" ( identifier )))) ;) (expression_statement "sVar9 = strlen(pcVar3);" (assignment_expression "sVar9 = strlen(pcVar3)" identifier = (call_expression "strlen(pcVar3)" identifier (argument_list "(pcVar3)" ( identifier )))) ;) (expression_statement "pcVar10 = (char *)nmalloc(sVar6 + 1 + sVar9);" (assignment_expression "pcVar10 = (char *)nmalloc(sVar6 + 1 + sVar9)" identifier = (cast_expression "(char *)nmalloc(sVar6 + 1 + sVar9)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "nmalloc(sVar6 + 1 + sVar9)" identifier (argument_list "(sVar6 + 1 + sVar9)" ( (binary_expression "sVar6 + 1 + sVar9" (binary_expression "sVar6 + 1" identifier + number_literal) + identifier) ))))) ;) (expression_statement "__sprintf_chk(pcVar10,1,0xffffffff,"%s%s",local_b0,pcVar3);" (call_expression "__sprintf_chk(pcVar10,1,0xffffffff,"%s%s",local_b0,pcVar3)" identifier (argument_list "(pcVar10,1,0xffffffff,"%s%s",local_b0,pcVar3)" ( identifier , number_literal , number_literal , (string_literal ""%s%s"" " string_content ") , identifier , identifier ))) ;) (if_statement "if (operating_dir == (char *)0x0) {\nLAB_0001fc60:\n          if (!allow_files) {\n            if (*pcVar10 == '~') {\n              pcVar13 = real_dir_from_tilde(pcVar10);\n            }\n            else {\n              pcVar13 = mallocstrcpy((char *)0x0,pcVar10);\n            }\n            iVar8 = __xstat64(3,pcVar13,(stat64 *)&fileinfo);\n            if ((iVar8 == -1) || ((fileinfo.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar13);\n              goto LAB_0001fc27;\n            }\n            free(pcVar13);\n          }\n          free(pcVar10);\n          local_ac = (char **)nrealloc(local_ac,*num_matches * 4 + 4);\n          sVar2 = *num_matches;\n          pcVar3 = mallocstrcpy((char *)0x0,pcVar3);\n          local_ac[sVar2] = pcVar3;\n          *num_matches = *num_matches + 1;\n        }\n        else {\n          __haystack = get_full_path(pcVar10);\n          pcVar13 = operating_dir;\n          if (__haystack != (char *)0x0) {\n            pcVar11 = strstr(__haystack,operating_dir);\n            pcVar12 = strstr(pcVar13,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar11) || (pcVar13 == pcVar12)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar10);\n        }" if (parenthesized_expression "(operating_dir == (char *)0x0)" ( (binary_expression "operating_dir == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_0001fc60:\n          if (!allow_files) {\n            if (*pcVar10 == '~') {\n              pcVar13 = real_dir_from_tilde(pcVar10);\n            }\n            else {\n              pcVar13 = mallocstrcpy((char *)0x0,pcVar10);\n            }\n            iVar8 = __xstat64(3,pcVar13,(stat64 *)&fileinfo);\n            if ((iVar8 == -1) || ((fileinfo.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar13);\n              goto LAB_0001fc27;\n            }\n            free(pcVar13);\n          }\n          free(pcVar10);\n          local_ac = (char **)nrealloc(local_ac,*num_matches * 4 + 4);\n          sVar2 = *num_matches;\n          pcVar3 = mallocstrcpy((char *)0x0,pcVar3);\n          local_ac[sVar2] = pcVar3;\n          *num_matches = *num_matches + 1;\n        }" { (labeled_statement "LAB_0001fc60:\n          if (!allow_files) {\n            if (*pcVar10 == '~') {\n              pcVar13 = real_dir_from_tilde(pcVar10);\n            }\n            else {\n              pcVar13 = mallocstrcpy((char *)0x0,pcVar10);\n            }\n            iVar8 = __xstat64(3,pcVar13,(stat64 *)&fileinfo);\n            if ((iVar8 == -1) || ((fileinfo.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar13);\n              goto LAB_0001fc27;\n            }\n            free(pcVar13);\n          }" statement_identifier : (if_statement "if (!allow_files) {\n            if (*pcVar10 == '~') {\n              pcVar13 = real_dir_from_tilde(pcVar10);\n            }\n            else {\n              pcVar13 = mallocstrcpy((char *)0x0,pcVar10);\n            }\n            iVar8 = __xstat64(3,pcVar13,(stat64 *)&fileinfo);\n            if ((iVar8 == -1) || ((fileinfo.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar13);\n              goto LAB_0001fc27;\n            }\n            free(pcVar13);\n          }" if (parenthesized_expression "(!allow_files)" ( (unary_expression "!allow_files" ! identifier) )) (compound_statement "{\n            if (*pcVar10 == '~') {\n              pcVar13 = real_dir_from_tilde(pcVar10);\n            }\n            else {\n              pcVar13 = mallocstrcpy((char *)0x0,pcVar10);\n            }\n            iVar8 = __xstat64(3,pcVar13,(stat64 *)&fileinfo);\n            if ((iVar8 == -1) || ((fileinfo.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar13);\n              goto LAB_0001fc27;\n            }\n            free(pcVar13);\n          }" { (if_statement "if (*pcVar10 == '~') {\n              pcVar13 = real_dir_from_tilde(pcVar10);\n            }\n            else {\n              pcVar13 = mallocstrcpy((char *)0x0,pcVar10);\n            }" if (parenthesized_expression "(*pcVar10 == '~')" ( (binary_expression "*pcVar10 == '~'" (pointer_expression "*pcVar10" * identifier) == (char_literal "'~'" ' character ')) )) (compound_statement "{\n              pcVar13 = real_dir_from_tilde(pcVar10);\n            }" { (expression_statement "pcVar13 = real_dir_from_tilde(pcVar10);" (assignment_expression "pcVar13 = real_dir_from_tilde(pcVar10)" identifier = (call_expression "real_dir_from_tilde(pcVar10)" identifier (argument_list "(pcVar10)" ( identifier )))) ;) }) (else_clause "else {\n              pcVar13 = mallocstrcpy((char *)0x0,pcVar10);\n            }" else (compound_statement "{\n              pcVar13 = mallocstrcpy((char *)0x0,pcVar10);\n            }" { (expression_statement "pcVar13 = mallocstrcpy((char *)0x0,pcVar10);" (assignment_expression "pcVar13 = mallocstrcpy((char *)0x0,pcVar10)" identifier = (call_expression "mallocstrcpy((char *)0x0,pcVar10)" identifier (argument_list "((char *)0x0,pcVar10)" ( (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) , identifier )))) ;) }))) (expression_statement "iVar8 = __xstat64(3,pcVar13,(stat64 *)&fileinfo);" (assignment_expression "iVar8 = __xstat64(3,pcVar13,(stat64 *)&fileinfo)" identifier = (call_expression "__xstat64(3,pcVar13,(stat64 *)&fileinfo)" identifier (argument_list "(3,pcVar13,(stat64 *)&fileinfo)" ( number_literal , identifier , (cast_expression "(stat64 *)&fileinfo" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&fileinfo" & identifier)) )))) ;) (if_statement "if ((iVar8 == -1) || ((fileinfo.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar13);\n              goto LAB_0001fc27;\n            }" if (parenthesized_expression "((iVar8 == -1) || ((fileinfo.st_mode & 0xf000) != 0x4000))" ( (binary_expression "(iVar8 == -1) || ((fileinfo.st_mode & 0xf000) != 0x4000)" (parenthesized_expression "(iVar8 == -1)" ( (binary_expression "iVar8 == -1" identifier == number_literal) )) || (parenthesized_expression "((fileinfo.st_mode & 0xf000) != 0x4000)" ( (binary_expression "(fileinfo.st_mode & 0xf000) != 0x4000" (parenthesized_expression "(fileinfo.st_mode & 0xf000)" ( (binary_expression "fileinfo.st_mode & 0xf000" (field_expression "fileinfo.st_mode" identifier . field_identifier) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n              free(pcVar13);\n              goto LAB_0001fc27;\n            }" { (expression_statement "free(pcVar13);" (call_expression "free(pcVar13)" identifier (argument_list "(pcVar13)" ( identifier ))) ;) (goto_statement "goto LAB_0001fc27;" goto statement_identifier ;) })) (expression_statement "free(pcVar13);" (call_expression "free(pcVar13)" identifier (argument_list "(pcVar13)" ( identifier ))) ;) }))) (expression_statement "free(pcVar10);" (call_expression "free(pcVar10)" identifier (argument_list "(pcVar10)" ( identifier ))) ;) (expression_statement "local_ac = (char **)nrealloc(local_ac,*num_matches * 4 + 4);" (assignment_expression "local_ac = (char **)nrealloc(local_ac,*num_matches * 4 + 4)" identifier = (cast_expression "(char **)nrealloc(local_ac,*num_matches * 4 + 4)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (call_expression "nrealloc(local_ac,*num_matches * 4 + 4)" identifier (argument_list "(local_ac,*num_matches * 4 + 4)" ( identifier , (binary_expression "*num_matches * 4 + 4" (binary_expression "*num_matches * 4" (pointer_expression "*num_matches" * identifier) * number_literal) + number_literal) ))))) ;) (expression_statement "sVar2 = *num_matches;" (assignment_expression "sVar2 = *num_matches" identifier = (pointer_expression "*num_matches" * identifier)) ;) (expression_statement "pcVar3 = mallocstrcpy((char *)0x0,pcVar3);" (assignment_expression "pcVar3 = mallocstrcpy((char *)0x0,pcVar3)" identifier = (call_expression "mallocstrcpy((char *)0x0,pcVar3)" identifier (argument_list "((char *)0x0,pcVar3)" ( (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) , identifier )))) ;) (expression_statement "local_ac[sVar2] = pcVar3;" (assignment_expression "local_ac[sVar2] = pcVar3" (subscript_expression "local_ac[sVar2]" identifier [ identifier ]) = identifier) ;) (expression_statement "*num_matches = *num_matches + 1;" (assignment_expression "*num_matches = *num_matches + 1" (pointer_expression "*num_matches" * identifier) = (binary_expression "*num_matches + 1" (pointer_expression "*num_matches" * identifier) + number_literal)) ;) }) (else_clause "else {\n          __haystack = get_full_path(pcVar10);\n          pcVar13 = operating_dir;\n          if (__haystack != (char *)0x0) {\n            pcVar11 = strstr(__haystack,operating_dir);\n            pcVar12 = strstr(pcVar13,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar11) || (pcVar13 == pcVar12)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar10);\n        }" else (compound_statement "{\n          __haystack = get_full_path(pcVar10);\n          pcVar13 = operating_dir;\n          if (__haystack != (char *)0x0) {\n            pcVar11 = strstr(__haystack,operating_dir);\n            pcVar12 = strstr(pcVar13,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar11) || (pcVar13 == pcVar12)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar10);\n        }" { (expression_statement "__haystack = get_full_path(pcVar10);" (assignment_expression "__haystack = get_full_path(pcVar10)" identifier = (call_expression "get_full_path(pcVar10)" identifier (argument_list "(pcVar10)" ( identifier )))) ;) (expression_statement "pcVar13 = operating_dir;" (assignment_expression "pcVar13 = operating_dir" identifier = identifier) ;) (if_statement "if (__haystack != (char *)0x0) {\n            pcVar11 = strstr(__haystack,operating_dir);\n            pcVar12 = strstr(pcVar13,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar11) || (pcVar13 == pcVar12)) goto LAB_0001fc60;\n          }" if (parenthesized_expression "(__haystack != (char *)0x0)" ( (binary_expression "__haystack != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            pcVar11 = strstr(__haystack,operating_dir);\n            pcVar12 = strstr(pcVar13,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar11) || (pcVar13 == pcVar12)) goto LAB_0001fc60;\n          }" { (expression_statement "pcVar11 = strstr(__haystack,operating_dir);" (assignment_expression "pcVar11 = strstr(__haystack,operating_dir)" identifier = (call_expression "strstr(__haystack,operating_dir)" identifier (argument_list "(__haystack,operating_dir)" ( identifier , identifier )))) ;) (expression_statement "pcVar12 = strstr(pcVar13,__haystack);" (assignment_expression "pcVar12 = strstr(pcVar13,__haystack)" identifier = (call_expression "strstr(pcVar13,__haystack)" identifier (argument_list "(pcVar13,__haystack)" ( identifier , identifier )))) ;) (expression_statement "free(__haystack);" (call_expression "free(__haystack)" identifier (argument_list "(__haystack)" ( identifier ))) ;) (if_statement "if ((__haystack == pcVar11) || (pcVar13 == pcVar12)) goto LAB_0001fc60;" if (parenthesized_expression "((__haystack == pcVar11) || (pcVar13 == pcVar12))" ( (binary_expression "(__haystack == pcVar11) || (pcVar13 == pcVar12)" (parenthesized_expression "(__haystack == pcVar11)" ( (binary_expression "__haystack == pcVar11" identifier == identifier) )) || (parenthesized_expression "(pcVar13 == pcVar12)" ( (binary_expression "pcVar13 == pcVar12" identifier == identifier) ))) )) (goto_statement "goto LAB_0001fc60;" goto statement_identifier ;)) })) (labeled_statement "LAB_0001fc27:\n          free(pcVar10);" statement_identifier : (expression_statement "free(pcVar10);" (call_expression "free(pcVar10)" identifier (argument_list "(pcVar10)" ( identifier ))) ;)) }))) })) }) while (parenthesized_expression "( true )" ( true )) ;)) })) (expression_statement "beep();" (call_expression "beep()" identifier (argument_list "()" ( ))) ;) (expression_statement "free(local_bc);" (call_expression "free(local_bc)" identifier (argument_list "(local_bc)" ( identifier ))) ;) (expression_statement "free(local_b0);" (call_expression "free(local_b0)" identifier (argument_list "(local_b0)" ( identifier ))) ;) (expression_statement "local_ac = (char **)0x0;" (assignment_expression "local_ac = (char **)0x0" identifier = (cast_expression "(char **)0x0" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) ;) (labeled_statement "LAB_0001fcd3:\n  if (iVar1 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return local_ac;\n  }" statement_identifier : (if_statement "if (iVar1 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return local_ac;\n  }" if (parenthesized_expression "(iVar1 == *(int *)(in_GS_OFFSET + 0x14))" ( (binary_expression "iVar1 == *(int *)(in_GS_OFFSET + 0x14)" identifier == (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) )) (compound_statement "{\n    return local_ac;\n  }" { (return_statement "return local_ac;" return identifier ;) }))) comment (expression_statement "__stack_chk_fail_local();" (call_expression "__stack_chk_fail_local()" identifier (argument_list "()" ( ))) ;) (labeled_statement "LAB_0001fcb0:\n  closedir(__dirp);" statement_identifier : (expression_statement "closedir(__dirp);" (call_expression "closedir(__dirp)" identifier (argument_list "(__dirp)" ( identifier ))) ;)) (expression_statement "free(local_b0);" (call_expression "free(local_b0)" identifier (argument_list "(local_b0)" ( identifier ))) ;) (expression_statement "free(local_bc);" (call_expression "free(local_bc)" identifier (argument_list "(local_bc)" ( identifier ))) ;) (goto_statement "goto LAB_0001fcd3;" goto statement_identifier ;) })))
(translation_unit "int FUN_0001f9d0(undefined4 param_1,char param_2,int *param_3,int param_4)\n\n{\n  char *pcVar1;\n  byte *pbVar2;\n  size_t sVar3;\n  size_t sVar4;\n  DIR *__dirp;\n  dirent64 *pdVar5;\n  int iVar6;\n  size_t sVar7;\n  char *pcVar8;\n  char *__haystack;\n  char *pcVar9;\n  char *pcVar10;\n  undefined4 uVar11;\n  char *pcVar12;\n  int in_GS_OFFSET;\n  bool bVar13;\n  bool bVar14;\n  bool bVar15;\n  byte bVar16;\n  byte *local_bc;\n  char *local_b0;\n  int local_ac;\n  stat64 local_80;\n  int local_20;\n  undefined4 uStack_14;\n  \n  bVar16 = 0;\n  uStack_14 = 0x1f9d9;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  local_bc = (byte *)FUN_0003dbd0(0,param_1);\n  *param_3 = 0;\n  local_bc[param_4] = 0;\n  pcVar1 = strrchr((char *)local_bc,0x2f);\n  if (pcVar1 == (char *)0x0) {\n    local_b0 = (char *)FUN_0003dbd0(0,DAT_0007b674);\n  }\n  else {\n    pbVar2 = (byte *)FUN_0003dbd0(0,pcVar1 + 1);\n    pcVar1[1] = '\0';\n    if (*local_bc == 0x7e) {\n      local_b0 = (char *)FUN_0001a620();\n    }\n    else {\n      local_b0 = (char *)FUN_0003dbd0(0,local_bc);\n    }\n    if (*local_b0 != '/') {\n      sVar3 = strlen(DAT_0007b674);\n      sVar4 = strlen((char *)local_bc);\n      local_b0 = (char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4);\n      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc);\n    }\n    free(local_bc);\n    local_bc = pbVar2;\n  }\n  __dirp = opendir(local_b0);\n  if (__dirp != (DIR *)0x0) {\n    sVar3 = strlen((char *)local_bc);\n    local_ac = 0;\nLAB_0001fb20:\n    do {\n      pdVar5 = readdir64(__dirp);\n      if (pdVar5 == (dirent64 *)0x0) goto LAB_0001fcb0;\n      pcVar1 = pdVar5->d_name;\n      iVar6 = strncmp(pcVar1,(char *)local_bc,sVar3);\n      if (iVar6 == 0) {\n        bVar13 = *local_bc < 0x2e;\n        bVar15 = *local_bc == 0x2e;\n        if (!bVar15) {\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }\n        sVar4 = strlen(local_b0);\n        sVar7 = strlen(pcVar1);\n        pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);\n        __sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);\n        if (DAT_0007b614 == (char *)0x0) {\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }\n        else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }\n      }\n    } while( true );\n  }\n  beep();\n  free(local_bc);\n  free(local_b0);\n  local_ac = 0;\nLAB_0001fcd3:\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return local_ac;\n  }\n                    \n  FUN_0005a8b0();\nLAB_0001fcb0:\n  closedir(__dirp);\n  free(local_b0);\n  free(local_bc);\n  goto LAB_0001fcd3;\n}\n\n" (function_definition "int FUN_0001f9d0(undefined4 param_1,char param_2,int *param_3,int param_4)\n\n{\n  char *pcVar1;\n  byte *pbVar2;\n  size_t sVar3;\n  size_t sVar4;\n  DIR *__dirp;\n  dirent64 *pdVar5;\n  int iVar6;\n  size_t sVar7;\n  char *pcVar8;\n  char *__haystack;\n  char *pcVar9;\n  char *pcVar10;\n  undefined4 uVar11;\n  char *pcVar12;\n  int in_GS_OFFSET;\n  bool bVar13;\n  bool bVar14;\n  bool bVar15;\n  byte bVar16;\n  byte *local_bc;\n  char *local_b0;\n  int local_ac;\n  stat64 local_80;\n  int local_20;\n  undefined4 uStack_14;\n  \n  bVar16 = 0;\n  uStack_14 = 0x1f9d9;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  local_bc = (byte *)FUN_0003dbd0(0,param_1);\n  *param_3 = 0;\n  local_bc[param_4] = 0;\n  pcVar1 = strrchr((char *)local_bc,0x2f);\n  if (pcVar1 == (char *)0x0) {\n    local_b0 = (char *)FUN_0003dbd0(0,DAT_0007b674);\n  }\n  else {\n    pbVar2 = (byte *)FUN_0003dbd0(0,pcVar1 + 1);\n    pcVar1[1] = '\0';\n    if (*local_bc == 0x7e) {\n      local_b0 = (char *)FUN_0001a620();\n    }\n    else {\n      local_b0 = (char *)FUN_0003dbd0(0,local_bc);\n    }\n    if (*local_b0 != '/') {\n      sVar3 = strlen(DAT_0007b674);\n      sVar4 = strlen((char *)local_bc);\n      local_b0 = (char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4);\n      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc);\n    }\n    free(local_bc);\n    local_bc = pbVar2;\n  }\n  __dirp = opendir(local_b0);\n  if (__dirp != (DIR *)0x0) {\n    sVar3 = strlen((char *)local_bc);\n    local_ac = 0;\nLAB_0001fb20:\n    do {\n      pdVar5 = readdir64(__dirp);\n      if (pdVar5 == (dirent64 *)0x0) goto LAB_0001fcb0;\n      pcVar1 = pdVar5->d_name;\n      iVar6 = strncmp(pcVar1,(char *)local_bc,sVar3);\n      if (iVar6 == 0) {\n        bVar13 = *local_bc < 0x2e;\n        bVar15 = *local_bc == 0x2e;\n        if (!bVar15) {\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }\n        sVar4 = strlen(local_b0);\n        sVar7 = strlen(pcVar1);\n        pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);\n        __sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);\n        if (DAT_0007b614 == (char *)0x0) {\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }\n        else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }\n      }\n    } while( true );\n  }\n  beep();\n  free(local_bc);\n  free(local_b0);\n  local_ac = 0;\nLAB_0001fcd3:\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return local_ac;\n  }\n                    \n  FUN_0005a8b0();\nLAB_0001fcb0:\n  closedir(__dirp);\n  free(local_b0);\n  free(local_bc);\n  goto LAB_0001fcd3;\n}" primitive_type (function_declarator "FUN_0001f9d0(undefined4 param_1,char param_2,int *param_3,int param_4)" identifier (parameter_list "(undefined4 param_1,char param_2,int *param_3,int param_4)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "char param_2" primitive_type identifier) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "int param_4" primitive_type identifier) ))) (compound_statement "{\n  char *pcVar1;\n  byte *pbVar2;\n  size_t sVar3;\n  size_t sVar4;\n  DIR *__dirp;\n  dirent64 *pdVar5;\n  int iVar6;\n  size_t sVar7;\n  char *pcVar8;\n  char *__haystack;\n  char *pcVar9;\n  char *pcVar10;\n  undefined4 uVar11;\n  char *pcVar12;\n  int in_GS_OFFSET;\n  bool bVar13;\n  bool bVar14;\n  bool bVar15;\n  byte bVar16;\n  byte *local_bc;\n  char *local_b0;\n  int local_ac;\n  stat64 local_80;\n  int local_20;\n  undefined4 uStack_14;\n  \n  bVar16 = 0;\n  uStack_14 = 0x1f9d9;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  local_bc = (byte *)FUN_0003dbd0(0,param_1);\n  *param_3 = 0;\n  local_bc[param_4] = 0;\n  pcVar1 = strrchr((char *)local_bc,0x2f);\n  if (pcVar1 == (char *)0x0) {\n    local_b0 = (char *)FUN_0003dbd0(0,DAT_0007b674);\n  }\n  else {\n    pbVar2 = (byte *)FUN_0003dbd0(0,pcVar1 + 1);\n    pcVar1[1] = '\0';\n    if (*local_bc == 0x7e) {\n      local_b0 = (char *)FUN_0001a620();\n    }\n    else {\n      local_b0 = (char *)FUN_0003dbd0(0,local_bc);\n    }\n    if (*local_b0 != '/') {\n      sVar3 = strlen(DAT_0007b674);\n      sVar4 = strlen((char *)local_bc);\n      local_b0 = (char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4);\n      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc);\n    }\n    free(local_bc);\n    local_bc = pbVar2;\n  }\n  __dirp = opendir(local_b0);\n  if (__dirp != (DIR *)0x0) {\n    sVar3 = strlen((char *)local_bc);\n    local_ac = 0;\nLAB_0001fb20:\n    do {\n      pdVar5 = readdir64(__dirp);\n      if (pdVar5 == (dirent64 *)0x0) goto LAB_0001fcb0;\n      pcVar1 = pdVar5->d_name;\n      iVar6 = strncmp(pcVar1,(char *)local_bc,sVar3);\n      if (iVar6 == 0) {\n        bVar13 = *local_bc < 0x2e;\n        bVar15 = *local_bc == 0x2e;\n        if (!bVar15) {\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }\n        sVar4 = strlen(local_b0);\n        sVar7 = strlen(pcVar1);\n        pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);\n        __sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);\n        if (DAT_0007b614 == (char *)0x0) {\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }\n        else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }\n      }\n    } while( true );\n  }\n  beep();\n  free(local_bc);\n  free(local_b0);\n  local_ac = 0;\nLAB_0001fcd3:\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return local_ac;\n  }\n                    \n  FUN_0005a8b0();\nLAB_0001fcb0:\n  closedir(__dirp);\n  free(local_b0);\n  free(local_bc);\n  goto LAB_0001fcd3;\n}" { (declaration "char *pcVar1;" primitive_type (pointer_declarator "*pcVar1" * identifier) ;) (declaration "byte *pbVar2;" type_identifier (pointer_declarator "*pbVar2" * identifier) ;) (declaration "size_t sVar3;" primitive_type identifier ;) (declaration "size_t sVar4;" primitive_type identifier ;) (declaration "DIR *__dirp;" type_identifier (pointer_declarator "*__dirp" * identifier) ;) (declaration "dirent64 *pdVar5;" type_identifier (pointer_declarator "*pdVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "size_t sVar7;" primitive_type identifier ;) (declaration "char *pcVar8;" primitive_type (pointer_declarator "*pcVar8" * identifier) ;) (declaration "char *__haystack;" primitive_type (pointer_declarator "*__haystack" * identifier) ;) (declaration "char *pcVar9;" primitive_type (pointer_declarator "*pcVar9" * identifier) ;) (declaration "char *pcVar10;" primitive_type (pointer_declarator "*pcVar10" * identifier) ;) (declaration "undefined4 uVar11;" type_identifier identifier ;) (declaration "char *pcVar12;" primitive_type (pointer_declarator "*pcVar12" * identifier) ;) (declaration "int in_GS_OFFSET;" primitive_type identifier ;) (declaration "bool bVar13;" primitive_type identifier ;) (declaration "bool bVar14;" primitive_type identifier ;) (declaration "bool bVar15;" primitive_type identifier ;) (declaration "byte bVar16;" type_identifier identifier ;) (declaration "byte *local_bc;" type_identifier (pointer_declarator "*local_bc" * identifier) ;) (declaration "char *local_b0;" primitive_type (pointer_declarator "*local_b0" * identifier) ;) (declaration "int local_ac;" primitive_type identifier ;) (declaration "stat64 local_80;" type_identifier identifier ;) (declaration "int local_20;" primitive_type identifier ;) (declaration "undefined4 uStack_14;" type_identifier identifier ;) (expression_statement "bVar16 = 0;" (assignment_expression "bVar16 = 0" identifier = number_literal) ;) (expression_statement "uStack_14 = 0x1f9d9;" (assignment_expression "uStack_14 = 0x1f9d9" identifier = number_literal) ;) (expression_statement "local_20 = *(int *)(in_GS_OFFSET + 0x14);" (assignment_expression "local_20 = *(int *)(in_GS_OFFSET + 0x14)" identifier = (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) ;) (expression_statement "local_bc = (byte *)FUN_0003dbd0(0,param_1);" (assignment_expression "local_bc = (byte *)FUN_0003dbd0(0,param_1)" identifier = (cast_expression "(byte *)FUN_0003dbd0(0,param_1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0003dbd0(0,param_1)" identifier (argument_list "(0,param_1)" ( number_literal , identifier ))))) ;) (expression_statement "*param_3 = 0;" (assignment_expression "*param_3 = 0" (pointer_expression "*param_3" * identifier) = number_literal) ;) (expression_statement "local_bc[param_4] = 0;" (assignment_expression "local_bc[param_4] = 0" (subscript_expression "local_bc[param_4]" identifier [ identifier ]) = number_literal) ;) (expression_statement "pcVar1 = strrchr((char *)local_bc,0x2f);" (assignment_expression "pcVar1 = strrchr((char *)local_bc,0x2f)" identifier = (call_expression "strrchr((char *)local_bc,0x2f)" identifier (argument_list "((char *)local_bc,0x2f)" ( (cast_expression "(char *)local_bc" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , number_literal )))) ;) (if_statement "if (pcVar1 == (char *)0x0) {\n    local_b0 = (char *)FUN_0003dbd0(0,DAT_0007b674);\n  }\n  else {\n    pbVar2 = (byte *)FUN_0003dbd0(0,pcVar1 + 1);\n    pcVar1[1] = '\0';\n    if (*local_bc == 0x7e) {\n      local_b0 = (char *)FUN_0001a620();\n    }\n    else {\n      local_b0 = (char *)FUN_0003dbd0(0,local_bc);\n    }\n    if (*local_b0 != '/') {\n      sVar3 = strlen(DAT_0007b674);\n      sVar4 = strlen((char *)local_bc);\n      local_b0 = (char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4);\n      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc);\n    }\n    free(local_bc);\n    local_bc = pbVar2;\n  }" if (parenthesized_expression "(pcVar1 == (char *)0x0)" ( (binary_expression "pcVar1 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    local_b0 = (char *)FUN_0003dbd0(0,DAT_0007b674);\n  }" { (expression_statement "local_b0 = (char *)FUN_0003dbd0(0,DAT_0007b674);" (assignment_expression "local_b0 = (char *)FUN_0003dbd0(0,DAT_0007b674)" identifier = (cast_expression "(char *)FUN_0003dbd0(0,DAT_0007b674)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0003dbd0(0,DAT_0007b674)" identifier (argument_list "(0,DAT_0007b674)" ( number_literal , identifier ))))) ;) }) (else_clause "else {\n    pbVar2 = (byte *)FUN_0003dbd0(0,pcVar1 + 1);\n    pcVar1[1] = '\0';\n    if (*local_bc == 0x7e) {\n      local_b0 = (char *)FUN_0001a620();\n    }\n    else {\n      local_b0 = (char *)FUN_0003dbd0(0,local_bc);\n    }\n    if (*local_b0 != '/') {\n      sVar3 = strlen(DAT_0007b674);\n      sVar4 = strlen((char *)local_bc);\n      local_b0 = (char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4);\n      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc);\n    }\n    free(local_bc);\n    local_bc = pbVar2;\n  }" else (compound_statement "{\n    pbVar2 = (byte *)FUN_0003dbd0(0,pcVar1 + 1);\n    pcVar1[1] = '\0';\n    if (*local_bc == 0x7e) {\n      local_b0 = (char *)FUN_0001a620();\n    }\n    else {\n      local_b0 = (char *)FUN_0003dbd0(0,local_bc);\n    }\n    if (*local_b0 != '/') {\n      sVar3 = strlen(DAT_0007b674);\n      sVar4 = strlen((char *)local_bc);\n      local_b0 = (char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4);\n      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc);\n    }\n    free(local_bc);\n    local_bc = pbVar2;\n  }" { (expression_statement "pbVar2 = (byte *)FUN_0003dbd0(0,pcVar1 + 1);" (assignment_expression "pbVar2 = (byte *)FUN_0003dbd0(0,pcVar1 + 1)" identifier = (cast_expression "(byte *)FUN_0003dbd0(0,pcVar1 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0003dbd0(0,pcVar1 + 1)" identifier (argument_list "(0,pcVar1 + 1)" ( number_literal , (binary_expression "pcVar1 + 1" identifier + number_literal) ))))) ;) (expression_statement "pcVar1[1] = '\0';" (assignment_expression "pcVar1[1] = '\0'" (subscript_expression "pcVar1[1]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (if_statement "if (*local_bc == 0x7e) {\n      local_b0 = (char *)FUN_0001a620();\n    }\n    else {\n      local_b0 = (char *)FUN_0003dbd0(0,local_bc);\n    }" if (parenthesized_expression "(*local_bc == 0x7e)" ( (binary_expression "*local_bc == 0x7e" (pointer_expression "*local_bc" * identifier) == number_literal) )) (compound_statement "{\n      local_b0 = (char *)FUN_0001a620();\n    }" { (expression_statement "local_b0 = (char *)FUN_0001a620();" (assignment_expression "local_b0 = (char *)FUN_0001a620()" identifier = (cast_expression "(char *)FUN_0001a620()" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0001a620()" identifier (argument_list "()" ( ))))) ;) }) (else_clause "else {\n      local_b0 = (char *)FUN_0003dbd0(0,local_bc);\n    }" else (compound_statement "{\n      local_b0 = (char *)FUN_0003dbd0(0,local_bc);\n    }" { (expression_statement "local_b0 = (char *)FUN_0003dbd0(0,local_bc);" (assignment_expression "local_b0 = (char *)FUN_0003dbd0(0,local_bc)" identifier = (cast_expression "(char *)FUN_0003dbd0(0,local_bc)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0003dbd0(0,local_bc)" identifier (argument_list "(0,local_bc)" ( number_literal , identifier ))))) ;) }))) (if_statement "if (*local_b0 != '/') {\n      sVar3 = strlen(DAT_0007b674);\n      sVar4 = strlen((char *)local_bc);\n      local_b0 = (char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4);\n      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc);\n    }" if (parenthesized_expression "(*local_b0 != '/')" ( (binary_expression "*local_b0 != '/'" (pointer_expression "*local_b0" * identifier) != (char_literal "'/'" ' character ')) )) (compound_statement "{\n      sVar3 = strlen(DAT_0007b674);\n      sVar4 = strlen((char *)local_bc);\n      local_b0 = (char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4);\n      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc);\n    }" { (expression_statement "sVar3 = strlen(DAT_0007b674);" (assignment_expression "sVar3 = strlen(DAT_0007b674)" identifier = (call_expression "strlen(DAT_0007b674)" identifier (argument_list "(DAT_0007b674)" ( identifier )))) ;) (expression_statement "sVar4 = strlen((char *)local_bc);" (assignment_expression "sVar4 = strlen((char *)local_bc)" identifier = (call_expression "strlen((char *)local_bc)" identifier (argument_list "((char *)local_bc)" ( (cast_expression "(char *)local_bc" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) (expression_statement "local_b0 = (char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4);" (assignment_expression "local_b0 = (char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4)" identifier = (cast_expression "(char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0003dad0(local_b0,sVar3 + 1 + sVar4)" identifier (argument_list "(local_b0,sVar3 + 1 + sVar4)" ( identifier , (binary_expression "sVar3 + 1 + sVar4" (binary_expression "sVar3 + 1" identifier + number_literal) + identifier) ))))) ;) (expression_statement "__sprintf_chk(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc);" (call_expression "__sprintf_chk(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc)" identifier (argument_list "(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc)" ( identifier , number_literal , number_literal , (string_literal ""%s%s"" " string_content ") , identifier , identifier ))) ;) })) (expression_statement "free(local_bc);" (call_expression "free(local_bc)" identifier (argument_list "(local_bc)" ( identifier ))) ;) (expression_statement "local_bc = pbVar2;" (assignment_expression "local_bc = pbVar2" identifier = identifier) ;) }))) (expression_statement "__dirp = opendir(local_b0);" (assignment_expression "__dirp = opendir(local_b0)" identifier = (call_expression "opendir(local_b0)" identifier (argument_list "(local_b0)" ( identifier )))) ;) (if_statement "if (__dirp != (DIR *)0x0) {\n    sVar3 = strlen((char *)local_bc);\n    local_ac = 0;\nLAB_0001fb20:\n    do {\n      pdVar5 = readdir64(__dirp);\n      if (pdVar5 == (dirent64 *)0x0) goto LAB_0001fcb0;\n      pcVar1 = pdVar5->d_name;\n      iVar6 = strncmp(pcVar1,(char *)local_bc,sVar3);\n      if (iVar6 == 0) {\n        bVar13 = *local_bc < 0x2e;\n        bVar15 = *local_bc == 0x2e;\n        if (!bVar15) {\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }\n        sVar4 = strlen(local_b0);\n        sVar7 = strlen(pcVar1);\n        pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);\n        __sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);\n        if (DAT_0007b614 == (char *)0x0) {\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }\n        else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }\n      }\n    } while( true );\n  }" if (parenthesized_expression "(__dirp != (DIR *)0x0)" ( (binary_expression "__dirp != (DIR *)0x0" identifier != (cast_expression "(DIR *)0x0" ( (type_descriptor "DIR *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    sVar3 = strlen((char *)local_bc);\n    local_ac = 0;\nLAB_0001fb20:\n    do {\n      pdVar5 = readdir64(__dirp);\n      if (pdVar5 == (dirent64 *)0x0) goto LAB_0001fcb0;\n      pcVar1 = pdVar5->d_name;\n      iVar6 = strncmp(pcVar1,(char *)local_bc,sVar3);\n      if (iVar6 == 0) {\n        bVar13 = *local_bc < 0x2e;\n        bVar15 = *local_bc == 0x2e;\n        if (!bVar15) {\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }\n        sVar4 = strlen(local_b0);\n        sVar7 = strlen(pcVar1);\n        pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);\n        __sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);\n        if (DAT_0007b614 == (char *)0x0) {\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }\n        else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }\n      }\n    } while( true );\n  }" { (expression_statement "sVar3 = strlen((char *)local_bc);" (assignment_expression "sVar3 = strlen((char *)local_bc)" identifier = (call_expression "strlen((char *)local_bc)" identifier (argument_list "((char *)local_bc)" ( (cast_expression "(char *)local_bc" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) (expression_statement "local_ac = 0;" (assignment_expression "local_ac = 0" identifier = number_literal) ;) (labeled_statement "LAB_0001fb20:\n    do {\n      pdVar5 = readdir64(__dirp);\n      if (pdVar5 == (dirent64 *)0x0) goto LAB_0001fcb0;\n      pcVar1 = pdVar5->d_name;\n      iVar6 = strncmp(pcVar1,(char *)local_bc,sVar3);\n      if (iVar6 == 0) {\n        bVar13 = *local_bc < 0x2e;\n        bVar15 = *local_bc == 0x2e;\n        if (!bVar15) {\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }\n        sVar4 = strlen(local_b0);\n        sVar7 = strlen(pcVar1);\n        pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);\n        __sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);\n        if (DAT_0007b614 == (char *)0x0) {\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }\n        else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }\n      }\n    } while( true );" statement_identifier : (do_statement "do {\n      pdVar5 = readdir64(__dirp);\n      if (pdVar5 == (dirent64 *)0x0) goto LAB_0001fcb0;\n      pcVar1 = pdVar5->d_name;\n      iVar6 = strncmp(pcVar1,(char *)local_bc,sVar3);\n      if (iVar6 == 0) {\n        bVar13 = *local_bc < 0x2e;\n        bVar15 = *local_bc == 0x2e;\n        if (!bVar15) {\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }\n        sVar4 = strlen(local_b0);\n        sVar7 = strlen(pcVar1);\n        pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);\n        __sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);\n        if (DAT_0007b614 == (char *)0x0) {\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }\n        else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }\n      }\n    } while( true );" do (compound_statement "{\n      pdVar5 = readdir64(__dirp);\n      if (pdVar5 == (dirent64 *)0x0) goto LAB_0001fcb0;\n      pcVar1 = pdVar5->d_name;\n      iVar6 = strncmp(pcVar1,(char *)local_bc,sVar3);\n      if (iVar6 == 0) {\n        bVar13 = *local_bc < 0x2e;\n        bVar15 = *local_bc == 0x2e;\n        if (!bVar15) {\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }\n        sVar4 = strlen(local_b0);\n        sVar7 = strlen(pcVar1);\n        pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);\n        __sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);\n        if (DAT_0007b614 == (char *)0x0) {\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }\n        else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }\n      }\n    }" { (expression_statement "pdVar5 = readdir64(__dirp);" (assignment_expression "pdVar5 = readdir64(__dirp)" identifier = (call_expression "readdir64(__dirp)" identifier (argument_list "(__dirp)" ( identifier )))) ;) (if_statement "if (pdVar5 == (dirent64 *)0x0) goto LAB_0001fcb0;" if (parenthesized_expression "(pdVar5 == (dirent64 *)0x0)" ( (binary_expression "pdVar5 == (dirent64 *)0x0" identifier == (cast_expression "(dirent64 *)0x0" ( (type_descriptor "dirent64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0001fcb0;" goto statement_identifier ;)) (expression_statement "pcVar1 = pdVar5->d_name;" (assignment_expression "pcVar1 = pdVar5->d_name" identifier = (field_expression "pdVar5->d_name" identifier -> field_identifier)) ;) (expression_statement "iVar6 = strncmp(pcVar1,(char *)local_bc,sVar3);" (assignment_expression "iVar6 = strncmp(pcVar1,(char *)local_bc,sVar3)" identifier = (call_expression "strncmp(pcVar1,(char *)local_bc,sVar3)" identifier (argument_list "(pcVar1,(char *)local_bc,sVar3)" ( identifier , (cast_expression "(char *)local_bc" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , identifier )))) ;) (if_statement "if (iVar6 == 0) {\n        bVar13 = *local_bc < 0x2e;\n        bVar15 = *local_bc == 0x2e;\n        if (!bVar15) {\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }\n        sVar4 = strlen(local_b0);\n        sVar7 = strlen(pcVar1);\n        pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);\n        __sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);\n        if (DAT_0007b614 == (char *)0x0) {\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }\n        else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }\n      }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n        bVar13 = *local_bc < 0x2e;\n        bVar15 = *local_bc == 0x2e;\n        if (!bVar15) {\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }\n        sVar4 = strlen(local_b0);\n        sVar7 = strlen(pcVar1);\n        pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);\n        __sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);\n        if (DAT_0007b614 == (char *)0x0) {\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }\n        else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }\n      }" { (expression_statement "bVar13 = *local_bc < 0x2e;" (assignment_expression "bVar13 = *local_bc < 0x2e" identifier = (binary_expression "*local_bc < 0x2e" (pointer_expression "*local_bc" * identifier) < number_literal)) ;) (expression_statement "bVar15 = *local_bc == 0x2e;" (assignment_expression "bVar15 = *local_bc == 0x2e" identifier = (binary_expression "*local_bc == 0x2e" (pointer_expression "*local_bc" * identifier) == number_literal)) ;) (if_statement "if (!bVar15) {\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }" if (parenthesized_expression "(!bVar15)" ( (unary_expression "!bVar15" ! identifier) )) (compound_statement "{\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }" { (expression_statement "iVar6 = 2;" (assignment_expression "iVar6 = 2" identifier = number_literal) ;) (expression_statement "pcVar8 = pcVar1;" (assignment_expression "pcVar8 = pcVar1" identifier = identifier) ;) (expression_statement "pbVar2 = &DAT_0005c437;" (assignment_expression "pbVar2 = &DAT_0005c437" identifier = (pointer_expression "&DAT_0005c437" & identifier)) ;) (do_statement "do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);" do (compound_statement "{\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          }" { (if_statement "if (iVar6 == 0) break;" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar6 = iVar6 + -1;" (assignment_expression "iVar6 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (expression_statement "bVar13 = (byte)*pcVar8 < *pbVar2;" (assignment_expression "bVar13 = (byte)*pcVar8 < *pbVar2" identifier = (binary_expression "(byte)*pcVar8 < *pbVar2" (binary_expression "(byte)*pcVar8" (parenthesized_expression "(byte)" ( identifier )) * identifier) < (pointer_expression "*pbVar2" * identifier))) ;) (expression_statement "bVar15 = *pcVar8 == *pbVar2;" (assignment_expression "bVar15 = *pcVar8 == *pbVar2" identifier = (binary_expression "*pcVar8 == *pbVar2" (pointer_expression "*pcVar8" * identifier) == (pointer_expression "*pbVar2" * identifier))) ;) (expression_statement "pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;" (assignment_expression "pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1" identifier = (binary_expression "pcVar8 + (uint)bVar16 * -2 + 1" (binary_expression "pcVar8 + (uint)bVar16 * -2" identifier + (binary_expression "(uint)bVar16 * -2" (cast_expression "(uint)bVar16" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;" (assignment_expression "pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1" identifier = (binary_expression "pbVar2 + (uint)bVar16 * -2 + 1" (binary_expression "pbVar2 + (uint)bVar16 * -2" identifier + (binary_expression "(uint)bVar16 * -2" (cast_expression "(uint)bVar16" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar15)" ( identifier )) ;) (expression_statement "bVar14 = false;" (assignment_expression "bVar14 = false" identifier = false) ;) (expression_statement "bVar13 = (!bVar13 && !bVar15) == bVar13;" (assignment_expression "bVar13 = (!bVar13 && !bVar15) == bVar13" identifier = (binary_expression "(!bVar13 && !bVar15) == bVar13" (parenthesized_expression "(!bVar13 && !bVar15)" ( (binary_expression "!bVar13 && !bVar15" (unary_expression "!bVar13" ! identifier) && (unary_expression "!bVar15" ! identifier)) )) == identifier)) ;) (if_statement "if (bVar13) goto LAB_0001fb20;" if (parenthesized_expression "(bVar13)" ( identifier )) (goto_statement "goto LAB_0001fb20;" goto statement_identifier ;)) (expression_statement "iVar6 = 3;" (assignment_expression "iVar6 = 3" identifier = number_literal) ;) (expression_statement "pcVar8 = pcVar1;" (assignment_expression "pcVar8 = pcVar1" identifier = identifier) ;) (expression_statement "pbVar2 = (byte *)0x60801;" (assignment_expression "pbVar2 = (byte *)0x60801" identifier = (cast_expression "(byte *)0x60801" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (do_statement "do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);" do (compound_statement "{\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          }" { (if_statement "if (iVar6 == 0) break;" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar6 = iVar6 + -1;" (assignment_expression "iVar6 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (expression_statement "bVar14 = (byte)*pcVar8 < *pbVar2;" (assignment_expression "bVar14 = (byte)*pcVar8 < *pbVar2" identifier = (binary_expression "(byte)*pcVar8 < *pbVar2" (binary_expression "(byte)*pcVar8" (parenthesized_expression "(byte)" ( identifier )) * identifier) < (pointer_expression "*pbVar2" * identifier))) ;) (expression_statement "bVar13 = *pcVar8 == *pbVar2;" (assignment_expression "bVar13 = *pcVar8 == *pbVar2" identifier = (binary_expression "*pcVar8 == *pbVar2" (pointer_expression "*pcVar8" * identifier) == (pointer_expression "*pbVar2" * identifier))) ;) (expression_statement "pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;" (assignment_expression "pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1" identifier = (binary_expression "pcVar8 + (uint)bVar16 * -2 + 1" (binary_expression "pcVar8 + (uint)bVar16 * -2" identifier + (binary_expression "(uint)bVar16 * -2" (cast_expression "(uint)bVar16" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;" (assignment_expression "pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1" identifier = (binary_expression "pbVar2 + (uint)bVar16 * -2 + 1" (binary_expression "pbVar2 + (uint)bVar16 * -2" identifier + (binary_expression "(uint)bVar16 * -2" (cast_expression "(uint)bVar16" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar13)" ( identifier )) ;) (if_statement "if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;" if (parenthesized_expression "((!bVar14 && !bVar13) == bVar14)" ( (binary_expression "(!bVar14 && !bVar13) == bVar14" (parenthesized_expression "(!bVar14 && !bVar13)" ( (binary_expression "!bVar14 && !bVar13" (unary_expression "!bVar14" ! identifier) && (unary_expression "!bVar13" ! identifier)) )) == identifier) )) (goto_statement "goto LAB_0001fb20;" goto statement_identifier ;)) })) (expression_statement "sVar4 = strlen(local_b0);" (assignment_expression "sVar4 = strlen(local_b0)" identifier = (call_expression "strlen(local_b0)" identifier (argument_list "(local_b0)" ( identifier )))) ;) (expression_statement "sVar7 = strlen(pcVar1);" (assignment_expression "sVar7 = strlen(pcVar1)" identifier = (call_expression "strlen(pcVar1)" identifier (argument_list "(pcVar1)" ( identifier )))) ;) (expression_statement "pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);" (assignment_expression "pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7)" identifier = (cast_expression "(char *)FUN_0003da70(sVar4 + 1 + sVar7)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0003da70(sVar4 + 1 + sVar7)" identifier (argument_list "(sVar4 + 1 + sVar7)" ( (binary_expression "sVar4 + 1 + sVar7" (binary_expression "sVar4 + 1" identifier + number_literal) + identifier) ))))) ;) (expression_statement "__sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);" (call_expression "__sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1)" identifier (argument_list "(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1)" ( identifier , number_literal , number_literal , (string_literal ""%s%s"" " string_content ") , identifier , identifier ))) ;) (if_statement "if (DAT_0007b614 == (char *)0x0) {\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }\n        else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }" if (parenthesized_expression "(DAT_0007b614 == (char *)0x0)" ( (binary_expression "DAT_0007b614 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }" { (labeled_statement "LAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }" statement_identifier : (if_statement "if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }" if (parenthesized_expression "(param_2 == '\0')" ( (binary_expression "param_2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }" { (if_statement "if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }" if (parenthesized_expression "(*pcVar8 == '~')" ( (binary_expression "*pcVar8 == '~'" (pointer_expression "*pcVar8" * identifier) == (char_literal "'~'" ' character ')) )) (compound_statement "{\n              pcVar12 = (char *)FUN_0001a620();\n            }" { (expression_statement "pcVar12 = (char *)FUN_0001a620();" (assignment_expression "pcVar12 = (char *)FUN_0001a620()" identifier = (cast_expression "(char *)FUN_0001a620()" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0001a620()" identifier (argument_list "()" ( ))))) ;) }) (else_clause "else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }" else (compound_statement "{\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }" { (expression_statement "pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);" (assignment_expression "pcVar12 = (char *)FUN_0003dbd0(0,pcVar8)" identifier = (cast_expression "(char *)FUN_0003dbd0(0,pcVar8)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0003dbd0(0,pcVar8)" identifier (argument_list "(0,pcVar8)" ( number_literal , identifier ))))) ;) }))) (expression_statement "iVar6 = __xstat64(3,pcVar12,&local_80);" (assignment_expression "iVar6 = __xstat64(3,pcVar12,&local_80)" identifier = (call_expression "__xstat64(3,pcVar12,&local_80)" identifier (argument_list "(3,pcVar12,&local_80)" ( number_literal , identifier , (pointer_expression "&local_80" & identifier) )))) ;) (if_statement "if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }" if (parenthesized_expression "((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000))" ( (binary_expression "(iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)" (parenthesized_expression "(iVar6 == -1)" ( (binary_expression "iVar6 == -1" identifier == number_literal) )) || (parenthesized_expression "((local_80.st_mode & 0xf000) != 0x4000)" ( (binary_expression "(local_80.st_mode & 0xf000) != 0x4000" (parenthesized_expression "(local_80.st_mode & 0xf000)" ( (binary_expression "local_80.st_mode & 0xf000" (field_expression "local_80.st_mode" identifier . field_identifier) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }" { (expression_statement "free(pcVar12);" (call_expression "free(pcVar12)" identifier (argument_list "(pcVar12)" ( identifier ))) ;) (goto_statement "goto LAB_0001fc27;" goto statement_identifier ;) })) (expression_statement "free(pcVar12);" (call_expression "free(pcVar12)" identifier (argument_list "(pcVar12)" ( identifier ))) ;) }))) (expression_statement "free(pcVar8);" (call_expression "free(pcVar8)" identifier (argument_list "(pcVar8)" ( identifier ))) ;) (expression_statement "local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);" (assignment_expression "local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4)" identifier = (call_expression "FUN_0003dad0(local_ac,*param_3 * 4 + 4)" identifier (argument_list "(local_ac,*param_3 * 4 + 4)" ( identifier , (binary_expression "*param_3 * 4 + 4" (binary_expression "*param_3 * 4" (pointer_expression "*param_3" * identifier) * number_literal) + number_literal) )))) ;) (expression_statement "iVar6 = *param_3;" (assignment_expression "iVar6 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (expression_statement "uVar11 = FUN_0003dbd0(0,pcVar1);" (assignment_expression "uVar11 = FUN_0003dbd0(0,pcVar1)" identifier = (call_expression "FUN_0003dbd0(0,pcVar1)" identifier (argument_list "(0,pcVar1)" ( number_literal , identifier )))) ;) (expression_statement "*(undefined4 *)(local_ac + iVar6 * 4) = uVar11;" (assignment_expression "*(undefined4 *)(local_ac + iVar6 * 4) = uVar11" (pointer_expression "*(undefined4 *)(local_ac + iVar6 * 4)" * (cast_expression "(undefined4 *)(local_ac + iVar6 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_ac + iVar6 * 4)" ( (binary_expression "local_ac + iVar6 * 4" identifier + (binary_expression "iVar6 * 4" identifier * number_literal)) )))) = identifier) ;) (expression_statement "*param_3 = *param_3 + 1;" (assignment_expression "*param_3 = *param_3 + 1" (pointer_expression "*param_3" * identifier) = (binary_expression "*param_3 + 1" (pointer_expression "*param_3" * identifier) + number_literal)) ;) }) (else_clause "else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }" else (compound_statement "{\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }" { (expression_statement "__haystack = (char *)FUN_0001bac0(pcVar8);" (assignment_expression "__haystack = (char *)FUN_0001bac0(pcVar8)" identifier = (cast_expression "(char *)FUN_0001bac0(pcVar8)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0001bac0(pcVar8)" identifier (argument_list "(pcVar8)" ( identifier ))))) ;) (expression_statement "pcVar12 = DAT_0007b614;" (assignment_expression "pcVar12 = DAT_0007b614" identifier = identifier) ;) (if_statement "if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }" if (parenthesized_expression "(__haystack != (char *)0x0)" ( (binary_expression "__haystack != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }" { (expression_statement "pcVar9 = strstr(__haystack,DAT_0007b614);" (assignment_expression "pcVar9 = strstr(__haystack,DAT_0007b614)" identifier = (call_expression "strstr(__haystack,DAT_0007b614)" identifier (argument_list "(__haystack,DAT_0007b614)" ( identifier , identifier )))) ;) (expression_statement "pcVar10 = strstr(pcVar12,__haystack);" (assignment_expression "pcVar10 = strstr(pcVar12,__haystack)" identifier = (call_expression "strstr(pcVar12,__haystack)" identifier (argument_list "(pcVar12,__haystack)" ( identifier , identifier )))) ;) (expression_statement "free(__haystack);" (call_expression "free(__haystack)" identifier (argument_list "(__haystack)" ( identifier ))) ;) (if_statement "if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;" if (parenthesized_expression "((__haystack == pcVar9) || (pcVar12 == pcVar10))" ( (binary_expression "(__haystack == pcVar9) || (pcVar12 == pcVar10)" (parenthesized_expression "(__haystack == pcVar9)" ( (binary_expression "__haystack == pcVar9" identifier == identifier) )) || (parenthesized_expression "(pcVar12 == pcVar10)" ( (binary_expression "pcVar12 == pcVar10" identifier == identifier) ))) )) (goto_statement "goto LAB_0001fc60;" goto statement_identifier ;)) })) (labeled_statement "LAB_0001fc27:\n          free(pcVar8);" statement_identifier : (expression_statement "free(pcVar8);" (call_expression "free(pcVar8)" identifier (argument_list "(pcVar8)" ( identifier ))) ;)) }))) })) }) while (parenthesized_expression "( true )" ( true )) ;)) })) (expression_statement "beep();" (call_expression "beep()" identifier (argument_list "()" ( ))) ;) (expression_statement "free(local_bc);" (call_expression "free(local_bc)" identifier (argument_list "(local_bc)" ( identifier ))) ;) (expression_statement "free(local_b0);" (call_expression "free(local_b0)" identifier (argument_list "(local_b0)" ( identifier ))) ;) (expression_statement "local_ac = 0;" (assignment_expression "local_ac = 0" identifier = number_literal) ;) (labeled_statement "LAB_0001fcd3:\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return local_ac;\n  }" statement_identifier : (if_statement "if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return local_ac;\n  }" if (parenthesized_expression "(local_20 == *(int *)(in_GS_OFFSET + 0x14))" ( (binary_expression "local_20 == *(int *)(in_GS_OFFSET + 0x14)" identifier == (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) )) (compound_statement "{\n    return local_ac;\n  }" { (return_statement "return local_ac;" return identifier ;) }))) (expression_statement "FUN_0005a8b0();" (call_expression "FUN_0005a8b0()" identifier (argument_list "()" ( ))) ;) (labeled_statement "LAB_0001fcb0:\n  closedir(__dirp);" statement_identifier : (expression_statement "closedir(__dirp);" (call_expression "closedir(__dirp)" identifier (argument_list "(__dirp)" ( identifier ))) ;)) (expression_statement "free(local_b0);" (call_expression "free(local_b0)" identifier (argument_list "(local_b0)" ( identifier ))) ;) (expression_statement "free(local_bc);" (call_expression "free(local_bc)" identifier (argument_list "(local_bc)" ( identifier ))) ;) (goto_statement "goto LAB_0001fcd3;" goto statement_identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( LIT , IDENT ))))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ IDENT ]) = LIT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT) , LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( LIT , IDENT ))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( LIT , (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (char_literal ' escape_sequence ')) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( ))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( LIT , IDENT ))))) ;) }))) (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 ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , (binary_expression (binary_expression IDENT + LIT) + IDENT) ))))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT , LIT , (string_literal " string_content ") , IDENT , IDENT ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (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 *)) ) IDENT) )))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (labeled_statement statement_identifier : (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (field_expression IDENT -> field_identifier)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT) , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) < LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) == LIT)) ;) (if_statement if (parenthesized_expression ( (unary_expression ! IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression & IDENT)) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * IDENT) < (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) == (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) }) while (parenthesized_expression ( IDENT )) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (unary_expression ! IDENT) && (unary_expression ! IDENT)) )) == IDENT)) ;) (if_statement if (parenthesized_expression ( IDENT )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * IDENT) < (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) == (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) }) while (parenthesized_expression ( IDENT )) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (unary_expression ! IDENT) && (unary_expression ! IDENT)) )) == IDENT) )) (goto_statement goto statement_identifier ;)) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( (binary_expression (binary_expression IDENT + LIT) + IDENT) ))))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT , LIT , (string_literal " string_content ") , IDENT , IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == (char_literal ' character ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( ))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( LIT , IDENT ))))) ;) }))) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , IDENT , (pointer_expression & IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) || (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (field_expression IDENT . field_identifier) & LIT) )) != LIT) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) }))) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (binary_expression (binary_expression (pointer_expression * IDENT) * LIT) + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , IDENT )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) + LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT ))))) ;) (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 { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == IDENT) )) || (parenthesized_expression ( (binary_expression IDENT == IDENT) ))) )) (goto_statement goto statement_identifier ;)) })) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;)) }))) })) }) while (parenthesized_expression ( BOOL )) ;)) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (return_statement return IDENT ;) }))) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;)) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (goto_statement goto statement_identifier ;) })))
(function_definition "int FUN_0001f9d0(undefined4 param_1,char param_2,int *param_3,int param_4)\n\n{\n  char *pcVar1;\n  byte *pbVar2;\n  size_t sVar3;\n  size_t sVar4;\n  DIR *__dirp;\n  dirent64 *pdVar5;\n  int iVar6;\n  size_t sVar7;\n  char *pcVar8;\n  char *__haystack;\n  char *pcVar9;\n  char *pcVar10;\n  undefined4 uVar11;\n  char *pcVar12;\n  int in_GS_OFFSET;\n  bool bVar13;\n  bool bVar14;\n  bool bVar15;\n  byte bVar16;\n  byte *local_bc;\n  char *local_b0;\n  int local_ac;\n  stat64 local_80;\n  int local_20;\n  undefined4 uStack_14;\n  \n  bVar16 = 0;\n  uStack_14 = 0x1f9d9;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  local_bc = (byte *)FUN_0003dbd0(0,param_1);\n  *param_3 = 0;\n  local_bc[param_4] = 0;\n  pcVar1 = strrchr((char *)local_bc,0x2f);\n  if (pcVar1 == (char *)0x0) {\n    local_b0 = (char *)FUN_0003dbd0(0,DAT_0007b674);\n  }\n  else {\n    pbVar2 = (byte *)FUN_0003dbd0(0,pcVar1 + 1);\n    pcVar1[1] = '\0';\n    if (*local_bc == 0x7e) {\n      local_b0 = (char *)FUN_0001a620();\n    }\n    else {\n      local_b0 = (char *)FUN_0003dbd0(0,local_bc);\n    }\n    if (*local_b0 != '/') {\n      sVar3 = strlen(DAT_0007b674);\n      sVar4 = strlen((char *)local_bc);\n      local_b0 = (char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4);\n      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc);\n    }\n    free(local_bc);\n    local_bc = pbVar2;\n  }\n  __dirp = opendir(local_b0);\n  if (__dirp != (DIR *)0x0) {\n    sVar3 = strlen((char *)local_bc);\n    local_ac = 0;\nLAB_0001fb20:\n    do {\n      pdVar5 = readdir64(__dirp);\n      if (pdVar5 == (dirent64 *)0x0) goto LAB_0001fcb0;\n      pcVar1 = pdVar5->d_name;\n      iVar6 = strncmp(pcVar1,(char *)local_bc,sVar3);\n      if (iVar6 == 0) {\n        bVar13 = *local_bc < 0x2e;\n        bVar15 = *local_bc == 0x2e;\n        if (!bVar15) {\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }\n        sVar4 = strlen(local_b0);\n        sVar7 = strlen(pcVar1);\n        pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);\n        __sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);\n        if (DAT_0007b614 == (char *)0x0) {\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }\n        else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }\n      }\n    } while( true );\n  }\n  beep();\n  free(local_bc);\n  free(local_b0);\n  local_ac = 0;\nLAB_0001fcd3:\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return local_ac;\n  }\n                    \n  FUN_0005a8b0();\nLAB_0001fcb0:\n  closedir(__dirp);\n  free(local_b0);\n  free(local_bc);\n  goto LAB_0001fcd3;\n}" (primitive_type "int") (function_declarator "FUN_0001f9d0(undefined4 param_1,char param_2,int *param_3,int param_4)" (identifier "FUN_0001f9d0") (parameter_list "(undefined4 param_1,char param_2,int *param_3,int param_4)" (( "(") (parameter_declaration "undefined4 param_1" (type_identifier "undefined4") (identifier "param_1")) (, ",") (parameter_declaration "char param_2" (primitive_type "char") (identifier "param_2")) (, ",") (parameter_declaration "int *param_3" (primitive_type "int") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "int param_4" (primitive_type "int") (identifier "param_4")) () ")"))) (compound_statement "{\n  char *pcVar1;\n  byte *pbVar2;\n  size_t sVar3;\n  size_t sVar4;\n  DIR *__dirp;\n  dirent64 *pdVar5;\n  int iVar6;\n  size_t sVar7;\n  char *pcVar8;\n  char *__haystack;\n  char *pcVar9;\n  char *pcVar10;\n  undefined4 uVar11;\n  char *pcVar12;\n  int in_GS_OFFSET;\n  bool bVar13;\n  bool bVar14;\n  bool bVar15;\n  byte bVar16;\n  byte *local_bc;\n  char *local_b0;\n  int local_ac;\n  stat64 local_80;\n  int local_20;\n  undefined4 uStack_14;\n  \n  bVar16 = 0;\n  uStack_14 = 0x1f9d9;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  local_bc = (byte *)FUN_0003dbd0(0,param_1);\n  *param_3 = 0;\n  local_bc[param_4] = 0;\n  pcVar1 = strrchr((char *)local_bc,0x2f);\n  if (pcVar1 == (char *)0x0) {\n    local_b0 = (char *)FUN_0003dbd0(0,DAT_0007b674);\n  }\n  else {\n    pbVar2 = (byte *)FUN_0003dbd0(0,pcVar1 + 1);\n    pcVar1[1] = '\0';\n    if (*local_bc == 0x7e) {\n      local_b0 = (char *)FUN_0001a620();\n    }\n    else {\n      local_b0 = (char *)FUN_0003dbd0(0,local_bc);\n    }\n    if (*local_b0 != '/') {\n      sVar3 = strlen(DAT_0007b674);\n      sVar4 = strlen((char *)local_bc);\n      local_b0 = (char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4);\n      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc);\n    }\n    free(local_bc);\n    local_bc = pbVar2;\n  }\n  __dirp = opendir(local_b0);\n  if (__dirp != (DIR *)0x0) {\n    sVar3 = strlen((char *)local_bc);\n    local_ac = 0;\nLAB_0001fb20:\n    do {\n      pdVar5 = readdir64(__dirp);\n      if (pdVar5 == (dirent64 *)0x0) goto LAB_0001fcb0;\n      pcVar1 = pdVar5->d_name;\n      iVar6 = strncmp(pcVar1,(char *)local_bc,sVar3);\n      if (iVar6 == 0) {\n        bVar13 = *local_bc < 0x2e;\n        bVar15 = *local_bc == 0x2e;\n        if (!bVar15) {\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }\n        sVar4 = strlen(local_b0);\n        sVar7 = strlen(pcVar1);\n        pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);\n        __sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);\n        if (DAT_0007b614 == (char *)0x0) {\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }\n        else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }\n      }\n    } while( true );\n  }\n  beep();\n  free(local_bc);\n  free(local_b0);\n  local_ac = 0;\nLAB_0001fcd3:\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return local_ac;\n  }\n                    \n  FUN_0005a8b0();\nLAB_0001fcb0:\n  closedir(__dirp);\n  free(local_b0);\n  free(local_bc);\n  goto LAB_0001fcd3;\n}" ({ "{") (declaration "char *pcVar1;" (primitive_type "char") (pointer_declarator "*pcVar1" (* "*") (identifier "pcVar1")) (; ";")) (declaration "byte *pbVar2;" (type_identifier "byte") (pointer_declarator "*pbVar2" (* "*") (identifier "pbVar2")) (; ";")) (declaration "size_t sVar3;" (primitive_type "size_t") (identifier "sVar3") (; ";")) (declaration "size_t sVar4;" (primitive_type "size_t") (identifier "sVar4") (; ";")) (declaration "DIR *__dirp;" (type_identifier "DIR") (pointer_declarator "*__dirp" (* "*") (identifier "__dirp")) (; ";")) (declaration "dirent64 *pdVar5;" (type_identifier "dirent64") (pointer_declarator "*pdVar5" (* "*") (identifier "pdVar5")) (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "size_t sVar7;" (primitive_type "size_t") (identifier "sVar7") (; ";")) (declaration "char *pcVar8;" (primitive_type "char") (pointer_declarator "*pcVar8" (* "*") (identifier "pcVar8")) (; ";")) (declaration "char *__haystack;" (primitive_type "char") (pointer_declarator "*__haystack" (* "*") (identifier "__haystack")) (; ";")) (declaration "char *pcVar9;" (primitive_type "char") (pointer_declarator "*pcVar9" (* "*") (identifier "pcVar9")) (; ";")) (declaration "char *pcVar10;" (primitive_type "char") (pointer_declarator "*pcVar10" (* "*") (identifier "pcVar10")) (; ";")) (declaration "undefined4 uVar11;" (type_identifier "undefined4") (identifier "uVar11") (; ";")) (declaration "char *pcVar12;" (primitive_type "char") (pointer_declarator "*pcVar12" (* "*") (identifier "pcVar12")) (; ";")) (declaration "int in_GS_OFFSET;" (primitive_type "int") (identifier "in_GS_OFFSET") (; ";")) (declaration "bool bVar13;" (primitive_type "bool") (identifier "bVar13") (; ";")) (declaration "bool bVar14;" (primitive_type "bool") (identifier "bVar14") (; ";")) (declaration "bool bVar15;" (primitive_type "bool") (identifier "bVar15") (; ";")) (declaration "byte bVar16;" (type_identifier "byte") (identifier "bVar16") (; ";")) (declaration "byte *local_bc;" (type_identifier "byte") (pointer_declarator "*local_bc" (* "*") (identifier "local_bc")) (; ";")) (declaration "char *local_b0;" (primitive_type "char") (pointer_declarator "*local_b0" (* "*") (identifier "local_b0")) (; ";")) (declaration "int local_ac;" (primitive_type "int") (identifier "local_ac") (; ";")) (declaration "stat64 local_80;" (type_identifier "stat64") (identifier "local_80") (; ";")) (declaration "int local_20;" (primitive_type "int") (identifier "local_20") (; ";")) (declaration "undefined4 uStack_14;" (type_identifier "undefined4") (identifier "uStack_14") (; ";")) (expression_statement "bVar16 = 0;" (assignment_expression "bVar16 = 0" (identifier "bVar16") (= "=") (number_literal "0")) (; ";")) (expression_statement "uStack_14 = 0x1f9d9;" (assignment_expression "uStack_14 = 0x1f9d9" (identifier "uStack_14") (= "=") (number_literal "0x1f9d9")) (; ";")) (expression_statement "local_20 = *(int *)(in_GS_OFFSET + 0x14);" (assignment_expression "local_20 = *(int *)(in_GS_OFFSET + 0x14)" (identifier "local_20") (= "=") (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" (* "*") (cast_expression "(int *)(in_GS_OFFSET + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_GS_OFFSET + 0x14)" (( "(") (binary_expression "in_GS_OFFSET + 0x14" (identifier "in_GS_OFFSET") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "local_bc = (byte *)FUN_0003dbd0(0,param_1);" (assignment_expression "local_bc = (byte *)FUN_0003dbd0(0,param_1)" (identifier "local_bc") (= "=") (cast_expression "(byte *)FUN_0003dbd0(0,param_1)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0003dbd0(0,param_1)" (identifier "FUN_0003dbd0") (argument_list "(0,param_1)" (( "(") (number_literal "0") (, ",") (identifier "param_1") () ")"))))) (; ";")) (expression_statement "*param_3 = 0;" (assignment_expression "*param_3 = 0" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (= "=") (number_literal "0")) (; ";")) (expression_statement "local_bc[param_4] = 0;" (assignment_expression "local_bc[param_4] = 0" (subscript_expression "local_bc[param_4]" (identifier "local_bc") ([ "[") (identifier "param_4") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "pcVar1 = strrchr((char *)local_bc,0x2f);" (assignment_expression "pcVar1 = strrchr((char *)local_bc,0x2f)" (identifier "pcVar1") (= "=") (call_expression "strrchr((char *)local_bc,0x2f)" (identifier "strrchr") (argument_list "((char *)local_bc,0x2f)" (( "(") (cast_expression "(char *)local_bc" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "local_bc")) (, ",") (number_literal "0x2f") () ")")))) (; ";")) (if_statement "if (pcVar1 == (char *)0x0) {\n    local_b0 = (char *)FUN_0003dbd0(0,DAT_0007b674);\n  }\n  else {\n    pbVar2 = (byte *)FUN_0003dbd0(0,pcVar1 + 1);\n    pcVar1[1] = '\0';\n    if (*local_bc == 0x7e) {\n      local_b0 = (char *)FUN_0001a620();\n    }\n    else {\n      local_b0 = (char *)FUN_0003dbd0(0,local_bc);\n    }\n    if (*local_b0 != '/') {\n      sVar3 = strlen(DAT_0007b674);\n      sVar4 = strlen((char *)local_bc);\n      local_b0 = (char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4);\n      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc);\n    }\n    free(local_bc);\n    local_bc = pbVar2;\n  }" (if "if") (parenthesized_expression "(pcVar1 == (char *)0x0)" (( "(") (binary_expression "pcVar1 == (char *)0x0" (identifier "pcVar1") (== "==") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    local_b0 = (char *)FUN_0003dbd0(0,DAT_0007b674);\n  }" ({ "{") (expression_statement "local_b0 = (char *)FUN_0003dbd0(0,DAT_0007b674);" (assignment_expression "local_b0 = (char *)FUN_0003dbd0(0,DAT_0007b674)" (identifier "local_b0") (= "=") (cast_expression "(char *)FUN_0003dbd0(0,DAT_0007b674)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0003dbd0(0,DAT_0007b674)" (identifier "FUN_0003dbd0") (argument_list "(0,DAT_0007b674)" (( "(") (number_literal "0") (, ",") (identifier "DAT_0007b674") () ")"))))) (; ";")) (} "}")) (else_clause "else {\n    pbVar2 = (byte *)FUN_0003dbd0(0,pcVar1 + 1);\n    pcVar1[1] = '\0';\n    if (*local_bc == 0x7e) {\n      local_b0 = (char *)FUN_0001a620();\n    }\n    else {\n      local_b0 = (char *)FUN_0003dbd0(0,local_bc);\n    }\n    if (*local_b0 != '/') {\n      sVar3 = strlen(DAT_0007b674);\n      sVar4 = strlen((char *)local_bc);\n      local_b0 = (char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4);\n      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc);\n    }\n    free(local_bc);\n    local_bc = pbVar2;\n  }" (else "else") (compound_statement "{\n    pbVar2 = (byte *)FUN_0003dbd0(0,pcVar1 + 1);\n    pcVar1[1] = '\0';\n    if (*local_bc == 0x7e) {\n      local_b0 = (char *)FUN_0001a620();\n    }\n    else {\n      local_b0 = (char *)FUN_0003dbd0(0,local_bc);\n    }\n    if (*local_b0 != '/') {\n      sVar3 = strlen(DAT_0007b674);\n      sVar4 = strlen((char *)local_bc);\n      local_b0 = (char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4);\n      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc);\n    }\n    free(local_bc);\n    local_bc = pbVar2;\n  }" ({ "{") (expression_statement "pbVar2 = (byte *)FUN_0003dbd0(0,pcVar1 + 1);" (assignment_expression "pbVar2 = (byte *)FUN_0003dbd0(0,pcVar1 + 1)" (identifier "pbVar2") (= "=") (cast_expression "(byte *)FUN_0003dbd0(0,pcVar1 + 1)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0003dbd0(0,pcVar1 + 1)" (identifier "FUN_0003dbd0") (argument_list "(0,pcVar1 + 1)" (( "(") (number_literal "0") (, ",") (binary_expression "pcVar1 + 1" (identifier "pcVar1") (+ "+") (number_literal "1")) () ")"))))) (; ";")) (expression_statement "pcVar1[1] = '\0';" (assignment_expression "pcVar1[1] = '\0'" (subscript_expression "pcVar1[1]" (identifier "pcVar1") ([ "[") (number_literal "1") (] "]")) (= "=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) (; ";")) (if_statement "if (*local_bc == 0x7e) {\n      local_b0 = (char *)FUN_0001a620();\n    }\n    else {\n      local_b0 = (char *)FUN_0003dbd0(0,local_bc);\n    }" (if "if") (parenthesized_expression "(*local_bc == 0x7e)" (( "(") (binary_expression "*local_bc == 0x7e" (pointer_expression "*local_bc" (* "*") (identifier "local_bc")) (== "==") (number_literal "0x7e")) () ")")) (compound_statement "{\n      local_b0 = (char *)FUN_0001a620();\n    }" ({ "{") (expression_statement "local_b0 = (char *)FUN_0001a620();" (assignment_expression "local_b0 = (char *)FUN_0001a620()" (identifier "local_b0") (= "=") (cast_expression "(char *)FUN_0001a620()" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0001a620()" (identifier "FUN_0001a620") (argument_list "()" (( "(") () ")"))))) (; ";")) (} "}")) (else_clause "else {\n      local_b0 = (char *)FUN_0003dbd0(0,local_bc);\n    }" (else "else") (compound_statement "{\n      local_b0 = (char *)FUN_0003dbd0(0,local_bc);\n    }" ({ "{") (expression_statement "local_b0 = (char *)FUN_0003dbd0(0,local_bc);" (assignment_expression "local_b0 = (char *)FUN_0003dbd0(0,local_bc)" (identifier "local_b0") (= "=") (cast_expression "(char *)FUN_0003dbd0(0,local_bc)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0003dbd0(0,local_bc)" (identifier "FUN_0003dbd0") (argument_list "(0,local_bc)" (( "(") (number_literal "0") (, ",") (identifier "local_bc") () ")"))))) (; ";")) (} "}")))) (if_statement "if (*local_b0 != '/') {\n      sVar3 = strlen(DAT_0007b674);\n      sVar4 = strlen((char *)local_bc);\n      local_b0 = (char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4);\n      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc);\n    }" (if "if") (parenthesized_expression "(*local_b0 != '/')" (( "(") (binary_expression "*local_b0 != '/'" (pointer_expression "*local_b0" (* "*") (identifier "local_b0")) (!= "!=") (char_literal "'/'" (' "'") (character "/") (' "'"))) () ")")) (compound_statement "{\n      sVar3 = strlen(DAT_0007b674);\n      sVar4 = strlen((char *)local_bc);\n      local_b0 = (char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4);\n      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc);\n    }" ({ "{") (expression_statement "sVar3 = strlen(DAT_0007b674);" (assignment_expression "sVar3 = strlen(DAT_0007b674)" (identifier "sVar3") (= "=") (call_expression "strlen(DAT_0007b674)" (identifier "strlen") (argument_list "(DAT_0007b674)" (( "(") (identifier "DAT_0007b674") () ")")))) (; ";")) (expression_statement "sVar4 = strlen((char *)local_bc);" (assignment_expression "sVar4 = strlen((char *)local_bc)" (identifier "sVar4") (= "=") (call_expression "strlen((char *)local_bc)" (identifier "strlen") (argument_list "((char *)local_bc)" (( "(") (cast_expression "(char *)local_bc" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "local_bc")) () ")")))) (; ";")) (expression_statement "local_b0 = (char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4);" (assignment_expression "local_b0 = (char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4)" (identifier "local_b0") (= "=") (cast_expression "(char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0003dad0(local_b0,sVar3 + 1 + sVar4)" (identifier "FUN_0003dad0") (argument_list "(local_b0,sVar3 + 1 + sVar4)" (( "(") (identifier "local_b0") (, ",") (binary_expression "sVar3 + 1 + sVar4" (binary_expression "sVar3 + 1" (identifier "sVar3") (+ "+") (number_literal "1")) (+ "+") (identifier "sVar4")) () ")"))))) (; ";")) (expression_statement "__sprintf_chk(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc);" (call_expression "__sprintf_chk(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc)" (identifier "__sprintf_chk") (argument_list "(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc)" (( "(") (identifier "local_b0") (, ",") (number_literal "1") (, ",") (number_literal "0xffffffff") (, ",") (string_literal ""%s%s"" (" """) (string_content "%s%s") (" """)) (, ",") (identifier "DAT_0007b674") (, ",") (identifier "local_bc") () ")"))) (; ";")) (} "}"))) (expression_statement "free(local_bc);" (call_expression "free(local_bc)" (identifier "free") (argument_list "(local_bc)" (( "(") (identifier "local_bc") () ")"))) (; ";")) (expression_statement "local_bc = pbVar2;" (assignment_expression "local_bc = pbVar2" (identifier "local_bc") (= "=") (identifier "pbVar2")) (; ";")) (} "}")))) (expression_statement "__dirp = opendir(local_b0);" (assignment_expression "__dirp = opendir(local_b0)" (identifier "__dirp") (= "=") (call_expression "opendir(local_b0)" (identifier "opendir") (argument_list "(local_b0)" (( "(") (identifier "local_b0") () ")")))) (; ";")) (if_statement "if (__dirp != (DIR *)0x0) {\n    sVar3 = strlen((char *)local_bc);\n    local_ac = 0;\nLAB_0001fb20:\n    do {\n      pdVar5 = readdir64(__dirp);\n      if (pdVar5 == (dirent64 *)0x0) goto LAB_0001fcb0;\n      pcVar1 = pdVar5->d_name;\n      iVar6 = strncmp(pcVar1,(char *)local_bc,sVar3);\n      if (iVar6 == 0) {\n        bVar13 = *local_bc < 0x2e;\n        bVar15 = *local_bc == 0x2e;\n        if (!bVar15) {\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }\n        sVar4 = strlen(local_b0);\n        sVar7 = strlen(pcVar1);\n        pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);\n        __sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);\n        if (DAT_0007b614 == (char *)0x0) {\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }\n        else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }\n      }\n    } while( true );\n  }" (if "if") (parenthesized_expression "(__dirp != (DIR *)0x0)" (( "(") (binary_expression "__dirp != (DIR *)0x0" (identifier "__dirp") (!= "!=") (cast_expression "(DIR *)0x0" (( "(") (type_descriptor "DIR *" (type_identifier "DIR") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    sVar3 = strlen((char *)local_bc);\n    local_ac = 0;\nLAB_0001fb20:\n    do {\n      pdVar5 = readdir64(__dirp);\n      if (pdVar5 == (dirent64 *)0x0) goto LAB_0001fcb0;\n      pcVar1 = pdVar5->d_name;\n      iVar6 = strncmp(pcVar1,(char *)local_bc,sVar3);\n      if (iVar6 == 0) {\n        bVar13 = *local_bc < 0x2e;\n        bVar15 = *local_bc == 0x2e;\n        if (!bVar15) {\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }\n        sVar4 = strlen(local_b0);\n        sVar7 = strlen(pcVar1);\n        pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);\n        __sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);\n        if (DAT_0007b614 == (char *)0x0) {\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }\n        else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }\n      }\n    } while( true );\n  }" ({ "{") (expression_statement "sVar3 = strlen((char *)local_bc);" (assignment_expression "sVar3 = strlen((char *)local_bc)" (identifier "sVar3") (= "=") (call_expression "strlen((char *)local_bc)" (identifier "strlen") (argument_list "((char *)local_bc)" (( "(") (cast_expression "(char *)local_bc" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "local_bc")) () ")")))) (; ";")) (expression_statement "local_ac = 0;" (assignment_expression "local_ac = 0" (identifier "local_ac") (= "=") (number_literal "0")) (; ";")) (labeled_statement "LAB_0001fb20:\n    do {\n      pdVar5 = readdir64(__dirp);\n      if (pdVar5 == (dirent64 *)0x0) goto LAB_0001fcb0;\n      pcVar1 = pdVar5->d_name;\n      iVar6 = strncmp(pcVar1,(char *)local_bc,sVar3);\n      if (iVar6 == 0) {\n        bVar13 = *local_bc < 0x2e;\n        bVar15 = *local_bc == 0x2e;\n        if (!bVar15) {\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }\n        sVar4 = strlen(local_b0);\n        sVar7 = strlen(pcVar1);\n        pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);\n        __sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);\n        if (DAT_0007b614 == (char *)0x0) {\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }\n        else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }\n      }\n    } while( true );" (statement_identifier "LAB_0001fb20") (: ":") (do_statement "do {\n      pdVar5 = readdir64(__dirp);\n      if (pdVar5 == (dirent64 *)0x0) goto LAB_0001fcb0;\n      pcVar1 = pdVar5->d_name;\n      iVar6 = strncmp(pcVar1,(char *)local_bc,sVar3);\n      if (iVar6 == 0) {\n        bVar13 = *local_bc < 0x2e;\n        bVar15 = *local_bc == 0x2e;\n        if (!bVar15) {\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }\n        sVar4 = strlen(local_b0);\n        sVar7 = strlen(pcVar1);\n        pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);\n        __sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);\n        if (DAT_0007b614 == (char *)0x0) {\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }\n        else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }\n      }\n    } while( true );" (do "do") (compound_statement "{\n      pdVar5 = readdir64(__dirp);\n      if (pdVar5 == (dirent64 *)0x0) goto LAB_0001fcb0;\n      pcVar1 = pdVar5->d_name;\n      iVar6 = strncmp(pcVar1,(char *)local_bc,sVar3);\n      if (iVar6 == 0) {\n        bVar13 = *local_bc < 0x2e;\n        bVar15 = *local_bc == 0x2e;\n        if (!bVar15) {\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }\n        sVar4 = strlen(local_b0);\n        sVar7 = strlen(pcVar1);\n        pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);\n        __sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);\n        if (DAT_0007b614 == (char *)0x0) {\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }\n        else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }\n      }\n    }" ({ "{") (expression_statement "pdVar5 = readdir64(__dirp);" (assignment_expression "pdVar5 = readdir64(__dirp)" (identifier "pdVar5") (= "=") (call_expression "readdir64(__dirp)" (identifier "readdir64") (argument_list "(__dirp)" (( "(") (identifier "__dirp") () ")")))) (; ";")) (if_statement "if (pdVar5 == (dirent64 *)0x0) goto LAB_0001fcb0;" (if "if") (parenthesized_expression "(pdVar5 == (dirent64 *)0x0)" (( "(") (binary_expression "pdVar5 == (dirent64 *)0x0" (identifier "pdVar5") (== "==") (cast_expression "(dirent64 *)0x0" (( "(") (type_descriptor "dirent64 *" (type_identifier "dirent64") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (goto_statement "goto LAB_0001fcb0;" (goto "goto") (statement_identifier "LAB_0001fcb0") (; ";"))) (expression_statement "pcVar1 = pdVar5->d_name;" (assignment_expression "pcVar1 = pdVar5->d_name" (identifier "pcVar1") (= "=") (field_expression "pdVar5->d_name" (identifier "pdVar5") (-> "->") (field_identifier "d_name"))) (; ";")) (expression_statement "iVar6 = strncmp(pcVar1,(char *)local_bc,sVar3);" (assignment_expression "iVar6 = strncmp(pcVar1,(char *)local_bc,sVar3)" (identifier "iVar6") (= "=") (call_expression "strncmp(pcVar1,(char *)local_bc,sVar3)" (identifier "strncmp") (argument_list "(pcVar1,(char *)local_bc,sVar3)" (( "(") (identifier "pcVar1") (, ",") (cast_expression "(char *)local_bc" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "local_bc")) (, ",") (identifier "sVar3") () ")")))) (; ";")) (if_statement "if (iVar6 == 0) {\n        bVar13 = *local_bc < 0x2e;\n        bVar15 = *local_bc == 0x2e;\n        if (!bVar15) {\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }\n        sVar4 = strlen(local_b0);\n        sVar7 = strlen(pcVar1);\n        pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);\n        __sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);\n        if (DAT_0007b614 == (char *)0x0) {\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }\n        else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }\n      }" (if "if") (parenthesized_expression "(iVar6 == 0)" (( "(") (binary_expression "iVar6 == 0" (identifier "iVar6") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        bVar13 = *local_bc < 0x2e;\n        bVar15 = *local_bc == 0x2e;\n        if (!bVar15) {\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }\n        sVar4 = strlen(local_b0);\n        sVar7 = strlen(pcVar1);\n        pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);\n        __sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);\n        if (DAT_0007b614 == (char *)0x0) {\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }\n        else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }\n      }" ({ "{") (expression_statement "bVar13 = *local_bc < 0x2e;" (assignment_expression "bVar13 = *local_bc < 0x2e" (identifier "bVar13") (= "=") (binary_expression "*local_bc < 0x2e" (pointer_expression "*local_bc" (* "*") (identifier "local_bc")) (< "<") (number_literal "0x2e"))) (; ";")) (expression_statement "bVar15 = *local_bc == 0x2e;" (assignment_expression "bVar15 = *local_bc == 0x2e" (identifier "bVar15") (= "=") (binary_expression "*local_bc == 0x2e" (pointer_expression "*local_bc" (* "*") (identifier "local_bc")) (== "==") (number_literal "0x2e"))) (; ";")) (if_statement "if (!bVar15) {\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }" (if "if") (parenthesized_expression "(!bVar15)" (( "(") (unary_expression "!bVar15" (! "!") (identifier "bVar15")) () ")")) (compound_statement "{\n          iVar6 = 2;\n          pcVar8 = pcVar1;\n          pbVar2 = &DAT_0005c437;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);\n          bVar14 = false;\n          bVar13 = (!bVar13 && !bVar15) == bVar13;\n          if (bVar13) goto LAB_0001fb20;\n          iVar6 = 3;\n          pcVar8 = pcVar1;\n          pbVar2 = (byte *)0x60801;\n          do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);\n          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;\n        }" ({ "{") (expression_statement "iVar6 = 2;" (assignment_expression "iVar6 = 2" (identifier "iVar6") (= "=") (number_literal "2")) (; ";")) (expression_statement "pcVar8 = pcVar1;" (assignment_expression "pcVar8 = pcVar1" (identifier "pcVar8") (= "=") (identifier "pcVar1")) (; ";")) (expression_statement "pbVar2 = &DAT_0005c437;" (assignment_expression "pbVar2 = &DAT_0005c437" (identifier "pbVar2") (= "=") (pointer_expression "&DAT_0005c437" (& "&") (identifier "DAT_0005c437"))) (; ";")) (do_statement "do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar15);" (do "do") (compound_statement "{\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar13 = (byte)*pcVar8 < *pbVar2;\n            bVar15 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          }" ({ "{") (if_statement "if (iVar6 == 0) break;" (if "if") (parenthesized_expression "(iVar6 == 0)" (( "(") (binary_expression "iVar6 == 0" (identifier "iVar6") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "iVar6 = iVar6 + -1;" (assignment_expression "iVar6 = iVar6 + -1" (identifier "iVar6") (= "=") (binary_expression "iVar6 + -1" (identifier "iVar6") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "bVar13 = (byte)*pcVar8 < *pbVar2;" (assignment_expression "bVar13 = (byte)*pcVar8 < *pbVar2" (identifier "bVar13") (= "=") (binary_expression "(byte)*pcVar8 < *pbVar2" (binary_expression "(byte)*pcVar8" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (* "*") (identifier "pcVar8")) (< "<") (pointer_expression "*pbVar2" (* "*") (identifier "pbVar2")))) (; ";")) (expression_statement "bVar15 = *pcVar8 == *pbVar2;" (assignment_expression "bVar15 = *pcVar8 == *pbVar2" (identifier "bVar15") (= "=") (binary_expression "*pcVar8 == *pbVar2" (pointer_expression "*pcVar8" (* "*") (identifier "pcVar8")) (== "==") (pointer_expression "*pbVar2" (* "*") (identifier "pbVar2")))) (; ";")) (expression_statement "pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;" (assignment_expression "pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1" (identifier "pcVar8") (= "=") (binary_expression "pcVar8 + (uint)bVar16 * -2 + 1" (binary_expression "pcVar8 + (uint)bVar16 * -2" (identifier "pcVar8") (+ "+") (binary_expression "(uint)bVar16 * -2" (cast_expression "(uint)bVar16" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar16")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;" (assignment_expression "pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1" (identifier "pbVar2") (= "=") (binary_expression "pbVar2 + (uint)bVar16 * -2 + 1" (binary_expression "pbVar2 + (uint)bVar16 * -2" (identifier "pbVar2") (+ "+") (binary_expression "(uint)bVar16 * -2" (cast_expression "(uint)bVar16" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar16")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(bVar15)" (( "(") (identifier "bVar15") () ")")) (; ";")) (expression_statement "bVar14 = false;" (assignment_expression "bVar14 = false" (identifier "bVar14") (= "=") (false "false")) (; ";")) (expression_statement "bVar13 = (!bVar13 && !bVar15) == bVar13;" (assignment_expression "bVar13 = (!bVar13 && !bVar15) == bVar13" (identifier "bVar13") (= "=") (binary_expression "(!bVar13 && !bVar15) == bVar13" (parenthesized_expression "(!bVar13 && !bVar15)" (( "(") (binary_expression "!bVar13 && !bVar15" (unary_expression "!bVar13" (! "!") (identifier "bVar13")) (&& "&&") (unary_expression "!bVar15" (! "!") (identifier "bVar15"))) () ")")) (== "==") (identifier "bVar13"))) (; ";")) (if_statement "if (bVar13) goto LAB_0001fb20;" (if "if") (parenthesized_expression "(bVar13)" (( "(") (identifier "bVar13") () ")")) (goto_statement "goto LAB_0001fb20;" (goto "goto") (statement_identifier "LAB_0001fb20") (; ";"))) (expression_statement "iVar6 = 3;" (assignment_expression "iVar6 = 3" (identifier "iVar6") (= "=") (number_literal "3")) (; ";")) (expression_statement "pcVar8 = pcVar1;" (assignment_expression "pcVar8 = pcVar1" (identifier "pcVar8") (= "=") (identifier "pcVar1")) (; ";")) (expression_statement "pbVar2 = (byte *)0x60801;" (assignment_expression "pbVar2 = (byte *)0x60801" (identifier "pbVar2") (= "=") (cast_expression "(byte *)0x60801" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x60801"))) (; ";")) (do_statement "do {\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          } while (bVar13);" (do "do") (compound_statement "{\n            if (iVar6 == 0) break;\n            iVar6 = iVar6 + -1;\n            bVar14 = (byte)*pcVar8 < *pbVar2;\n            bVar13 = *pcVar8 == *pbVar2;\n            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;\n            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;\n          }" ({ "{") (if_statement "if (iVar6 == 0) break;" (if "if") (parenthesized_expression "(iVar6 == 0)" (( "(") (binary_expression "iVar6 == 0" (identifier "iVar6") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "iVar6 = iVar6 + -1;" (assignment_expression "iVar6 = iVar6 + -1" (identifier "iVar6") (= "=") (binary_expression "iVar6 + -1" (identifier "iVar6") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "bVar14 = (byte)*pcVar8 < *pbVar2;" (assignment_expression "bVar14 = (byte)*pcVar8 < *pbVar2" (identifier "bVar14") (= "=") (binary_expression "(byte)*pcVar8 < *pbVar2" (binary_expression "(byte)*pcVar8" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (* "*") (identifier "pcVar8")) (< "<") (pointer_expression "*pbVar2" (* "*") (identifier "pbVar2")))) (; ";")) (expression_statement "bVar13 = *pcVar8 == *pbVar2;" (assignment_expression "bVar13 = *pcVar8 == *pbVar2" (identifier "bVar13") (= "=") (binary_expression "*pcVar8 == *pbVar2" (pointer_expression "*pcVar8" (* "*") (identifier "pcVar8")) (== "==") (pointer_expression "*pbVar2" (* "*") (identifier "pbVar2")))) (; ";")) (expression_statement "pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;" (assignment_expression "pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1" (identifier "pcVar8") (= "=") (binary_expression "pcVar8 + (uint)bVar16 * -2 + 1" (binary_expression "pcVar8 + (uint)bVar16 * -2" (identifier "pcVar8") (+ "+") (binary_expression "(uint)bVar16 * -2" (cast_expression "(uint)bVar16" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar16")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;" (assignment_expression "pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1" (identifier "pbVar2") (= "=") (binary_expression "pbVar2 + (uint)bVar16 * -2 + 1" (binary_expression "pbVar2 + (uint)bVar16 * -2" (identifier "pbVar2") (+ "+") (binary_expression "(uint)bVar16 * -2" (cast_expression "(uint)bVar16" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar16")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(bVar13)" (( "(") (identifier "bVar13") () ")")) (; ";")) (if_statement "if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;" (if "if") (parenthesized_expression "((!bVar14 && !bVar13) == bVar14)" (( "(") (binary_expression "(!bVar14 && !bVar13) == bVar14" (parenthesized_expression "(!bVar14 && !bVar13)" (( "(") (binary_expression "!bVar14 && !bVar13" (unary_expression "!bVar14" (! "!") (identifier "bVar14")) (&& "&&") (unary_expression "!bVar13" (! "!") (identifier "bVar13"))) () ")")) (== "==") (identifier "bVar14")) () ")")) (goto_statement "goto LAB_0001fb20;" (goto "goto") (statement_identifier "LAB_0001fb20") (; ";"))) (} "}"))) (expression_statement "sVar4 = strlen(local_b0);" (assignment_expression "sVar4 = strlen(local_b0)" (identifier "sVar4") (= "=") (call_expression "strlen(local_b0)" (identifier "strlen") (argument_list "(local_b0)" (( "(") (identifier "local_b0") () ")")))) (; ";")) (expression_statement "sVar7 = strlen(pcVar1);" (assignment_expression "sVar7 = strlen(pcVar1)" (identifier "sVar7") (= "=") (call_expression "strlen(pcVar1)" (identifier "strlen") (argument_list "(pcVar1)" (( "(") (identifier "pcVar1") () ")")))) (; ";")) (expression_statement "pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);" (assignment_expression "pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7)" (identifier "pcVar8") (= "=") (cast_expression "(char *)FUN_0003da70(sVar4 + 1 + sVar7)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0003da70(sVar4 + 1 + sVar7)" (identifier "FUN_0003da70") (argument_list "(sVar4 + 1 + sVar7)" (( "(") (binary_expression "sVar4 + 1 + sVar7" (binary_expression "sVar4 + 1" (identifier "sVar4") (+ "+") (number_literal "1")) (+ "+") (identifier "sVar7")) () ")"))))) (; ";")) (expression_statement "__sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);" (call_expression "__sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1)" (identifier "__sprintf_chk") (argument_list "(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1)" (( "(") (identifier "pcVar8") (, ",") (number_literal "1") (, ",") (number_literal "0xffffffff") (, ",") (string_literal ""%s%s"" (" """) (string_content "%s%s") (" """)) (, ",") (identifier "local_b0") (, ",") (identifier "pcVar1") () ")"))) (; ";")) (if_statement "if (DAT_0007b614 == (char *)0x0) {\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }\n        else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }" (if "if") (parenthesized_expression "(DAT_0007b614 == (char *)0x0)" (( "(") (binary_expression "DAT_0007b614 == (char *)0x0" (identifier "DAT_0007b614") (== "==") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\nLAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }\n          free(pcVar8);\n          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);\n          iVar6 = *param_3;\n          uVar11 = FUN_0003dbd0(0,pcVar1);\n          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;\n          *param_3 = *param_3 + 1;\n        }" ({ "{") (labeled_statement "LAB_0001fc60:\n          if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }" (statement_identifier "LAB_0001fc60") (: ":") (if_statement "if (param_2 == '\0') {\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }" (if "if") (parenthesized_expression "(param_2 == '\0')" (( "(") (binary_expression "param_2 == '\0'" (identifier "param_2") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n            if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }\n            iVar6 = __xstat64(3,pcVar12,&local_80);\n            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }\n            free(pcVar12);\n          }" ({ "{") (if_statement "if (*pcVar8 == '~') {\n              pcVar12 = (char *)FUN_0001a620();\n            }\n            else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }" (if "if") (parenthesized_expression "(*pcVar8 == '~')" (( "(") (binary_expression "*pcVar8 == '~'" (pointer_expression "*pcVar8" (* "*") (identifier "pcVar8")) (== "==") (char_literal "'~'" (' "'") (character "~") (' "'"))) () ")")) (compound_statement "{\n              pcVar12 = (char *)FUN_0001a620();\n            }" ({ "{") (expression_statement "pcVar12 = (char *)FUN_0001a620();" (assignment_expression "pcVar12 = (char *)FUN_0001a620()" (identifier "pcVar12") (= "=") (cast_expression "(char *)FUN_0001a620()" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0001a620()" (identifier "FUN_0001a620") (argument_list "()" (( "(") () ")"))))) (; ";")) (} "}")) (else_clause "else {\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }" (else "else") (compound_statement "{\n              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);\n            }" ({ "{") (expression_statement "pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);" (assignment_expression "pcVar12 = (char *)FUN_0003dbd0(0,pcVar8)" (identifier "pcVar12") (= "=") (cast_expression "(char *)FUN_0003dbd0(0,pcVar8)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0003dbd0(0,pcVar8)" (identifier "FUN_0003dbd0") (argument_list "(0,pcVar8)" (( "(") (number_literal "0") (, ",") (identifier "pcVar8") () ")"))))) (; ";")) (} "}")))) (expression_statement "iVar6 = __xstat64(3,pcVar12,&local_80);" (assignment_expression "iVar6 = __xstat64(3,pcVar12,&local_80)" (identifier "iVar6") (= "=") (call_expression "__xstat64(3,pcVar12,&local_80)" (identifier "__xstat64") (argument_list "(3,pcVar12,&local_80)" (( "(") (number_literal "3") (, ",") (identifier "pcVar12") (, ",") (pointer_expression "&local_80" (& "&") (identifier "local_80")) () ")")))) (; ";")) (if_statement "if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }" (if "if") (parenthesized_expression "((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000))" (( "(") (binary_expression "(iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)" (parenthesized_expression "(iVar6 == -1)" (( "(") (binary_expression "iVar6 == -1" (identifier "iVar6") (== "==") (number_literal "-1")) () ")")) (|| "||") (parenthesized_expression "((local_80.st_mode & 0xf000) != 0x4000)" (( "(") (binary_expression "(local_80.st_mode & 0xf000) != 0x4000" (parenthesized_expression "(local_80.st_mode & 0xf000)" (( "(") (binary_expression "local_80.st_mode & 0xf000" (field_expression "local_80.st_mode" (identifier "local_80") (. ".") (field_identifier "st_mode")) (& "&") (number_literal "0xf000")) () ")")) (!= "!=") (number_literal "0x4000")) () ")"))) () ")")) (compound_statement "{\n              free(pcVar12);\n              goto LAB_0001fc27;\n            }" ({ "{") (expression_statement "free(pcVar12);" (call_expression "free(pcVar12)" (identifier "free") (argument_list "(pcVar12)" (( "(") (identifier "pcVar12") () ")"))) (; ";")) (goto_statement "goto LAB_0001fc27;" (goto "goto") (statement_identifier "LAB_0001fc27") (; ";")) (} "}"))) (expression_statement "free(pcVar12);" (call_expression "free(pcVar12)" (identifier "free") (argument_list "(pcVar12)" (( "(") (identifier "pcVar12") () ")"))) (; ";")) (} "}")))) (expression_statement "free(pcVar8);" (call_expression "free(pcVar8)" (identifier "free") (argument_list "(pcVar8)" (( "(") (identifier "pcVar8") () ")"))) (; ";")) (expression_statement "local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);" (assignment_expression "local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4)" (identifier "local_ac") (= "=") (call_expression "FUN_0003dad0(local_ac,*param_3 * 4 + 4)" (identifier "FUN_0003dad0") (argument_list "(local_ac,*param_3 * 4 + 4)" (( "(") (identifier "local_ac") (, ",") (binary_expression "*param_3 * 4 + 4" (binary_expression "*param_3 * 4" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (* "*") (number_literal "4")) (+ "+") (number_literal "4")) () ")")))) (; ";")) (expression_statement "iVar6 = *param_3;" (assignment_expression "iVar6 = *param_3" (identifier "iVar6") (= "=") (pointer_expression "*param_3" (* "*") (identifier "param_3"))) (; ";")) (expression_statement "uVar11 = FUN_0003dbd0(0,pcVar1);" (assignment_expression "uVar11 = FUN_0003dbd0(0,pcVar1)" (identifier "uVar11") (= "=") (call_expression "FUN_0003dbd0(0,pcVar1)" (identifier "FUN_0003dbd0") (argument_list "(0,pcVar1)" (( "(") (number_literal "0") (, ",") (identifier "pcVar1") () ")")))) (; ";")) (expression_statement "*(undefined4 *)(local_ac + iVar6 * 4) = uVar11;" (assignment_expression "*(undefined4 *)(local_ac + iVar6 * 4) = uVar11" (pointer_expression "*(undefined4 *)(local_ac + iVar6 * 4)" (* "*") (cast_expression "(undefined4 *)(local_ac + iVar6 * 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_ac + iVar6 * 4)" (( "(") (binary_expression "local_ac + iVar6 * 4" (identifier "local_ac") (+ "+") (binary_expression "iVar6 * 4" (identifier "iVar6") (* "*") (number_literal "4"))) () ")")))) (= "=") (identifier "uVar11")) (; ";")) (expression_statement "*param_3 = *param_3 + 1;" (assignment_expression "*param_3 = *param_3 + 1" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (= "=") (binary_expression "*param_3 + 1" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (+ "+") (number_literal "1"))) (; ";")) (} "}")) (else_clause "else {\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }" (else "else") (compound_statement "{\n          __haystack = (char *)FUN_0001bac0(pcVar8);\n          pcVar12 = DAT_0007b614;\n          if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }\nLAB_0001fc27:\n          free(pcVar8);\n        }" ({ "{") (expression_statement "__haystack = (char *)FUN_0001bac0(pcVar8);" (assignment_expression "__haystack = (char *)FUN_0001bac0(pcVar8)" (identifier "__haystack") (= "=") (cast_expression "(char *)FUN_0001bac0(pcVar8)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0001bac0(pcVar8)" (identifier "FUN_0001bac0") (argument_list "(pcVar8)" (( "(") (identifier "pcVar8") () ")"))))) (; ";")) (expression_statement "pcVar12 = DAT_0007b614;" (assignment_expression "pcVar12 = DAT_0007b614" (identifier "pcVar12") (= "=") (identifier "DAT_0007b614")) (; ";")) (if_statement "if (__haystack != (char *)0x0) {\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }" (if "if") (parenthesized_expression "(__haystack != (char *)0x0)" (( "(") (binary_expression "__haystack != (char *)0x0" (identifier "__haystack") (!= "!=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n            pcVar9 = strstr(__haystack,DAT_0007b614);\n            pcVar10 = strstr(pcVar12,__haystack);\n            free(__haystack);\n            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;\n          }" ({ "{") (expression_statement "pcVar9 = strstr(__haystack,DAT_0007b614);" (assignment_expression "pcVar9 = strstr(__haystack,DAT_0007b614)" (identifier "pcVar9") (= "=") (call_expression "strstr(__haystack,DAT_0007b614)" (identifier "strstr") (argument_list "(__haystack,DAT_0007b614)" (( "(") (identifier "__haystack") (, ",") (identifier "DAT_0007b614") () ")")))) (; ";")) (expression_statement "pcVar10 = strstr(pcVar12,__haystack);" (assignment_expression "pcVar10 = strstr(pcVar12,__haystack)" (identifier "pcVar10") (= "=") (call_expression "strstr(pcVar12,__haystack)" (identifier "strstr") (argument_list "(pcVar12,__haystack)" (( "(") (identifier "pcVar12") (, ",") (identifier "__haystack") () ")")))) (; ";")) (expression_statement "free(__haystack);" (call_expression "free(__haystack)" (identifier "free") (argument_list "(__haystack)" (( "(") (identifier "__haystack") () ")"))) (; ";")) (if_statement "if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;" (if "if") (parenthesized_expression "((__haystack == pcVar9) || (pcVar12 == pcVar10))" (( "(") (binary_expression "(__haystack == pcVar9) || (pcVar12 == pcVar10)" (parenthesized_expression "(__haystack == pcVar9)" (( "(") (binary_expression "__haystack == pcVar9" (identifier "__haystack") (== "==") (identifier "pcVar9")) () ")")) (|| "||") (parenthesized_expression "(pcVar12 == pcVar10)" (( "(") (binary_expression "pcVar12 == pcVar10" (identifier "pcVar12") (== "==") (identifier "pcVar10")) () ")"))) () ")")) (goto_statement "goto LAB_0001fc60;" (goto "goto") (statement_identifier "LAB_0001fc60") (; ";"))) (} "}"))) (labeled_statement "LAB_0001fc27:\n          free(pcVar8);" (statement_identifier "LAB_0001fc27") (: ":") (expression_statement "free(pcVar8);" (call_expression "free(pcVar8)" (identifier "free") (argument_list "(pcVar8)" (( "(") (identifier "pcVar8") () ")"))) (; ";"))) (} "}")))) (} "}"))) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";"))) (} "}"))) (expression_statement "beep();" (call_expression "beep()" (identifier "beep") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "free(local_bc);" (call_expression "free(local_bc)" (identifier "free") (argument_list "(local_bc)" (( "(") (identifier "local_bc") () ")"))) (; ";")) (expression_statement "free(local_b0);" (call_expression "free(local_b0)" (identifier "free") (argument_list "(local_b0)" (( "(") (identifier "local_b0") () ")"))) (; ";")) (expression_statement "local_ac = 0;" (assignment_expression "local_ac = 0" (identifier "local_ac") (= "=") (number_literal "0")) (; ";")) (labeled_statement "LAB_0001fcd3:\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return local_ac;\n  }" (statement_identifier "LAB_0001fcd3") (: ":") (if_statement "if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return local_ac;\n  }" (if "if") (parenthesized_expression "(local_20 == *(int *)(in_GS_OFFSET + 0x14))" (( "(") (binary_expression "local_20 == *(int *)(in_GS_OFFSET + 0x14)" (identifier "local_20") (== "==") (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" (* "*") (cast_expression "(int *)(in_GS_OFFSET + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_GS_OFFSET + 0x14)" (( "(") (binary_expression "in_GS_OFFSET + 0x14" (identifier "in_GS_OFFSET") (+ "+") (number_literal "0x14")) () ")"))))) () ")")) (compound_statement "{\n    return local_ac;\n  }" ({ "{") (return_statement "return local_ac;" (return "return") (identifier "local_ac") (; ";")) (} "}")))) (expression_statement "FUN_0005a8b0();" (call_expression "FUN_0005a8b0()" (identifier "FUN_0005a8b0") (argument_list "()" (( "(") () ")"))) (; ";")) (labeled_statement "LAB_0001fcb0:\n  closedir(__dirp);" (statement_identifier "LAB_0001fcb0") (: ":") (expression_statement "closedir(__dirp);" (call_expression "closedir(__dirp)" (identifier "closedir") (argument_list "(__dirp)" (( "(") (identifier "__dirp") () ")"))) (; ";"))) (expression_statement "free(local_b0);" (call_expression "free(local_b0)" (identifier "free") (argument_list "(local_b0)" (( "(") (identifier "local_b0") () ")"))) (; ";")) (expression_statement "free(local_bc);" (call_expression "free(local_bc)" (identifier "free") (argument_list "(local_bc)" (( "(") (identifier "local_bc") () ")"))) (; ";")) (goto_statement "goto LAB_0001fcd3;" (goto "goto") (statement_identifier "LAB_0001fcd3") (; ";")) (} "}")))

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

char ** function_1(char *buf,type_1 allow_files,size_t *num_matches,size_t buf_len)

{
  int var_33;
  size_t sVar2;
  char *var_4;
  type_2 *var_19;
  size_t var_8;
  size_t var_9;
  type_3 *var_13;
  type_4 *var_15;
  int var_17;
  size_t var_23;
  char *var_18;
  char *var_27;
  char *var_29;
  char *var_31;
  char *var_30;
  int var_1;
  bool var_20;
  bool var_21;
  bool bVar16;
  type_2 bVar17;
  type_2 *local_bc;
  char *local_b0;
  char **local_ac;
  type_5 fileinfo;
  
  bVar17 = 0;
  var_33 = *(int *)(var_1 + 0x14);
  local_bc = (type_2 *)var_2((char *)0x0,buf);
  *num_matches = 0;
  local_bc[buf_len] = 0;
  var_4 = var_3((char *)local_bc,0x2f);
  if (var_4 == (char *)0x0) {
    local_b0 = var_2((char *)0x0,present_path);
  }
  else {
    var_19 = (type_2 *)var_2((char *)0x0,var_4 + 1);
    var_4[1] = '\0';
    if (*local_bc == 0x7e) {
      local_b0 = var_5((char *)local_bc);
    }
    else {
      local_b0 = var_2((char *)0x0,(char *)local_bc);
    }
    if (*local_b0 != '/') {
      var_8 = var_6(present_path);
      var_9 = var_6((char *)local_bc);
      local_b0 = (char *)var_7(local_b0,var_8 + 1 + var_9);
      var_10(local_b0,1,0xffffffff,"%s%s",present_path,local_bc);
    }
    var_11(local_bc);
    local_bc = var_19;
  }
  var_13 = var_12(local_b0);
  if (var_13 != (type_3 *)0x0) {
    var_8 = var_6((char *)local_bc);
    local_ac = (char **)0x0;
LAB_0001fb20:
    do {
      var_15 = var_14(var_13);
      if (var_15 == (type_4 *)0x0) goto LAB_0001fcb0;
      var_4 = var_15->d_name;
      var_17 = var_16(var_4,(char *)local_bc,var_8);
      if (var_17 == 0) {
        var_20 = *local_bc < 0x2e;
        bVar16 = *local_bc == 0x2e;
        if (!bVar16) {
          var_17 = 2;
          var_18 = var_4;
          var_19 = &DAT_0005c437;
          do {
            if (var_17 == 0) break;
            var_17 = var_17 + -1;
            var_20 = (type_2)*var_18 < *var_19;
            bVar16 = *var_18 == *var_19;
            var_18 = var_18 + (type_6)bVar17 * -2 + 1;
            var_19 = var_19 + (type_6)bVar17 * -2 + 1;
          } while (bVar16);
          var_21 = false;
          var_20 = (!var_20 && !bVar16) == var_20;
          if (var_20) goto LAB_0001fb20;
          var_17 = 3;
          var_18 = var_4;
          var_19 = (type_2 *)0x60801;
          do {
            if (var_17 == 0) break;
            var_17 = var_17 + -1;
            var_21 = (type_2)*var_18 < *var_19;
            var_20 = *var_18 == *var_19;
            var_18 = var_18 + (type_6)bVar17 * -2 + 1;
            var_19 = var_19 + (type_6)bVar17 * -2 + 1;
          } while (var_20);
          if ((!var_21 && !var_20) == var_21) goto LAB_0001fb20;
        }
        var_9 = var_6(local_b0);
        var_23 = var_6(var_4);
        var_18 = (char *)var_22(var_9 + 1 + var_23);
        var_10(var_18,1,0xffffffff,"%s%s",local_b0,var_4);
        if (var_24 == (char *)0x0) {
LAB_0001fc60:
          if (!allow_files) {
            if (*var_18 == '~') {
              var_30 = var_5(var_18);
            }
            else {
              var_30 = var_2((char *)0x0,var_18);
            }
            var_17 = var_25(3,var_30,(type_7 *)&fileinfo);
            if ((var_17 == -1) || ((fileinfo.st_mode & 0xf000) != 0x4000)) {
              var_11(var_30);
              goto LAB_0001fc27;
            }
            var_11(var_30);
          }
          var_11(var_18);
          local_ac = (char **)var_7(local_ac,*num_matches * 4 + 4);
          sVar2 = *num_matches;
          var_4 = var_2((char *)0x0,var_4);
          local_ac[sVar2] = var_4;
          *num_matches = *num_matches + 1;
        }
        else {
          var_27 = var_26(var_18);
          var_30 = var_24;
          if (var_27 != (char *)0x0) {
            var_29 = var_28(var_27,var_24);
            var_31 = var_28(var_30,var_27);
            var_11(var_27);
            if ((var_27 == var_29) || (var_30 == var_31)) goto LAB_0001fc60;
          }
LAB_0001fc27:
          var_11(var_18);
        }
      }
    } while( true );
  }
  var_32();
  var_11(local_bc);
  var_11(local_b0);
  local_ac = (char **)0x0;
LAB_0001fcd3:
  if (var_33 == *(int *)(var_1 + 0x14)) {
    return local_ac;
  }
                    /* WARNING: Subroutine does not return */
  var_34();
LAB_0001fcb0:
  var_35(var_13);
  var_11(local_b0);
  var_11(local_bc);
  goto LAB_0001fcd3;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (identifier)))) body: (compound_statement (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (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: (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: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (number_literal) (identifier)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (identifier)) right: (number_literal))) (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: (identifier)) (number_literal))))) (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 (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) (identifier))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (number_literal) (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (char_literal (escape_sequence)))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (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: (call_expression function: (identifier) arguments: (argument_list)))))) alternative: (else_clause (compound_statement (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) (identifier))))))))) (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 (identifier))))) (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: (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 (identifier) (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (number_literal) (string_literal (string_content)) (identifier) (identifier)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (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: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (labeled_statement label: (statement_identifier) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (field_expression argument: (identifier) field: (field_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier)) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)))) (if_statement condition: (parenthesized_expression (unary_expression argument: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (do_statement body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (parenthesized_expression (identifier)) right: (identifier)) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal))))) condition: (parenthesized_expression (identifier))) (expression_statement (assignment_expression left: (identifier) right: (false))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (unary_expression argument: (identifier)) right: (unary_expression argument: (identifier)))) right: (identifier)))) (if_statement condition: (parenthesized_expression (identifier)) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) (do_statement body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (parenthesized_expression (identifier)) right: (identifier)) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal))))) condition: (parenthesized_expression (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (unary_expression argument: (identifier)) right: (unary_expression argument: (identifier)))) right: (identifier))) consequence: (goto_statement label: (statement_identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (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 (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (number_literal) (string_literal (string_content)) (identifier) (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 (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence)))) consequence: (compound_statement (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: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list)))))) alternative: (else_clause (compound_statement (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) (identifier))))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (number_literal) (identifier) (pointer_expression argument: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (field_expression argument: (identifier) field: (field_identifier)) right: (number_literal))) right: (number_literal))))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (goto_statement label: (statement_identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (number_literal) (identifier))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))) alternative: (else_clause (compound_statement (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 (identifier)))))) (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 (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))) consequence: (goto_statement label: (statement_identifier))))) (labeled_statement label: (statement_identifier) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier))))))))))) condition: (parenthesized_expression (true)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) consequence: (compound_statement (return_statement (identifier))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (labeled_statement label: (statement_identifier) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (goto_statement label: (statement_identifier)))))

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

int MASKED(undefined4 param_1,char param_2,int *param_3,int param_4)

{
  char *pcVar1;
  byte *pbVar2;
  size_t sVar3;
  size_t sVar4;
  DIR *__dirp;
  dirent64 *pdVar5;
  int iVar6;
  size_t sVar7;
  char *pcVar8;
  char *__haystack;
  char *pcVar9;
  char *pcVar10;
  undefined4 uVar11;
  char *pcVar12;
  int in_GS_OFFSET;
  bool bVar13;
  bool bVar14;
  bool bVar15;
  byte bVar16;
  byte *local_bc;
  char *local_b0;
  int local_ac;
  stat64 local_80;
  int local_20;
  undefined4 uStack_14;
  
  bVar16 = 0;
  uStack_14 = 0x1f9d9;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  local_bc = (byte *)FUN_0003dbd0(0,param_1);
  *param_3 = 0;
  local_bc[param_4] = 0;
  pcVar1 = strrchr((char *)local_bc,0x2f);
  if (pcVar1 == (char *)0x0) {
    local_b0 = (char *)FUN_0003dbd0(0,DAT_0007b674);
  }
  else {
    pbVar2 = (byte *)FUN_0003dbd0(0,pcVar1 + 1);
    pcVar1[1] = '\0';
    if (*local_bc == 0x7e) {
      local_b0 = (char *)FUN_0001a620();
    }
    else {
      local_b0 = (char *)FUN_0003dbd0(0,local_bc);
    }
    if (*local_b0 != '/') {
      sVar3 = strlen(DAT_0007b674);
      sVar4 = strlen((char *)local_bc);
      local_b0 = (char *)FUN_0003dad0(local_b0,sVar3 + 1 + sVar4);
      __sprintf_chk(local_b0,1,0xffffffff,"%s%s",DAT_0007b674,local_bc);
    }
    free(local_bc);
    local_bc = pbVar2;
  }
  __dirp = opendir(local_b0);
  if (__dirp != (DIR *)0x0) {
    sVar3 = strlen((char *)local_bc);
    local_ac = 0;
LAB_0001fb20:
    do {
      pdVar5 = readdir64(__dirp);
      if (pdVar5 == (dirent64 *)0x0) goto LAB_0001fcb0;
      pcVar1 = pdVar5->d_name;
      iVar6 = strncmp(pcVar1,(char *)local_bc,sVar3);
      if (iVar6 == 0) {
        bVar13 = *local_bc < 0x2e;
        bVar15 = *local_bc == 0x2e;
        if (!bVar15) {
          iVar6 = 2;
          pcVar8 = pcVar1;
          pbVar2 = &DAT_0005c437;
          do {
            if (iVar6 == 0) break;
            iVar6 = iVar6 + -1;
            bVar13 = (byte)*pcVar8 < *pbVar2;
            bVar15 = *pcVar8 == *pbVar2;
            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;
            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;
          } while (bVar15);
          bVar14 = false;
          bVar13 = (!bVar13 && !bVar15) == bVar13;
          if (bVar13) goto LAB_0001fb20;
          iVar6 = 3;
          pcVar8 = pcVar1;
          pbVar2 = (byte *)0x60801;
          do {
            if (iVar6 == 0) break;
            iVar6 = iVar6 + -1;
            bVar14 = (byte)*pcVar8 < *pbVar2;
            bVar13 = *pcVar8 == *pbVar2;
            pcVar8 = pcVar8 + (uint)bVar16 * -2 + 1;
            pbVar2 = pbVar2 + (uint)bVar16 * -2 + 1;
          } while (bVar13);
          if ((!bVar14 && !bVar13) == bVar14) goto LAB_0001fb20;
        }
        sVar4 = strlen(local_b0);
        sVar7 = strlen(pcVar1);
        pcVar8 = (char *)FUN_0003da70(sVar4 + 1 + sVar7);
        __sprintf_chk(pcVar8,1,0xffffffff,"%s%s",local_b0,pcVar1);
        if (DAT_0007b614 == (char *)0x0) {
LAB_0001fc60:
          if (param_2 == '\0') {
            if (*pcVar8 == '~') {
              pcVar12 = (char *)FUN_0001a620();
            }
            else {
              pcVar12 = (char *)FUN_0003dbd0(0,pcVar8);
            }
            iVar6 = __xstat64(3,pcVar12,&local_80);
            if ((iVar6 == -1) || ((local_80.st_mode & 0xf000) != 0x4000)) {
              free(pcVar12);
              goto LAB_0001fc27;
            }
            free(pcVar12);
          }
          free(pcVar8);
          local_ac = FUN_0003dad0(local_ac,*param_3 * 4 + 4);
          iVar6 = *param_3;
          uVar11 = FUN_0003dbd0(0,pcVar1);
          *(undefined4 *)(local_ac + iVar6 * 4) = uVar11;
          *param_3 = *param_3 + 1;
        }
        else {
          __haystack = (char *)FUN_0001bac0(pcVar8);
          pcVar12 = DAT_0007b614;
          if (__haystack != (char *)0x0) {
            pcVar9 = strstr(__haystack,DAT_0007b614);
            pcVar10 = strstr(pcVar12,__haystack);
            free(__haystack);
            if ((__haystack == pcVar9) || (pcVar12 == pcVar10)) goto LAB_0001fc60;
          }
LAB_0001fc27:
          free(pcVar8);
        }
      }
    } while( true );
  }
  beep();
  free(local_bc);
  free(local_b0);
  local_ac = 0;
LAB_0001fcd3:
  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {
    return local_ac;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0005a8b0();
LAB_0001fcb0:
  closedir(__dirp);
  free(local_b0);
  free(local_bc);
  goto LAB_0001fcd3;
}

