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

int hash_insert_if_absent(Hash_table *table,void *entry,void **matched_ent)

{
  float fVar1;
  Hash_tuning *pHVar2;
  hash_entry *phVar3;
  float fVar4;
  float fVar5;
  float fVar6;
  _Bool _Var7;
  void *pvVar8;
  int iVar9;
  hash_entry *phVar10;
  int in_GS_OFFSET;
  size_t sStack_3c;
  hash_entry *bucket;
  int local_20;
  undefined4 uStack_14;
  
  uStack_14 = 0x2a509;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  if (entry == (void *)0x0) {
                    /* WARNING: Subroutine does not return */
    abort();
  }
  pvVar8 = hash_find_entry(table,entry,&bucket,false);
  fVar6 = DAT_0003c7f8;
  if (pvVar8 != (void *)0x0) {
    iVar9 = 0;
    if (matched_ent != (void **)0x0) {
      *matched_ent = pvVar8;
    }
    goto LAB_0002a55c;
  }
  pHVar2 = table->tuning;
  fVar1 = pHVar2->growth_threshold;
  fVar4 = (float)table->n_buckets;
  if (fVar1 * fVar4 < (float)table->n_buckets_used) {
    if (pHVar2 == &default_tuning) {
      fVar4 = DAT_0003c7f8 * fVar4 * DAT_0003c7fc;
    }
    else {
      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) ||
          (pHVar2->growth_factor <= DAT_0003c808)) || (pHVar2->shrink_threshold < 0.0)) {
LAB_0002a740:
        table->tuning = &default_tuning;
        if ((float)table->n_buckets_used <= fVar6 * fVar4) goto LAB_0002a5c0;
        fVar4 = fVar4 * DAT_0003c7fc;
        fVar1 = fVar6;
      }
      else {
        fVar5 = pHVar2->shrink_threshold + DAT_0003c800;
        if (((pHVar2->shrink_factor <= fVar5) || (1.0 < pHVar2->shrink_factor)) || (fVar1 <= fVar5))
        goto LAB_0002a740;
        fVar4 = pHVar2->growth_factor * fVar4;
        if (pHVar2->is_n_buckets != false) goto LAB_0002a686;
      }
      fVar4 = fVar1 * fVar4;
    }
LAB_0002a686:
    if (fVar4 < DAT_0003c80c) {
      sStack_3c = (size_t)(longlong)ROUND(fVar4);
      _Var7 = hash_rehash(table,sStack_3c);
      if (_Var7) {
        pvVar8 = hash_find_entry(table,entry,&bucket,false);
        if (pvVar8 != (void *)0x0) {
          iVar9 = hash_insert_if_absent_cold_11();
          return iVar9;
        }
        goto LAB_0002a5c0;
      }
    }
LAB_0002a7b2:
    iVar9 = -1;
  }
  else {
LAB_0002a5c0:
    if (bucket->data == (void *)0x0) {
      bucket->data = entry;
      iVar9 = 1;
      table->n_entries = table->n_entries + 1;
      table->n_buckets_used = table->n_buckets_used + 1;
      goto LAB_0002a55c;
    }
    phVar10 = table->free_entry_list;
    if (phVar10 == (hash_entry *)0x0) {
      phVar10 = (hash_entry *)malloc(8);
      if (phVar10 == (hash_entry *)0x0) goto LAB_0002a7b2;
    }
    else {
      table->free_entry_list = phVar10->next;
    }
    phVar3 = bucket->next;
    phVar10->data = entry;
    phVar10->next = phVar3;
    bucket->next = phVar10;
    iVar9 = 1;
    table->n_entries = table->n_entries + 1;
  }
LAB_0002a55c:
  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail_local();
  }
  return iVar9;
}



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

undefined4 FUN_0002a500(int param_1,int param_2,int *param_3)

{
  float fVar1;
  float *pfVar2;
  float fVar3;
  float fVar4;
  float fVar5;
  char cVar6;
  int iVar7;
  undefined4 uVar8;
  int *piVar9;
  int in_GS_OFFSET;
  int **ppiVar10;
  undefined4 local_3c;
  int *local_24;
  int local_20;
  undefined4 uStack_14;
  
  uStack_14 = 0x2a509;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  if (param_2 == 0) {
                    /* WARNING: Subroutine does not return */
    abort();
  }
  ppiVar10 = &local_24;
  iVar7 = FUN_00029790(0);
  fVar5 = DAT_0003c7f8;
  if (iVar7 != 0) {
    uVar8 = 0;
    if (param_3 != (int *)0x0) {
      *param_3 = iVar7;
    }
    goto LAB_0002a55c;
  }
  pfVar2 = *(float **)(param_1 + 0x14);
  fVar1 = pfVar2[2];
  fVar3 = (float)*(uint *)(param_1 + 8);
  if (fVar1 * fVar3 < (float)*(uint *)(param_1 + 0xc)) {
    if (pfVar2 == (float *)&DAT_0003c7e0) {
      fVar3 = DAT_0003c7f8 * fVar3 * DAT_0003c7fc;
    }
    else {
      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||
         (*pfVar2 < 0.0)) {
LAB_0002a740:
        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;
        if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;
        fVar3 = fVar3 * DAT_0003c7fc;
        fVar1 = fVar5;
      }
      else {
        fVar4 = *pfVar2 + DAT_0003c800;
        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;
        fVar3 = pfVar2[3] * fVar3;
        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;
      }
      fVar3 = fVar1 * fVar3;
    }
LAB_0002a686:
    if (fVar3 < DAT_0003c80c) {
      local_3c = (undefined4)(longlong)ROUND(fVar3);
      cVar6 = FUN_0002a2c0(param_1,local_3c);
      if (cVar6 != '\0') {
        iVar7 = FUN_00029790(0);
        if (iVar7 != 0) {
          uVar8 = FUN_0001278e(ppiVar10);
          return uVar8;
        }
        goto LAB_0002a5c0;
      }
    }
LAB_0002a7b2:
    uVar8 = 0xffffffff;
  }
  else {
LAB_0002a5c0:
    if (*local_24 == 0) {
      *local_24 = param_2;
      uVar8 = 1;
      *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;
      *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;
      goto LAB_0002a55c;
    }
    piVar9 = *(int **)(param_1 + 0x24);
    if (piVar9 == (int *)0x0) {
      piVar9 = (int *)malloc(8);
      if (piVar9 == (int *)0x0) goto LAB_0002a7b2;
    }
    else {
      *(int *)(param_1 + 0x24) = piVar9[1];
    }
    iVar7 = local_24[1];
    *piVar9 = param_2;
    piVar9[1] = iVar7;
    local_24[1] = (int)piVar9;
    uVar8 = 1;
    *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;
  }
LAB_0002a55c:
  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    FUN_00038830();
  }
  return uVar8;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x000142a0
ADD EBX,0x1d8e3
SUB ESP,0x3c
MOV EAX,GS:[0x14]
MOV dword ptr [ESP + 0x2c],EAX
XOR EAX,EAX
MOV EDI,dword ptr [ESP + 0x54]
MOV ESI,dword ptr [ESP + 0x50]
MOV EBP,dword ptr [ESP + 0x58]
TEST EDI,EDI
JZ 0x0001278e
LEA EAX,[ESP + 0x28]
SUB ESP,0xc
MOV EDX,EDI
MOV dword ptr [ESP + 0x10],EAX
MOV ECX,EAX
MOV EAX,ESI
PUSH 0x0
CALL 0x00029790
ADD ESP,0x10
MOV EDX,EAX
TEST EAX,EAX
JZ 0x0002a578
XOR EAX,EAX
TEST EBP,EBP
JZ 0x0002a55c
MOV dword ptr [EBP],EDX
MOV EBX,dword ptr [ESP + 0x2c]
XOR EBX,dword ptr GS:[0x14]
JNZ 0x0002a7d7
ADD ESP,0x3c
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EAX,dword ptr [ESI + 0xc]
XOR EDX,EDX
XOR ECX,ECX
MOV dword ptr [ESP + 0xc],EDX
MOV EDX,dword ptr [ESI + 0x8]
MOV dword ptr [ESP + 0x8],EAX
MOV EAX,dword ptr [ESI + 0x14]
FILD qword ptr [ESP + 0x8]
MOV dword ptr [ESP + 0x8],EDX
FLD dword ptr [EAX + 0x8]
MOV dword ptr [ESP + 0xc],ECX
FILD qword ptr [ESP + 0x8]
FLD ST1
FMUL ST1
FXCH ST3
FCOMI ST0,ST3
FSTP ST3
JA 0x0002a600
FSTP ST0
FSTP ST0
FSTP ST0
JMP 0x0002a5c0
FSTP ST0
LEA ESI,[ESI]
MOV EBP,dword ptr [ESP + 0x28]
MOV EAX,dword ptr [EBP]
TEST EAX,EAX
JZ 0x0002a780
MOV EAX,dword ptr [ESI + 0x24]
TEST EAX,EAX
JZ 0x0002a798
MOV EDX,dword ptr [EAX + 0x4]
MOV dword ptr [ESI + 0x24],EDX
MOV EDX,dword ptr [EBP + 0x4]
MOV dword ptr [EAX],EDI
MOV dword ptr [EAX + 0x4],EDX
MOV dword ptr [EBP + 0x4],EAX
MOV EAX,0x1
ADD dword ptr [ESI + 0x10],0x1
JMP 0x0002a55c
LEA EDX,[EBX + 0xffff49f4]
CMP EAX,EDX
JZ 0x0002a7c0
FLD dword ptr [EBX + 0xffff4a14]
FXCH ST2
FCOMI ST0,ST2
JBE 0x0002a6f0
FLD dword ptr [EBX + 0xffff4a18]
FCOMIP ST0,ST1
JBE 0x0002a700
FLD dword ptr [EBX + 0xffff4a1c]
FLD dword ptr [EAX + 0xc]
FCOMI ST0,ST1
FSTP ST1
JBE 0x0002a710
FLDZ
FLD dword ptr [EAX]
FCOMI ST0,ST1
FSTP ST1
JC 0x0002a718
FADDP ST4,ST0
FLD dword ptr [EAX + 0x4]
FCOMI ST0,ST4
JBE 0x0002a722
FLD1
FCOMIP ST0,ST1
FSTP ST0
JC 0x0002a72c
FXCH
FCOMI ST0,ST3
FSTP ST3
JBE 0x0002a734
FSTP ST3
FXCH
FXCH ST2
CMP byte ptr [EAX + 0x10],0x0
FMULP
JZ 0x0002a767
FSTP ST1
FLD dword ptr [EBX + 0xffff4a20]
FXCH
FCOMI ST0,ST1
FSTP ST1
JNC 0x0002a7b0
SUB ESP,0x8
FNSTCW word ptr [ESP + 0x22]
MOVZX EAX,word ptr [ESP + 0x22]
OR AH,0xc
MOV word ptr [ESP + 0x20],AX
FLDCW word ptr [ESP + 0x20]
FISTP qword ptr [ESP + 0x18]
FLDCW word ptr [ESP + 0x22]
MOV EAX,dword ptr [ESP + 0x18]
PUSH EAX
PUSH ESI
CALL 0x0002a2c0
ADD ESP,0x10
TEST AL,AL
JZ 0x0002a7b2
SUB ESP,0xc
MOV EDX,EDI
MOV EAX,ESI
PUSH 0x0
MOV ECX,dword ptr [ESP + 0x14]
CALL 0x00029790
ADD ESP,0x10
TEST EAX,EAX
JZ 0x0002a5c0
JMP 0x0001278e
FSTP ST0
FSTP ST1
JMP 0x0002a740
FSTP ST0
FSTP ST1
JMP 0x0002a740
FSTP ST0
FSTP ST0
FSTP ST1
JMP 0x0002a740
FSTP ST0
FSTP ST0
FSTP ST0
FSTP ST1
JMP 0x0002a740
FSTP ST0
FSTP ST0
FSTP ST0
FSTP ST1
JMP 0x0002a740
FSTP ST0
FSTP ST0
FSTP ST1
JMP 0x0002a740
FSTP ST0
FSTP ST1
LEA ESI,[ESI]
NOP
FLD dword ptr [EBX + 0xffff4a0c]
MOV dword ptr [ESI + 0x14],EDX
FST dword ptr [ESP + 0x8]
FMUL ST1
FXCH ST2
FCOMIP ST0,ST2
FSTP ST1
JBE 0x0002a5b8
FMUL dword ptr [EBX + 0xffff4a10]
FLD dword ptr [ESP + 0x8]
JMP 0x0002a770
FXCH
LEA ESI,[ESI]
FMULP
JMP 0x0002a686
MOV dword ptr [EBP],EDI
MOV EAX,0x1
ADD dword ptr [ESI + 0x10],0x1
ADD dword ptr [ESI + 0xc],0x1
JMP 0x0002a55c
SUB ESP,0xc
PUSH 0x8
CALL 0x00012300
ADD ESP,0x10
TEST EAX,EAX
JNZ 0x0002a5e0
JMP 0x0002a7b2
FSTP ST0
MOV EAX,0xffffffff
JMP 0x0002a55c
FSTP ST1
FSTP ST1
FMUL dword ptr [EBX + 0xffff4a10]
FLD dword ptr [EBX + 0xffff4a0c]
FMULP
JMP 0x0002a686
CALL 0x00038830
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nundefined4 FUN_0002a500(int param_1,int param_2,int *param_3)\n\n{\n  float fVar1;\n  float *pfVar2;\n  float fVar3;\n  float fVar4;\n  float fVar5;\n  char cVar6;\n  int iVar7;\n  undefined4 uVar8;\n  int *piVar9;\n  int in_GS_OFFSET;\n  int **ppiVar10;\n  undefined4 local_3c;\n  int *local_24;\n  int local_20;\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x2a509;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  if (param_2 == 0) {\n                    /* WARNING: Subroutine does not return */\n    abort();\n  }\n  ppiVar10 = &local_24;\n  iVar7 = FUN_00029790(0);\n  fVar5 = DAT_0003c7f8;\n  if (iVar7 != 0) {\n    uVar8 = 0;\n    if (param_3 != (int *)0x0) {\n      *param_3 = iVar7;\n    }\n    goto LAB_0002a55c;\n  }\n  pfVar2 = *(float **)(param_1 + 0x14);\n  fVar1 = pfVar2[2];\n  fVar3 = (float)*(uint *)(param_1 + 8);\n  if (fVar1 * fVar3 < (float)*(uint *)(param_1 + 0xc)) {\n    if (pfVar2 == (float *)&DAT_0003c7e0) {\n      fVar3 = DAT_0003c7f8 * fVar3 * DAT_0003c7fc;\n    }\n    else {\n      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||\n         (*pfVar2 < 0.0)) {\nLAB_0002a740:\n        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;\n        if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;\n        fVar3 = fVar3 * DAT_0003c7fc;\n        fVar1 = fVar5;\n      }\n      else {\n        fVar4 = *pfVar2 + DAT_0003c800;\n        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;\n        fVar3 = pfVar2[3] * fVar3;\n        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;\n      }\n      fVar3 = fVar1 * fVar3;\n    }\nLAB_0002a686:\n    if (fVar3 < DAT_0003c80c) {\n      local_3c = (undefined4)(longlong)ROUND(fVar3);\n      cVar6 = FUN_0002a2c0(param_1,local_3c);\n      if (cVar6 != '\0') {\n        iVar7 = FUN_00029790(0);\n        if (iVar7 != 0) {\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }\n        goto LAB_0002a5c0;\n      }\n    }\nLAB_0002a7b2:\n    uVar8 = 0xffffffff;\n  }\n  else {\nLAB_0002a5c0:\n    if (*local_24 == 0) {\n      *local_24 = param_2;\n      uVar8 = 1;\n      *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n      *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;\n      goto LAB_0002a55c;\n    }\n    piVar9 = *(int **)(param_1 + 0x24);\n    if (piVar9 == (int *)0x0) {\n      piVar9 = (int *)malloc(8);\n      if (piVar9 == (int *)0x0) goto LAB_0002a7b2;\n    }\n    else {\n      *(int *)(param_1 + 0x24) = piVar9[1];\n    }\n    iVar7 = local_24[1];\n    *piVar9 = param_2;\n    piVar9[1] = iVar7;\n    local_24[1] = (int)piVar9;\n    uVar8 = 1;\n    *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n  }\nLAB_0002a55c:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00038830();\n  }\n  return uVar8;\n}\n\n" comment (function_definition "undefined4 FUN_0002a500(int param_1,int param_2,int *param_3)\n\n{\n  float fVar1;\n  float *pfVar2;\n  float fVar3;\n  float fVar4;\n  float fVar5;\n  char cVar6;\n  int iVar7;\n  undefined4 uVar8;\n  int *piVar9;\n  int in_GS_OFFSET;\n  int **ppiVar10;\n  undefined4 local_3c;\n  int *local_24;\n  int local_20;\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x2a509;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  if (param_2 == 0) {\n                    /* WARNING: Subroutine does not return */\n    abort();\n  }\n  ppiVar10 = &local_24;\n  iVar7 = FUN_00029790(0);\n  fVar5 = DAT_0003c7f8;\n  if (iVar7 != 0) {\n    uVar8 = 0;\n    if (param_3 != (int *)0x0) {\n      *param_3 = iVar7;\n    }\n    goto LAB_0002a55c;\n  }\n  pfVar2 = *(float **)(param_1 + 0x14);\n  fVar1 = pfVar2[2];\n  fVar3 = (float)*(uint *)(param_1 + 8);\n  if (fVar1 * fVar3 < (float)*(uint *)(param_1 + 0xc)) {\n    if (pfVar2 == (float *)&DAT_0003c7e0) {\n      fVar3 = DAT_0003c7f8 * fVar3 * DAT_0003c7fc;\n    }\n    else {\n      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||\n         (*pfVar2 < 0.0)) {\nLAB_0002a740:\n        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;\n        if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;\n        fVar3 = fVar3 * DAT_0003c7fc;\n        fVar1 = fVar5;\n      }\n      else {\n        fVar4 = *pfVar2 + DAT_0003c800;\n        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;\n        fVar3 = pfVar2[3] * fVar3;\n        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;\n      }\n      fVar3 = fVar1 * fVar3;\n    }\nLAB_0002a686:\n    if (fVar3 < DAT_0003c80c) {\n      local_3c = (undefined4)(longlong)ROUND(fVar3);\n      cVar6 = FUN_0002a2c0(param_1,local_3c);\n      if (cVar6 != '\0') {\n        iVar7 = FUN_00029790(0);\n        if (iVar7 != 0) {\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }\n        goto LAB_0002a5c0;\n      }\n    }\nLAB_0002a7b2:\n    uVar8 = 0xffffffff;\n  }\n  else {\nLAB_0002a5c0:\n    if (*local_24 == 0) {\n      *local_24 = param_2;\n      uVar8 = 1;\n      *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n      *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;\n      goto LAB_0002a55c;\n    }\n    piVar9 = *(int **)(param_1 + 0x24);\n    if (piVar9 == (int *)0x0) {\n      piVar9 = (int *)malloc(8);\n      if (piVar9 == (int *)0x0) goto LAB_0002a7b2;\n    }\n    else {\n      *(int *)(param_1 + 0x24) = piVar9[1];\n    }\n    iVar7 = local_24[1];\n    *piVar9 = param_2;\n    piVar9[1] = iVar7;\n    local_24[1] = (int)piVar9;\n    uVar8 = 1;\n    *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n  }\nLAB_0002a55c:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00038830();\n  }\n  return uVar8;\n}" type_identifier (function_declarator "FUN_0002a500(int param_1,int param_2,int *param_3)" identifier (parameter_list "(int param_1,int param_2,int *param_3)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  float fVar1;\n  float *pfVar2;\n  float fVar3;\n  float fVar4;\n  float fVar5;\n  char cVar6;\n  int iVar7;\n  undefined4 uVar8;\n  int *piVar9;\n  int in_GS_OFFSET;\n  int **ppiVar10;\n  undefined4 local_3c;\n  int *local_24;\n  int local_20;\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x2a509;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  if (param_2 == 0) {\n                    /* WARNING: Subroutine does not return */\n    abort();\n  }\n  ppiVar10 = &local_24;\n  iVar7 = FUN_00029790(0);\n  fVar5 = DAT_0003c7f8;\n  if (iVar7 != 0) {\n    uVar8 = 0;\n    if (param_3 != (int *)0x0) {\n      *param_3 = iVar7;\n    }\n    goto LAB_0002a55c;\n  }\n  pfVar2 = *(float **)(param_1 + 0x14);\n  fVar1 = pfVar2[2];\n  fVar3 = (float)*(uint *)(param_1 + 8);\n  if (fVar1 * fVar3 < (float)*(uint *)(param_1 + 0xc)) {\n    if (pfVar2 == (float *)&DAT_0003c7e0) {\n      fVar3 = DAT_0003c7f8 * fVar3 * DAT_0003c7fc;\n    }\n    else {\n      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||\n         (*pfVar2 < 0.0)) {\nLAB_0002a740:\n        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;\n        if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;\n        fVar3 = fVar3 * DAT_0003c7fc;\n        fVar1 = fVar5;\n      }\n      else {\n        fVar4 = *pfVar2 + DAT_0003c800;\n        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;\n        fVar3 = pfVar2[3] * fVar3;\n        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;\n      }\n      fVar3 = fVar1 * fVar3;\n    }\nLAB_0002a686:\n    if (fVar3 < DAT_0003c80c) {\n      local_3c = (undefined4)(longlong)ROUND(fVar3);\n      cVar6 = FUN_0002a2c0(param_1,local_3c);\n      if (cVar6 != '\0') {\n        iVar7 = FUN_00029790(0);\n        if (iVar7 != 0) {\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }\n        goto LAB_0002a5c0;\n      }\n    }\nLAB_0002a7b2:\n    uVar8 = 0xffffffff;\n  }\n  else {\nLAB_0002a5c0:\n    if (*local_24 == 0) {\n      *local_24 = param_2;\n      uVar8 = 1;\n      *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n      *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;\n      goto LAB_0002a55c;\n    }\n    piVar9 = *(int **)(param_1 + 0x24);\n    if (piVar9 == (int *)0x0) {\n      piVar9 = (int *)malloc(8);\n      if (piVar9 == (int *)0x0) goto LAB_0002a7b2;\n    }\n    else {\n      *(int *)(param_1 + 0x24) = piVar9[1];\n    }\n    iVar7 = local_24[1];\n    *piVar9 = param_2;\n    piVar9[1] = iVar7;\n    local_24[1] = (int)piVar9;\n    uVar8 = 1;\n    *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n  }\nLAB_0002a55c:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00038830();\n  }\n  return uVar8;\n}" { (declaration "float fVar1;" primitive_type identifier ;) (declaration "float *pfVar2;" primitive_type (pointer_declarator "*pfVar2" * identifier) ;) (declaration "float fVar3;" primitive_type identifier ;) (declaration "float fVar4;" primitive_type identifier ;) (declaration "float fVar5;" primitive_type identifier ;) (declaration "char cVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "undefined4 uVar8;" type_identifier identifier ;) (declaration "int *piVar9;" primitive_type (pointer_declarator "*piVar9" * identifier) ;) (declaration "int in_GS_OFFSET;" primitive_type identifier ;) (declaration "int **ppiVar10;" primitive_type (pointer_declarator "**ppiVar10" * (pointer_declarator "*ppiVar10" * identifier)) ;) (declaration "undefined4 local_3c;" type_identifier identifier ;) (declaration "int *local_24;" primitive_type (pointer_declarator "*local_24" * identifier) ;) (declaration "int local_20;" primitive_type identifier ;) (declaration "undefined4 uStack_14;" type_identifier identifier ;) (expression_statement "uStack_14 = 0x2a509;" (assignment_expression "uStack_14 = 0x2a509" 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) ))))) ;) (if_statement "if (param_2 == 0) {\n                    /* WARNING: Subroutine does not return */\n    abort();\n  }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    abort();\n  }" { comment (expression_statement "abort();" (call_expression "abort()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "ppiVar10 = &local_24;" (assignment_expression "ppiVar10 = &local_24" identifier = (pointer_expression "&local_24" & identifier)) ;) (expression_statement "iVar7 = FUN_00029790(0);" (assignment_expression "iVar7 = FUN_00029790(0)" identifier = (call_expression "FUN_00029790(0)" identifier (argument_list "(0)" ( number_literal )))) ;) (expression_statement "fVar5 = DAT_0003c7f8;" (assignment_expression "fVar5 = DAT_0003c7f8" identifier = identifier) ;) (if_statement "if (iVar7 != 0) {\n    uVar8 = 0;\n    if (param_3 != (int *)0x0) {\n      *param_3 = iVar7;\n    }\n    goto LAB_0002a55c;\n  }" if (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) (compound_statement "{\n    uVar8 = 0;\n    if (param_3 != (int *)0x0) {\n      *param_3 = iVar7;\n    }\n    goto LAB_0002a55c;\n  }" { (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" identifier = number_literal) ;) (if_statement "if (param_3 != (int *)0x0) {\n      *param_3 = iVar7;\n    }" if (parenthesized_expression "(param_3 != (int *)0x0)" ( (binary_expression "param_3 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      *param_3 = iVar7;\n    }" { (expression_statement "*param_3 = iVar7;" (assignment_expression "*param_3 = iVar7" (pointer_expression "*param_3" * identifier) = identifier) ;) })) (goto_statement "goto LAB_0002a55c;" goto statement_identifier ;) })) (expression_statement "pfVar2 = *(float **)(param_1 + 0x14);" (assignment_expression "pfVar2 = *(float **)(param_1 + 0x14)" identifier = (pointer_expression "*(float **)(param_1 + 0x14)" * (cast_expression "(float **)(param_1 + 0x14)" ( (type_descriptor "float **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "fVar1 = pfVar2[2];" (assignment_expression "fVar1 = pfVar2[2]" identifier = (subscript_expression "pfVar2[2]" identifier [ number_literal ])) ;) (expression_statement "fVar3 = (float)*(uint *)(param_1 + 8);" (assignment_expression "fVar3 = (float)*(uint *)(param_1 + 8)" identifier = (cast_expression "(float)*(uint *)(param_1 + 8)" ( (type_descriptor "float" primitive_type) ) (pointer_expression "*(uint *)(param_1 + 8)" * (cast_expression "(uint *)(param_1 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))))) ;) (if_statement "if (fVar1 * fVar3 < (float)*(uint *)(param_1 + 0xc)) {\n    if (pfVar2 == (float *)&DAT_0003c7e0) {\n      fVar3 = DAT_0003c7f8 * fVar3 * DAT_0003c7fc;\n    }\n    else {\n      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||\n         (*pfVar2 < 0.0)) {\nLAB_0002a740:\n        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;\n        if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;\n        fVar3 = fVar3 * DAT_0003c7fc;\n        fVar1 = fVar5;\n      }\n      else {\n        fVar4 = *pfVar2 + DAT_0003c800;\n        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;\n        fVar3 = pfVar2[3] * fVar3;\n        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;\n      }\n      fVar3 = fVar1 * fVar3;\n    }\nLAB_0002a686:\n    if (fVar3 < DAT_0003c80c) {\n      local_3c = (undefined4)(longlong)ROUND(fVar3);\n      cVar6 = FUN_0002a2c0(param_1,local_3c);\n      if (cVar6 != '\0') {\n        iVar7 = FUN_00029790(0);\n        if (iVar7 != 0) {\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }\n        goto LAB_0002a5c0;\n      }\n    }\nLAB_0002a7b2:\n    uVar8 = 0xffffffff;\n  }\n  else {\nLAB_0002a5c0:\n    if (*local_24 == 0) {\n      *local_24 = param_2;\n      uVar8 = 1;\n      *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n      *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;\n      goto LAB_0002a55c;\n    }\n    piVar9 = *(int **)(param_1 + 0x24);\n    if (piVar9 == (int *)0x0) {\n      piVar9 = (int *)malloc(8);\n      if (piVar9 == (int *)0x0) goto LAB_0002a7b2;\n    }\n    else {\n      *(int *)(param_1 + 0x24) = piVar9[1];\n    }\n    iVar7 = local_24[1];\n    *piVar9 = param_2;\n    piVar9[1] = iVar7;\n    local_24[1] = (int)piVar9;\n    uVar8 = 1;\n    *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n  }" if (parenthesized_expression "(fVar1 * fVar3 < (float)*(uint *)(param_1 + 0xc))" ( (binary_expression "fVar1 * fVar3 < (float)*(uint *)(param_1 + 0xc)" (binary_expression "fVar1 * fVar3" identifier * identifier) < (cast_expression "(float)*(uint *)(param_1 + 0xc)" ( (type_descriptor "float" primitive_type) ) (pointer_expression "*(uint *)(param_1 + 0xc)" * (cast_expression "(uint *)(param_1 + 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))))) )) (compound_statement "{\n    if (pfVar2 == (float *)&DAT_0003c7e0) {\n      fVar3 = DAT_0003c7f8 * fVar3 * DAT_0003c7fc;\n    }\n    else {\n      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||\n         (*pfVar2 < 0.0)) {\nLAB_0002a740:\n        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;\n        if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;\n        fVar3 = fVar3 * DAT_0003c7fc;\n        fVar1 = fVar5;\n      }\n      else {\n        fVar4 = *pfVar2 + DAT_0003c800;\n        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;\n        fVar3 = pfVar2[3] * fVar3;\n        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;\n      }\n      fVar3 = fVar1 * fVar3;\n    }\nLAB_0002a686:\n    if (fVar3 < DAT_0003c80c) {\n      local_3c = (undefined4)(longlong)ROUND(fVar3);\n      cVar6 = FUN_0002a2c0(param_1,local_3c);\n      if (cVar6 != '\0') {\n        iVar7 = FUN_00029790(0);\n        if (iVar7 != 0) {\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }\n        goto LAB_0002a5c0;\n      }\n    }\nLAB_0002a7b2:\n    uVar8 = 0xffffffff;\n  }" { (if_statement "if (pfVar2 == (float *)&DAT_0003c7e0) {\n      fVar3 = DAT_0003c7f8 * fVar3 * DAT_0003c7fc;\n    }\n    else {\n      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||\n         (*pfVar2 < 0.0)) {\nLAB_0002a740:\n        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;\n        if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;\n        fVar3 = fVar3 * DAT_0003c7fc;\n        fVar1 = fVar5;\n      }\n      else {\n        fVar4 = *pfVar2 + DAT_0003c800;\n        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;\n        fVar3 = pfVar2[3] * fVar3;\n        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;\n      }\n      fVar3 = fVar1 * fVar3;\n    }" if (parenthesized_expression "(pfVar2 == (float *)&DAT_0003c7e0)" ( (binary_expression "pfVar2 == (float *)&DAT_0003c7e0" identifier == (cast_expression "(float *)&DAT_0003c7e0" ( (type_descriptor "float *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&DAT_0003c7e0" & identifier))) )) (compound_statement "{\n      fVar3 = DAT_0003c7f8 * fVar3 * DAT_0003c7fc;\n    }" { (expression_statement "fVar3 = DAT_0003c7f8 * fVar3 * DAT_0003c7fc;" (assignment_expression "fVar3 = DAT_0003c7f8 * fVar3 * DAT_0003c7fc" identifier = (binary_expression "DAT_0003c7f8 * fVar3 * DAT_0003c7fc" (binary_expression "DAT_0003c7f8 * fVar3" identifier * identifier) * identifier)) ;) }) (else_clause "else {\n      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||\n         (*pfVar2 < 0.0)) {\nLAB_0002a740:\n        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;\n        if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;\n        fVar3 = fVar3 * DAT_0003c7fc;\n        fVar1 = fVar5;\n      }\n      else {\n        fVar4 = *pfVar2 + DAT_0003c800;\n        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;\n        fVar3 = pfVar2[3] * fVar3;\n        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;\n      }\n      fVar3 = fVar1 * fVar3;\n    }" else (compound_statement "{\n      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||\n         (*pfVar2 < 0.0)) {\nLAB_0002a740:\n        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;\n        if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;\n        fVar3 = fVar3 * DAT_0003c7fc;\n        fVar1 = fVar5;\n      }\n      else {\n        fVar4 = *pfVar2 + DAT_0003c800;\n        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;\n        fVar3 = pfVar2[3] * fVar3;\n        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;\n      }\n      fVar3 = fVar1 * fVar3;\n    }" { (if_statement "if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||\n         (*pfVar2 < 0.0)) {\nLAB_0002a740:\n        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;\n        if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;\n        fVar3 = fVar3 * DAT_0003c7fc;\n        fVar1 = fVar5;\n      }\n      else {\n        fVar4 = *pfVar2 + DAT_0003c800;\n        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;\n        fVar3 = pfVar2[3] * fVar3;\n        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;\n      }" if (parenthesized_expression "((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||\n         (*pfVar2 < 0.0))" ( (binary_expression "(((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||\n         (*pfVar2 < 0.0)" (parenthesized_expression "(((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808))" ( (binary_expression "((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)" (parenthesized_expression "((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1))" ( (binary_expression "(fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)" (parenthesized_expression "(fVar1 <= DAT_0003c800)" ( (binary_expression "fVar1 <= DAT_0003c800" identifier <= identifier) )) || (parenthesized_expression "(DAT_0003c804 <= fVar1)" ( (binary_expression "DAT_0003c804 <= fVar1" identifier <= identifier) ))) )) || (parenthesized_expression "(pfVar2[3] <= DAT_0003c808)" ( (binary_expression "pfVar2[3] <= DAT_0003c808" (subscript_expression "pfVar2[3]" identifier [ number_literal ]) <= identifier) ))) )) || (parenthesized_expression "(*pfVar2 < 0.0)" ( (binary_expression "*pfVar2 < 0.0" (pointer_expression "*pfVar2" * identifier) < number_literal) ))) )) (compound_statement "{\nLAB_0002a740:\n        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;\n        if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;\n        fVar3 = fVar3 * DAT_0003c7fc;\n        fVar1 = fVar5;\n      }" { (labeled_statement "LAB_0002a740:\n        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;" statement_identifier : (expression_statement "*(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;" (assignment_expression "*(undefined **)(param_1 + 0x14) = &DAT_0003c7e0" (pointer_expression "*(undefined **)(param_1 + 0x14)" * (cast_expression "(undefined **)(param_1 + 0x14)" ( (type_descriptor "undefined **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = (pointer_expression "&DAT_0003c7e0" & identifier)) ;)) (if_statement "if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;" if (parenthesized_expression "((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3)" ( (binary_expression "(float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3" (cast_expression "(float)*(uint *)(param_1 + 0xc)" ( (type_descriptor "float" primitive_type) ) (pointer_expression "*(uint *)(param_1 + 0xc)" * (cast_expression "(uint *)(param_1 + 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) ))))) <= (binary_expression "fVar5 * fVar3" identifier * identifier)) )) (goto_statement "goto LAB_0002a5c0;" goto statement_identifier ;)) (expression_statement "fVar3 = fVar3 * DAT_0003c7fc;" (assignment_expression "fVar3 = fVar3 * DAT_0003c7fc" identifier = (binary_expression "fVar3 * DAT_0003c7fc" identifier * identifier)) ;) (expression_statement "fVar1 = fVar5;" (assignment_expression "fVar1 = fVar5" identifier = identifier) ;) }) (else_clause "else {\n        fVar4 = *pfVar2 + DAT_0003c800;\n        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;\n        fVar3 = pfVar2[3] * fVar3;\n        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;\n      }" else (compound_statement "{\n        fVar4 = *pfVar2 + DAT_0003c800;\n        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;\n        fVar3 = pfVar2[3] * fVar3;\n        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;\n      }" { (expression_statement "fVar4 = *pfVar2 + DAT_0003c800;" (assignment_expression "fVar4 = *pfVar2 + DAT_0003c800" identifier = (binary_expression "*pfVar2 + DAT_0003c800" (pointer_expression "*pfVar2" * identifier) + identifier)) ;) (if_statement "if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;" if (parenthesized_expression "(((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4))" ( (binary_expression "((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)" (parenthesized_expression "((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1]))" ( (binary_expression "(pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])" (parenthesized_expression "(pfVar2[1] <= fVar4)" ( (binary_expression "pfVar2[1] <= fVar4" (subscript_expression "pfVar2[1]" identifier [ number_literal ]) <= identifier) )) || (parenthesized_expression "(1.0 < pfVar2[1])" ( (binary_expression "1.0 < pfVar2[1]" number_literal < (subscript_expression "pfVar2[1]" identifier [ number_literal ])) ))) )) || (parenthesized_expression "(fVar1 <= fVar4)" ( (binary_expression "fVar1 <= fVar4" identifier <= identifier) ))) )) (goto_statement "goto LAB_0002a740;" goto statement_identifier ;)) (expression_statement "fVar3 = pfVar2[3] * fVar3;" (assignment_expression "fVar3 = pfVar2[3] * fVar3" identifier = (binary_expression "pfVar2[3] * fVar3" (subscript_expression "pfVar2[3]" identifier [ number_literal ]) * identifier)) ;) (if_statement "if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;" if (parenthesized_expression "(*(char *)(pfVar2 + 4) != '\0')" ( (binary_expression "*(char *)(pfVar2 + 4) != '\0'" (pointer_expression "*(char *)(pfVar2 + 4)" * (cast_expression "(char *)(pfVar2 + 4)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pfVar2 + 4)" ( (binary_expression "pfVar2 + 4" identifier + number_literal) )))) != (char_literal "'\0'" ' escape_sequence ')) )) (goto_statement "goto LAB_0002a686;" goto statement_identifier ;)) }))) (expression_statement "fVar3 = fVar1 * fVar3;" (assignment_expression "fVar3 = fVar1 * fVar3" identifier = (binary_expression "fVar1 * fVar3" identifier * identifier)) ;) }))) (labeled_statement "LAB_0002a686:\n    if (fVar3 < DAT_0003c80c) {\n      local_3c = (undefined4)(longlong)ROUND(fVar3);\n      cVar6 = FUN_0002a2c0(param_1,local_3c);\n      if (cVar6 != '\0') {\n        iVar7 = FUN_00029790(0);\n        if (iVar7 != 0) {\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }\n        goto LAB_0002a5c0;\n      }\n    }" statement_identifier : (if_statement "if (fVar3 < DAT_0003c80c) {\n      local_3c = (undefined4)(longlong)ROUND(fVar3);\n      cVar6 = FUN_0002a2c0(param_1,local_3c);\n      if (cVar6 != '\0') {\n        iVar7 = FUN_00029790(0);\n        if (iVar7 != 0) {\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }\n        goto LAB_0002a5c0;\n      }\n    }" if (parenthesized_expression "(fVar3 < DAT_0003c80c)" ( (binary_expression "fVar3 < DAT_0003c80c" identifier < identifier) )) (compound_statement "{\n      local_3c = (undefined4)(longlong)ROUND(fVar3);\n      cVar6 = FUN_0002a2c0(param_1,local_3c);\n      if (cVar6 != '\0') {\n        iVar7 = FUN_00029790(0);\n        if (iVar7 != 0) {\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }\n        goto LAB_0002a5c0;\n      }\n    }" { (expression_statement "local_3c = (undefined4)(longlong)ROUND(fVar3);" (assignment_expression "local_3c = (undefined4)(longlong)ROUND(fVar3)" identifier = (cast_expression "(undefined4)(longlong)ROUND(fVar3)" ( (type_descriptor "undefined4" type_identifier) ) (cast_expression "(longlong)ROUND(fVar3)" ( (type_descriptor "longlong" type_identifier) ) (call_expression "ROUND(fVar3)" identifier (argument_list "(fVar3)" ( identifier )))))) ;) (expression_statement "cVar6 = FUN_0002a2c0(param_1,local_3c);" (assignment_expression "cVar6 = FUN_0002a2c0(param_1,local_3c)" identifier = (call_expression "FUN_0002a2c0(param_1,local_3c)" identifier (argument_list "(param_1,local_3c)" ( identifier , identifier )))) ;) (if_statement "if (cVar6 != '\0') {\n        iVar7 = FUN_00029790(0);\n        if (iVar7 != 0) {\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }\n        goto LAB_0002a5c0;\n      }" if (parenthesized_expression "(cVar6 != '\0')" ( (binary_expression "cVar6 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        iVar7 = FUN_00029790(0);\n        if (iVar7 != 0) {\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }\n        goto LAB_0002a5c0;\n      }" { (expression_statement "iVar7 = FUN_00029790(0);" (assignment_expression "iVar7 = FUN_00029790(0)" identifier = (call_expression "FUN_00029790(0)" identifier (argument_list "(0)" ( number_literal )))) ;) (if_statement "if (iVar7 != 0) {\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }" if (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) (compound_statement "{\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }" { (expression_statement "uVar8 = FUN_0001278e(ppiVar10);" (assignment_expression "uVar8 = FUN_0001278e(ppiVar10)" identifier = (call_expression "FUN_0001278e(ppiVar10)" identifier (argument_list "(ppiVar10)" ( identifier )))) ;) (return_statement "return uVar8;" return identifier ;) })) (goto_statement "goto LAB_0002a5c0;" goto statement_identifier ;) })) }))) (labeled_statement "LAB_0002a7b2:\n    uVar8 = 0xffffffff;" statement_identifier : (expression_statement "uVar8 = 0xffffffff;" (assignment_expression "uVar8 = 0xffffffff" identifier = number_literal) ;)) }) (else_clause "else {\nLAB_0002a5c0:\n    if (*local_24 == 0) {\n      *local_24 = param_2;\n      uVar8 = 1;\n      *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n      *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;\n      goto LAB_0002a55c;\n    }\n    piVar9 = *(int **)(param_1 + 0x24);\n    if (piVar9 == (int *)0x0) {\n      piVar9 = (int *)malloc(8);\n      if (piVar9 == (int *)0x0) goto LAB_0002a7b2;\n    }\n    else {\n      *(int *)(param_1 + 0x24) = piVar9[1];\n    }\n    iVar7 = local_24[1];\n    *piVar9 = param_2;\n    piVar9[1] = iVar7;\n    local_24[1] = (int)piVar9;\n    uVar8 = 1;\n    *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n  }" else (compound_statement "{\nLAB_0002a5c0:\n    if (*local_24 == 0) {\n      *local_24 = param_2;\n      uVar8 = 1;\n      *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n      *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;\n      goto LAB_0002a55c;\n    }\n    piVar9 = *(int **)(param_1 + 0x24);\n    if (piVar9 == (int *)0x0) {\n      piVar9 = (int *)malloc(8);\n      if (piVar9 == (int *)0x0) goto LAB_0002a7b2;\n    }\n    else {\n      *(int *)(param_1 + 0x24) = piVar9[1];\n    }\n    iVar7 = local_24[1];\n    *piVar9 = param_2;\n    piVar9[1] = iVar7;\n    local_24[1] = (int)piVar9;\n    uVar8 = 1;\n    *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n  }" { (labeled_statement "LAB_0002a5c0:\n    if (*local_24 == 0) {\n      *local_24 = param_2;\n      uVar8 = 1;\n      *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n      *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;\n      goto LAB_0002a55c;\n    }" statement_identifier : (if_statement "if (*local_24 == 0) {\n      *local_24 = param_2;\n      uVar8 = 1;\n      *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n      *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;\n      goto LAB_0002a55c;\n    }" if (parenthesized_expression "(*local_24 == 0)" ( (binary_expression "*local_24 == 0" (pointer_expression "*local_24" * identifier) == number_literal) )) (compound_statement "{\n      *local_24 = param_2;\n      uVar8 = 1;\n      *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n      *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;\n      goto LAB_0002a55c;\n    }" { (expression_statement "*local_24 = param_2;" (assignment_expression "*local_24 = param_2" (pointer_expression "*local_24" * identifier) = identifier) ;) (expression_statement "uVar8 = 1;" (assignment_expression "uVar8 = 1" identifier = number_literal) ;) (expression_statement "*(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;" (assignment_expression "*(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1" (pointer_expression "*(int *)(param_1 + 0x10)" * (cast_expression "(int *)(param_1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) = (binary_expression "*(int *)(param_1 + 0x10) + 1" (pointer_expression "*(int *)(param_1 + 0x10)" * (cast_expression "(int *)(param_1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "*(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;" (assignment_expression "*(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1" (pointer_expression "*(int *)(param_1 + 0xc)" * (cast_expression "(int *)(param_1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) = (binary_expression "*(int *)(param_1 + 0xc) + 1" (pointer_expression "*(int *)(param_1 + 0xc)" * (cast_expression "(int *)(param_1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) + number_literal)) ;) (goto_statement "goto LAB_0002a55c;" goto statement_identifier ;) }))) (expression_statement "piVar9 = *(int **)(param_1 + 0x24);" (assignment_expression "piVar9 = *(int **)(param_1 + 0x24)" identifier = (pointer_expression "*(int **)(param_1 + 0x24)" * (cast_expression "(int **)(param_1 + 0x24)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x24)" ( (binary_expression "param_1 + 0x24" identifier + number_literal) ))))) ;) (if_statement "if (piVar9 == (int *)0x0) {\n      piVar9 = (int *)malloc(8);\n      if (piVar9 == (int *)0x0) goto LAB_0002a7b2;\n    }\n    else {\n      *(int *)(param_1 + 0x24) = piVar9[1];\n    }" if (parenthesized_expression "(piVar9 == (int *)0x0)" ( (binary_expression "piVar9 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      piVar9 = (int *)malloc(8);\n      if (piVar9 == (int *)0x0) goto LAB_0002a7b2;\n    }" { (expression_statement "piVar9 = (int *)malloc(8);" (assignment_expression "piVar9 = (int *)malloc(8)" identifier = (cast_expression "(int *)malloc(8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "malloc(8)" identifier (argument_list "(8)" ( number_literal ))))) ;) (if_statement "if (piVar9 == (int *)0x0) goto LAB_0002a7b2;" if (parenthesized_expression "(piVar9 == (int *)0x0)" ( (binary_expression "piVar9 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0002a7b2;" goto statement_identifier ;)) }) (else_clause "else {\n      *(int *)(param_1 + 0x24) = piVar9[1];\n    }" else (compound_statement "{\n      *(int *)(param_1 + 0x24) = piVar9[1];\n    }" { (expression_statement "*(int *)(param_1 + 0x24) = piVar9[1];" (assignment_expression "*(int *)(param_1 + 0x24) = piVar9[1]" (pointer_expression "*(int *)(param_1 + 0x24)" * (cast_expression "(int *)(param_1 + 0x24)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x24)" ( (binary_expression "param_1 + 0x24" identifier + number_literal) )))) = (subscript_expression "piVar9[1]" identifier [ number_literal ])) ;) }))) (expression_statement "iVar7 = local_24[1];" (assignment_expression "iVar7 = local_24[1]" identifier = (subscript_expression "local_24[1]" identifier [ number_literal ])) ;) (expression_statement "*piVar9 = param_2;" (assignment_expression "*piVar9 = param_2" (pointer_expression "*piVar9" * identifier) = identifier) ;) (expression_statement "piVar9[1] = iVar7;" (assignment_expression "piVar9[1] = iVar7" (subscript_expression "piVar9[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "local_24[1] = (int)piVar9;" (assignment_expression "local_24[1] = (int)piVar9" (subscript_expression "local_24[1]" identifier [ number_literal ]) = (cast_expression "(int)piVar9" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "uVar8 = 1;" (assignment_expression "uVar8 = 1" identifier = number_literal) ;) (expression_statement "*(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;" (assignment_expression "*(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1" (pointer_expression "*(int *)(param_1 + 0x10)" * (cast_expression "(int *)(param_1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) = (binary_expression "*(int *)(param_1 + 0x10) + 1" (pointer_expression "*(int *)(param_1 + 0x10)" * (cast_expression "(int *)(param_1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) + number_literal)) ;) }))) (labeled_statement "LAB_0002a55c:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00038830();\n  }" statement_identifier : (if_statement "if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00038830();\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                    /* WARNING: Subroutine does not return */\n    FUN_00038830();\n  }" { comment (expression_statement "FUN_00038830();" (call_expression "FUN_00038830()" identifier (argument_list "()" ( ))) ;) }))) (return_statement "return uVar8;" return identifier ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n/* WARNING: Unknown calling convention */\n\nint hash_insert_if_absent(Hash_table *table,void *entry,void **matched_ent)\n\n{\n  float fVar1;\n  Hash_tuning *pHVar2;\n  hash_entry *phVar3;\n  float fVar4;\n  float fVar5;\n  float fVar6;\n  _Bool _Var7;\n  void *pvVar8;\n  int iVar9;\n  hash_entry *phVar10;\n  int in_GS_OFFSET;\n  size_t sStack_3c;\n  hash_entry *bucket;\n  int local_20;\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x2a509;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  if (entry == (void *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    abort();\n  }\n  pvVar8 = hash_find_entry(table,entry,&bucket,false);\n  fVar6 = DAT_0003c7f8;\n  if (pvVar8 != (void *)0x0) {\n    iVar9 = 0;\n    if (matched_ent != (void **)0x0) {\n      *matched_ent = pvVar8;\n    }\n    goto LAB_0002a55c;\n  }\n  pHVar2 = table->tuning;\n  fVar1 = pHVar2->growth_threshold;\n  fVar4 = (float)table->n_buckets;\n  if (fVar1 * fVar4 < (float)table->n_buckets_used) {\n    if (pHVar2 == &default_tuning) {\n      fVar4 = DAT_0003c7f8 * fVar4 * DAT_0003c7fc;\n    }\n    else {\n      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) ||\n          (pHVar2->growth_factor <= DAT_0003c808)) || (pHVar2->shrink_threshold < 0.0)) {\nLAB_0002a740:\n        table->tuning = &default_tuning;\n        if ((float)table->n_buckets_used <= fVar6 * fVar4) goto LAB_0002a5c0;\n        fVar4 = fVar4 * DAT_0003c7fc;\n        fVar1 = fVar6;\n      }\n      else {\n        fVar5 = pHVar2->shrink_threshold + DAT_0003c800;\n        if (((pHVar2->shrink_factor <= fVar5) || (1.0 < pHVar2->shrink_factor)) || (fVar1 <= fVar5))\n        goto LAB_0002a740;\n        fVar4 = pHVar2->growth_factor * fVar4;\n        if (pHVar2->is_n_buckets != false) goto LAB_0002a686;\n      }\n      fVar4 = fVar1 * fVar4;\n    }\nLAB_0002a686:\n    if (fVar4 < DAT_0003c80c) {\n      sStack_3c = (size_t)(longlong)ROUND(fVar4);\n      _Var7 = hash_rehash(table,sStack_3c);\n      if (_Var7) {\n        pvVar8 = hash_find_entry(table,entry,&bucket,false);\n        if (pvVar8 != (void *)0x0) {\n          iVar9 = hash_insert_if_absent_cold_11();\n          return iVar9;\n        }\n        goto LAB_0002a5c0;\n      }\n    }\nLAB_0002a7b2:\n    iVar9 = -1;\n  }\n  else {\nLAB_0002a5c0:\n    if (bucket->data == (void *)0x0) {\n      bucket->data = entry;\n      iVar9 = 1;\n      table->n_entries = table->n_entries + 1;\n      table->n_buckets_used = table->n_buckets_used + 1;\n      goto LAB_0002a55c;\n    }\n    phVar10 = table->free_entry_list;\n    if (phVar10 == (hash_entry *)0x0) {\n      phVar10 = (hash_entry *)malloc(8);\n      if (phVar10 == (hash_entry *)0x0) goto LAB_0002a7b2;\n    }\n    else {\n      table->free_entry_list = phVar10->next;\n    }\n    phVar3 = bucket->next;\n    phVar10->data = entry;\n    phVar10->next = phVar3;\n    bucket->next = phVar10;\n    iVar9 = 1;\n    table->n_entries = table->n_entries + 1;\n  }\nLAB_0002a55c:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }\n  return iVar9;\n}\n\n" comment comment (function_definition "int hash_insert_if_absent(Hash_table *table,void *entry,void **matched_ent)\n\n{\n  float fVar1;\n  Hash_tuning *pHVar2;\n  hash_entry *phVar3;\n  float fVar4;\n  float fVar5;\n  float fVar6;\n  _Bool _Var7;\n  void *pvVar8;\n  int iVar9;\n  hash_entry *phVar10;\n  int in_GS_OFFSET;\n  size_t sStack_3c;\n  hash_entry *bucket;\n  int local_20;\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x2a509;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  if (entry == (void *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    abort();\n  }\n  pvVar8 = hash_find_entry(table,entry,&bucket,false);\n  fVar6 = DAT_0003c7f8;\n  if (pvVar8 != (void *)0x0) {\n    iVar9 = 0;\n    if (matched_ent != (void **)0x0) {\n      *matched_ent = pvVar8;\n    }\n    goto LAB_0002a55c;\n  }\n  pHVar2 = table->tuning;\n  fVar1 = pHVar2->growth_threshold;\n  fVar4 = (float)table->n_buckets;\n  if (fVar1 * fVar4 < (float)table->n_buckets_used) {\n    if (pHVar2 == &default_tuning) {\n      fVar4 = DAT_0003c7f8 * fVar4 * DAT_0003c7fc;\n    }\n    else {\n      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) ||\n          (pHVar2->growth_factor <= DAT_0003c808)) || (pHVar2->shrink_threshold < 0.0)) {\nLAB_0002a740:\n        table->tuning = &default_tuning;\n        if ((float)table->n_buckets_used <= fVar6 * fVar4) goto LAB_0002a5c0;\n        fVar4 = fVar4 * DAT_0003c7fc;\n        fVar1 = fVar6;\n      }\n      else {\n        fVar5 = pHVar2->shrink_threshold + DAT_0003c800;\n        if (((pHVar2->shrink_factor <= fVar5) || (1.0 < pHVar2->shrink_factor)) || (fVar1 <= fVar5))\n        goto LAB_0002a740;\n        fVar4 = pHVar2->growth_factor * fVar4;\n        if (pHVar2->is_n_buckets != false) goto LAB_0002a686;\n      }\n      fVar4 = fVar1 * fVar4;\n    }\nLAB_0002a686:\n    if (fVar4 < DAT_0003c80c) {\n      sStack_3c = (size_t)(longlong)ROUND(fVar4);\n      _Var7 = hash_rehash(table,sStack_3c);\n      if (_Var7) {\n        pvVar8 = hash_find_entry(table,entry,&bucket,false);\n        if (pvVar8 != (void *)0x0) {\n          iVar9 = hash_insert_if_absent_cold_11();\n          return iVar9;\n        }\n        goto LAB_0002a5c0;\n      }\n    }\nLAB_0002a7b2:\n    iVar9 = -1;\n  }\n  else {\nLAB_0002a5c0:\n    if (bucket->data == (void *)0x0) {\n      bucket->data = entry;\n      iVar9 = 1;\n      table->n_entries = table->n_entries + 1;\n      table->n_buckets_used = table->n_buckets_used + 1;\n      goto LAB_0002a55c;\n    }\n    phVar10 = table->free_entry_list;\n    if (phVar10 == (hash_entry *)0x0) {\n      phVar10 = (hash_entry *)malloc(8);\n      if (phVar10 == (hash_entry *)0x0) goto LAB_0002a7b2;\n    }\n    else {\n      table->free_entry_list = phVar10->next;\n    }\n    phVar3 = bucket->next;\n    phVar10->data = entry;\n    phVar10->next = phVar3;\n    bucket->next = phVar10;\n    iVar9 = 1;\n    table->n_entries = table->n_entries + 1;\n  }\nLAB_0002a55c:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }\n  return iVar9;\n}" primitive_type (function_declarator "hash_insert_if_absent(Hash_table *table,void *entry,void **matched_ent)" identifier (parameter_list "(Hash_table *table,void *entry,void **matched_ent)" ( (parameter_declaration "Hash_table *table" type_identifier (pointer_declarator "*table" * identifier)) , (parameter_declaration "void *entry" primitive_type (pointer_declarator "*entry" * identifier)) , (parameter_declaration "void **matched_ent" primitive_type (pointer_declarator "**matched_ent" * (pointer_declarator "*matched_ent" * identifier))) ))) (compound_statement "{\n  float fVar1;\n  Hash_tuning *pHVar2;\n  hash_entry *phVar3;\n  float fVar4;\n  float fVar5;\n  float fVar6;\n  _Bool _Var7;\n  void *pvVar8;\n  int iVar9;\n  hash_entry *phVar10;\n  int in_GS_OFFSET;\n  size_t sStack_3c;\n  hash_entry *bucket;\n  int local_20;\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x2a509;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  if (entry == (void *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    abort();\n  }\n  pvVar8 = hash_find_entry(table,entry,&bucket,false);\n  fVar6 = DAT_0003c7f8;\n  if (pvVar8 != (void *)0x0) {\n    iVar9 = 0;\n    if (matched_ent != (void **)0x0) {\n      *matched_ent = pvVar8;\n    }\n    goto LAB_0002a55c;\n  }\n  pHVar2 = table->tuning;\n  fVar1 = pHVar2->growth_threshold;\n  fVar4 = (float)table->n_buckets;\n  if (fVar1 * fVar4 < (float)table->n_buckets_used) {\n    if (pHVar2 == &default_tuning) {\n      fVar4 = DAT_0003c7f8 * fVar4 * DAT_0003c7fc;\n    }\n    else {\n      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) ||\n          (pHVar2->growth_factor <= DAT_0003c808)) || (pHVar2->shrink_threshold < 0.0)) {\nLAB_0002a740:\n        table->tuning = &default_tuning;\n        if ((float)table->n_buckets_used <= fVar6 * fVar4) goto LAB_0002a5c0;\n        fVar4 = fVar4 * DAT_0003c7fc;\n        fVar1 = fVar6;\n      }\n      else {\n        fVar5 = pHVar2->shrink_threshold + DAT_0003c800;\n        if (((pHVar2->shrink_factor <= fVar5) || (1.0 < pHVar2->shrink_factor)) || (fVar1 <= fVar5))\n        goto LAB_0002a740;\n        fVar4 = pHVar2->growth_factor * fVar4;\n        if (pHVar2->is_n_buckets != false) goto LAB_0002a686;\n      }\n      fVar4 = fVar1 * fVar4;\n    }\nLAB_0002a686:\n    if (fVar4 < DAT_0003c80c) {\n      sStack_3c = (size_t)(longlong)ROUND(fVar4);\n      _Var7 = hash_rehash(table,sStack_3c);\n      if (_Var7) {\n        pvVar8 = hash_find_entry(table,entry,&bucket,false);\n        if (pvVar8 != (void *)0x0) {\n          iVar9 = hash_insert_if_absent_cold_11();\n          return iVar9;\n        }\n        goto LAB_0002a5c0;\n      }\n    }\nLAB_0002a7b2:\n    iVar9 = -1;\n  }\n  else {\nLAB_0002a5c0:\n    if (bucket->data == (void *)0x0) {\n      bucket->data = entry;\n      iVar9 = 1;\n      table->n_entries = table->n_entries + 1;\n      table->n_buckets_used = table->n_buckets_used + 1;\n      goto LAB_0002a55c;\n    }\n    phVar10 = table->free_entry_list;\n    if (phVar10 == (hash_entry *)0x0) {\n      phVar10 = (hash_entry *)malloc(8);\n      if (phVar10 == (hash_entry *)0x0) goto LAB_0002a7b2;\n    }\n    else {\n      table->free_entry_list = phVar10->next;\n    }\n    phVar3 = bucket->next;\n    phVar10->data = entry;\n    phVar10->next = phVar3;\n    bucket->next = phVar10;\n    iVar9 = 1;\n    table->n_entries = table->n_entries + 1;\n  }\nLAB_0002a55c:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }\n  return iVar9;\n}" { (declaration "float fVar1;" primitive_type identifier ;) (declaration "Hash_tuning *pHVar2;" type_identifier (pointer_declarator "*pHVar2" * identifier) ;) (declaration "hash_entry *phVar3;" type_identifier (pointer_declarator "*phVar3" * identifier) ;) (declaration "float fVar4;" primitive_type identifier ;) (declaration "float fVar5;" primitive_type identifier ;) (declaration "float fVar6;" primitive_type identifier ;) (declaration "_Bool _Var7;" type_identifier identifier ;) (declaration "void *pvVar8;" primitive_type (pointer_declarator "*pvVar8" * identifier) ;) (declaration "int iVar9;" primitive_type identifier ;) (declaration "hash_entry *phVar10;" type_identifier (pointer_declarator "*phVar10" * identifier) ;) (declaration "int in_GS_OFFSET;" primitive_type identifier ;) (declaration "size_t sStack_3c;" primitive_type identifier ;) (declaration "hash_entry *bucket;" type_identifier (pointer_declarator "*bucket" * identifier) ;) (declaration "int local_20;" primitive_type identifier ;) (declaration "undefined4 uStack_14;" type_identifier identifier ;) (expression_statement "uStack_14 = 0x2a509;" (assignment_expression "uStack_14 = 0x2a509" 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) ))))) ;) (if_statement "if (entry == (void *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    abort();\n  }" if (parenthesized_expression "(entry == (void *)0x0)" ( (binary_expression "entry == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    abort();\n  }" { comment (expression_statement "abort();" (call_expression "abort()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "pvVar8 = hash_find_entry(table,entry,&bucket,false);" (assignment_expression "pvVar8 = hash_find_entry(table,entry,&bucket,false)" identifier = (call_expression "hash_find_entry(table,entry,&bucket,false)" identifier (argument_list "(table,entry,&bucket,false)" ( identifier , identifier , (pointer_expression "&bucket" & identifier) , false )))) ;) (expression_statement "fVar6 = DAT_0003c7f8;" (assignment_expression "fVar6 = DAT_0003c7f8" identifier = identifier) ;) (if_statement "if (pvVar8 != (void *)0x0) {\n    iVar9 = 0;\n    if (matched_ent != (void **)0x0) {\n      *matched_ent = pvVar8;\n    }\n    goto LAB_0002a55c;\n  }" if (parenthesized_expression "(pvVar8 != (void *)0x0)" ( (binary_expression "pvVar8 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    iVar9 = 0;\n    if (matched_ent != (void **)0x0) {\n      *matched_ent = pvVar8;\n    }\n    goto LAB_0002a55c;\n  }" { (expression_statement "iVar9 = 0;" (assignment_expression "iVar9 = 0" identifier = number_literal) ;) (if_statement "if (matched_ent != (void **)0x0) {\n      *matched_ent = pvVar8;\n    }" if (parenthesized_expression "(matched_ent != (void **)0x0)" ( (binary_expression "matched_ent != (void **)0x0" identifier != (cast_expression "(void **)0x0" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (compound_statement "{\n      *matched_ent = pvVar8;\n    }" { (expression_statement "*matched_ent = pvVar8;" (assignment_expression "*matched_ent = pvVar8" (pointer_expression "*matched_ent" * identifier) = identifier) ;) })) (goto_statement "goto LAB_0002a55c;" goto statement_identifier ;) })) (expression_statement "pHVar2 = table->tuning;" (assignment_expression "pHVar2 = table->tuning" identifier = (field_expression "table->tuning" identifier -> field_identifier)) ;) (expression_statement "fVar1 = pHVar2->growth_threshold;" (assignment_expression "fVar1 = pHVar2->growth_threshold" identifier = (field_expression "pHVar2->growth_threshold" identifier -> field_identifier)) ;) (expression_statement "fVar4 = (float)table->n_buckets;" (assignment_expression "fVar4 = (float)table->n_buckets" identifier = (cast_expression "(float)table->n_buckets" ( (type_descriptor "float" primitive_type) ) (field_expression "table->n_buckets" identifier -> field_identifier))) ;) (if_statement "if (fVar1 * fVar4 < (float)table->n_buckets_used) {\n    if (pHVar2 == &default_tuning) {\n      fVar4 = DAT_0003c7f8 * fVar4 * DAT_0003c7fc;\n    }\n    else {\n      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) ||\n          (pHVar2->growth_factor <= DAT_0003c808)) || (pHVar2->shrink_threshold < 0.0)) {\nLAB_0002a740:\n        table->tuning = &default_tuning;\n        if ((float)table->n_buckets_used <= fVar6 * fVar4) goto LAB_0002a5c0;\n        fVar4 = fVar4 * DAT_0003c7fc;\n        fVar1 = fVar6;\n      }\n      else {\n        fVar5 = pHVar2->shrink_threshold + DAT_0003c800;\n        if (((pHVar2->shrink_factor <= fVar5) || (1.0 < pHVar2->shrink_factor)) || (fVar1 <= fVar5))\n        goto LAB_0002a740;\n        fVar4 = pHVar2->growth_factor * fVar4;\n        if (pHVar2->is_n_buckets != false) goto LAB_0002a686;\n      }\n      fVar4 = fVar1 * fVar4;\n    }\nLAB_0002a686:\n    if (fVar4 < DAT_0003c80c) {\n      sStack_3c = (size_t)(longlong)ROUND(fVar4);\n      _Var7 = hash_rehash(table,sStack_3c);\n      if (_Var7) {\n        pvVar8 = hash_find_entry(table,entry,&bucket,false);\n        if (pvVar8 != (void *)0x0) {\n          iVar9 = hash_insert_if_absent_cold_11();\n          return iVar9;\n        }\n        goto LAB_0002a5c0;\n      }\n    }\nLAB_0002a7b2:\n    iVar9 = -1;\n  }\n  else {\nLAB_0002a5c0:\n    if (bucket->data == (void *)0x0) {\n      bucket->data = entry;\n      iVar9 = 1;\n      table->n_entries = table->n_entries + 1;\n      table->n_buckets_used = table->n_buckets_used + 1;\n      goto LAB_0002a55c;\n    }\n    phVar10 = table->free_entry_list;\n    if (phVar10 == (hash_entry *)0x0) {\n      phVar10 = (hash_entry *)malloc(8);\n      if (phVar10 == (hash_entry *)0x0) goto LAB_0002a7b2;\n    }\n    else {\n      table->free_entry_list = phVar10->next;\n    }\n    phVar3 = bucket->next;\n    phVar10->data = entry;\n    phVar10->next = phVar3;\n    bucket->next = phVar10;\n    iVar9 = 1;\n    table->n_entries = table->n_entries + 1;\n  }" if (parenthesized_expression "(fVar1 * fVar4 < (float)table->n_buckets_used)" ( (binary_expression "fVar1 * fVar4 < (float)table->n_buckets_used" (binary_expression "fVar1 * fVar4" identifier * identifier) < (cast_expression "(float)table->n_buckets_used" ( (type_descriptor "float" primitive_type) ) (field_expression "table->n_buckets_used" identifier -> field_identifier))) )) (compound_statement "{\n    if (pHVar2 == &default_tuning) {\n      fVar4 = DAT_0003c7f8 * fVar4 * DAT_0003c7fc;\n    }\n    else {\n      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) ||\n          (pHVar2->growth_factor <= DAT_0003c808)) || (pHVar2->shrink_threshold < 0.0)) {\nLAB_0002a740:\n        table->tuning = &default_tuning;\n        if ((float)table->n_buckets_used <= fVar6 * fVar4) goto LAB_0002a5c0;\n        fVar4 = fVar4 * DAT_0003c7fc;\n        fVar1 = fVar6;\n      }\n      else {\n        fVar5 = pHVar2->shrink_threshold + DAT_0003c800;\n        if (((pHVar2->shrink_factor <= fVar5) || (1.0 < pHVar2->shrink_factor)) || (fVar1 <= fVar5))\n        goto LAB_0002a740;\n        fVar4 = pHVar2->growth_factor * fVar4;\n        if (pHVar2->is_n_buckets != false) goto LAB_0002a686;\n      }\n      fVar4 = fVar1 * fVar4;\n    }\nLAB_0002a686:\n    if (fVar4 < DAT_0003c80c) {\n      sStack_3c = (size_t)(longlong)ROUND(fVar4);\n      _Var7 = hash_rehash(table,sStack_3c);\n      if (_Var7) {\n        pvVar8 = hash_find_entry(table,entry,&bucket,false);\n        if (pvVar8 != (void *)0x0) {\n          iVar9 = hash_insert_if_absent_cold_11();\n          return iVar9;\n        }\n        goto LAB_0002a5c0;\n      }\n    }\nLAB_0002a7b2:\n    iVar9 = -1;\n  }" { (if_statement "if (pHVar2 == &default_tuning) {\n      fVar4 = DAT_0003c7f8 * fVar4 * DAT_0003c7fc;\n    }\n    else {\n      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) ||\n          (pHVar2->growth_factor <= DAT_0003c808)) || (pHVar2->shrink_threshold < 0.0)) {\nLAB_0002a740:\n        table->tuning = &default_tuning;\n        if ((float)table->n_buckets_used <= fVar6 * fVar4) goto LAB_0002a5c0;\n        fVar4 = fVar4 * DAT_0003c7fc;\n        fVar1 = fVar6;\n      }\n      else {\n        fVar5 = pHVar2->shrink_threshold + DAT_0003c800;\n        if (((pHVar2->shrink_factor <= fVar5) || (1.0 < pHVar2->shrink_factor)) || (fVar1 <= fVar5))\n        goto LAB_0002a740;\n        fVar4 = pHVar2->growth_factor * fVar4;\n        if (pHVar2->is_n_buckets != false) goto LAB_0002a686;\n      }\n      fVar4 = fVar1 * fVar4;\n    }" if (parenthesized_expression "(pHVar2 == &default_tuning)" ( (binary_expression "pHVar2 == &default_tuning" identifier == (pointer_expression "&default_tuning" & identifier)) )) (compound_statement "{\n      fVar4 = DAT_0003c7f8 * fVar4 * DAT_0003c7fc;\n    }" { (expression_statement "fVar4 = DAT_0003c7f8 * fVar4 * DAT_0003c7fc;" (assignment_expression "fVar4 = DAT_0003c7f8 * fVar4 * DAT_0003c7fc" identifier = (binary_expression "DAT_0003c7f8 * fVar4 * DAT_0003c7fc" (binary_expression "DAT_0003c7f8 * fVar4" identifier * identifier) * identifier)) ;) }) (else_clause "else {\n      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) ||\n          (pHVar2->growth_factor <= DAT_0003c808)) || (pHVar2->shrink_threshold < 0.0)) {\nLAB_0002a740:\n        table->tuning = &default_tuning;\n        if ((float)table->n_buckets_used <= fVar6 * fVar4) goto LAB_0002a5c0;\n        fVar4 = fVar4 * DAT_0003c7fc;\n        fVar1 = fVar6;\n      }\n      else {\n        fVar5 = pHVar2->shrink_threshold + DAT_0003c800;\n        if (((pHVar2->shrink_factor <= fVar5) || (1.0 < pHVar2->shrink_factor)) || (fVar1 <= fVar5))\n        goto LAB_0002a740;\n        fVar4 = pHVar2->growth_factor * fVar4;\n        if (pHVar2->is_n_buckets != false) goto LAB_0002a686;\n      }\n      fVar4 = fVar1 * fVar4;\n    }" else (compound_statement "{\n      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) ||\n          (pHVar2->growth_factor <= DAT_0003c808)) || (pHVar2->shrink_threshold < 0.0)) {\nLAB_0002a740:\n        table->tuning = &default_tuning;\n        if ((float)table->n_buckets_used <= fVar6 * fVar4) goto LAB_0002a5c0;\n        fVar4 = fVar4 * DAT_0003c7fc;\n        fVar1 = fVar6;\n      }\n      else {\n        fVar5 = pHVar2->shrink_threshold + DAT_0003c800;\n        if (((pHVar2->shrink_factor <= fVar5) || (1.0 < pHVar2->shrink_factor)) || (fVar1 <= fVar5))\n        goto LAB_0002a740;\n        fVar4 = pHVar2->growth_factor * fVar4;\n        if (pHVar2->is_n_buckets != false) goto LAB_0002a686;\n      }\n      fVar4 = fVar1 * fVar4;\n    }" { (if_statement "if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) ||\n          (pHVar2->growth_factor <= DAT_0003c808)) || (pHVar2->shrink_threshold < 0.0)) {\nLAB_0002a740:\n        table->tuning = &default_tuning;\n        if ((float)table->n_buckets_used <= fVar6 * fVar4) goto LAB_0002a5c0;\n        fVar4 = fVar4 * DAT_0003c7fc;\n        fVar1 = fVar6;\n      }\n      else {\n        fVar5 = pHVar2->shrink_threshold + DAT_0003c800;\n        if (((pHVar2->shrink_factor <= fVar5) || (1.0 < pHVar2->shrink_factor)) || (fVar1 <= fVar5))\n        goto LAB_0002a740;\n        fVar4 = pHVar2->growth_factor * fVar4;\n        if (pHVar2->is_n_buckets != false) goto LAB_0002a686;\n      }" if (parenthesized_expression "((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) ||\n          (pHVar2->growth_factor <= DAT_0003c808)) || (pHVar2->shrink_threshold < 0.0))" ( (binary_expression "(((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) ||\n          (pHVar2->growth_factor <= DAT_0003c808)) || (pHVar2->shrink_threshold < 0.0)" (parenthesized_expression "(((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) ||\n          (pHVar2->growth_factor <= DAT_0003c808))" ( (binary_expression "((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) ||\n          (pHVar2->growth_factor <= DAT_0003c808)" (parenthesized_expression "((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1))" ( (binary_expression "(fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)" (parenthesized_expression "(fVar1 <= DAT_0003c800)" ( (binary_expression "fVar1 <= DAT_0003c800" identifier <= identifier) )) || (parenthesized_expression "(DAT_0003c804 <= fVar1)" ( (binary_expression "DAT_0003c804 <= fVar1" identifier <= identifier) ))) )) || (parenthesized_expression "(pHVar2->growth_factor <= DAT_0003c808)" ( (binary_expression "pHVar2->growth_factor <= DAT_0003c808" (field_expression "pHVar2->growth_factor" identifier -> field_identifier) <= identifier) ))) )) || (parenthesized_expression "(pHVar2->shrink_threshold < 0.0)" ( (binary_expression "pHVar2->shrink_threshold < 0.0" (field_expression "pHVar2->shrink_threshold" identifier -> field_identifier) < number_literal) ))) )) (compound_statement "{\nLAB_0002a740:\n        table->tuning = &default_tuning;\n        if ((float)table->n_buckets_used <= fVar6 * fVar4) goto LAB_0002a5c0;\n        fVar4 = fVar4 * DAT_0003c7fc;\n        fVar1 = fVar6;\n      }" { (labeled_statement "LAB_0002a740:\n        table->tuning = &default_tuning;" statement_identifier : (expression_statement "table->tuning = &default_tuning;" (assignment_expression "table->tuning = &default_tuning" (field_expression "table->tuning" identifier -> field_identifier) = (pointer_expression "&default_tuning" & identifier)) ;)) (if_statement "if ((float)table->n_buckets_used <= fVar6 * fVar4) goto LAB_0002a5c0;" if (parenthesized_expression "((float)table->n_buckets_used <= fVar6 * fVar4)" ( (binary_expression "(float)table->n_buckets_used <= fVar6 * fVar4" (cast_expression "(float)table->n_buckets_used" ( (type_descriptor "float" primitive_type) ) (field_expression "table->n_buckets_used" identifier -> field_identifier)) <= (binary_expression "fVar6 * fVar4" identifier * identifier)) )) (goto_statement "goto LAB_0002a5c0;" goto statement_identifier ;)) (expression_statement "fVar4 = fVar4 * DAT_0003c7fc;" (assignment_expression "fVar4 = fVar4 * DAT_0003c7fc" identifier = (binary_expression "fVar4 * DAT_0003c7fc" identifier * identifier)) ;) (expression_statement "fVar1 = fVar6;" (assignment_expression "fVar1 = fVar6" identifier = identifier) ;) }) (else_clause "else {\n        fVar5 = pHVar2->shrink_threshold + DAT_0003c800;\n        if (((pHVar2->shrink_factor <= fVar5) || (1.0 < pHVar2->shrink_factor)) || (fVar1 <= fVar5))\n        goto LAB_0002a740;\n        fVar4 = pHVar2->growth_factor * fVar4;\n        if (pHVar2->is_n_buckets != false) goto LAB_0002a686;\n      }" else (compound_statement "{\n        fVar5 = pHVar2->shrink_threshold + DAT_0003c800;\n        if (((pHVar2->shrink_factor <= fVar5) || (1.0 < pHVar2->shrink_factor)) || (fVar1 <= fVar5))\n        goto LAB_0002a740;\n        fVar4 = pHVar2->growth_factor * fVar4;\n        if (pHVar2->is_n_buckets != false) goto LAB_0002a686;\n      }" { (expression_statement "fVar5 = pHVar2->shrink_threshold + DAT_0003c800;" (assignment_expression "fVar5 = pHVar2->shrink_threshold + DAT_0003c800" identifier = (binary_expression "pHVar2->shrink_threshold + DAT_0003c800" (field_expression "pHVar2->shrink_threshold" identifier -> field_identifier) + identifier)) ;) (if_statement "if (((pHVar2->shrink_factor <= fVar5) || (1.0 < pHVar2->shrink_factor)) || (fVar1 <= fVar5))\n        goto LAB_0002a740;" if (parenthesized_expression "(((pHVar2->shrink_factor <= fVar5) || (1.0 < pHVar2->shrink_factor)) || (fVar1 <= fVar5))" ( (binary_expression "((pHVar2->shrink_factor <= fVar5) || (1.0 < pHVar2->shrink_factor)) || (fVar1 <= fVar5)" (parenthesized_expression "((pHVar2->shrink_factor <= fVar5) || (1.0 < pHVar2->shrink_factor))" ( (binary_expression "(pHVar2->shrink_factor <= fVar5) || (1.0 < pHVar2->shrink_factor)" (parenthesized_expression "(pHVar2->shrink_factor <= fVar5)" ( (binary_expression "pHVar2->shrink_factor <= fVar5" (field_expression "pHVar2->shrink_factor" identifier -> field_identifier) <= identifier) )) || (parenthesized_expression "(1.0 < pHVar2->shrink_factor)" ( (binary_expression "1.0 < pHVar2->shrink_factor" number_literal < (field_expression "pHVar2->shrink_factor" identifier -> field_identifier)) ))) )) || (parenthesized_expression "(fVar1 <= fVar5)" ( (binary_expression "fVar1 <= fVar5" identifier <= identifier) ))) )) (goto_statement "goto LAB_0002a740;" goto statement_identifier ;)) (expression_statement "fVar4 = pHVar2->growth_factor * fVar4;" (assignment_expression "fVar4 = pHVar2->growth_factor * fVar4" identifier = (binary_expression "pHVar2->growth_factor * fVar4" (field_expression "pHVar2->growth_factor" identifier -> field_identifier) * identifier)) ;) (if_statement "if (pHVar2->is_n_buckets != false) goto LAB_0002a686;" if (parenthesized_expression "(pHVar2->is_n_buckets != false)" ( (binary_expression "pHVar2->is_n_buckets != false" (field_expression "pHVar2->is_n_buckets" identifier -> field_identifier) != false) )) (goto_statement "goto LAB_0002a686;" goto statement_identifier ;)) }))) (expression_statement "fVar4 = fVar1 * fVar4;" (assignment_expression "fVar4 = fVar1 * fVar4" identifier = (binary_expression "fVar1 * fVar4" identifier * identifier)) ;) }))) (labeled_statement "LAB_0002a686:\n    if (fVar4 < DAT_0003c80c) {\n      sStack_3c = (size_t)(longlong)ROUND(fVar4);\n      _Var7 = hash_rehash(table,sStack_3c);\n      if (_Var7) {\n        pvVar8 = hash_find_entry(table,entry,&bucket,false);\n        if (pvVar8 != (void *)0x0) {\n          iVar9 = hash_insert_if_absent_cold_11();\n          return iVar9;\n        }\n        goto LAB_0002a5c0;\n      }\n    }" statement_identifier : (if_statement "if (fVar4 < DAT_0003c80c) {\n      sStack_3c = (size_t)(longlong)ROUND(fVar4);\n      _Var7 = hash_rehash(table,sStack_3c);\n      if (_Var7) {\n        pvVar8 = hash_find_entry(table,entry,&bucket,false);\n        if (pvVar8 != (void *)0x0) {\n          iVar9 = hash_insert_if_absent_cold_11();\n          return iVar9;\n        }\n        goto LAB_0002a5c0;\n      }\n    }" if (parenthesized_expression "(fVar4 < DAT_0003c80c)" ( (binary_expression "fVar4 < DAT_0003c80c" identifier < identifier) )) (compound_statement "{\n      sStack_3c = (size_t)(longlong)ROUND(fVar4);\n      _Var7 = hash_rehash(table,sStack_3c);\n      if (_Var7) {\n        pvVar8 = hash_find_entry(table,entry,&bucket,false);\n        if (pvVar8 != (void *)0x0) {\n          iVar9 = hash_insert_if_absent_cold_11();\n          return iVar9;\n        }\n        goto LAB_0002a5c0;\n      }\n    }" { (expression_statement "sStack_3c = (size_t)(longlong)ROUND(fVar4);" (assignment_expression "sStack_3c = (size_t)(longlong)ROUND(fVar4)" identifier = (cast_expression "(size_t)(longlong)ROUND(fVar4)" ( (type_descriptor "size_t" primitive_type) ) (cast_expression "(longlong)ROUND(fVar4)" ( (type_descriptor "longlong" type_identifier) ) (call_expression "ROUND(fVar4)" identifier (argument_list "(fVar4)" ( identifier )))))) ;) (expression_statement "_Var7 = hash_rehash(table,sStack_3c);" (assignment_expression "_Var7 = hash_rehash(table,sStack_3c)" identifier = (call_expression "hash_rehash(table,sStack_3c)" identifier (argument_list "(table,sStack_3c)" ( identifier , identifier )))) ;) (if_statement "if (_Var7) {\n        pvVar8 = hash_find_entry(table,entry,&bucket,false);\n        if (pvVar8 != (void *)0x0) {\n          iVar9 = hash_insert_if_absent_cold_11();\n          return iVar9;\n        }\n        goto LAB_0002a5c0;\n      }" if (parenthesized_expression "(_Var7)" ( identifier )) (compound_statement "{\n        pvVar8 = hash_find_entry(table,entry,&bucket,false);\n        if (pvVar8 != (void *)0x0) {\n          iVar9 = hash_insert_if_absent_cold_11();\n          return iVar9;\n        }\n        goto LAB_0002a5c0;\n      }" { (expression_statement "pvVar8 = hash_find_entry(table,entry,&bucket,false);" (assignment_expression "pvVar8 = hash_find_entry(table,entry,&bucket,false)" identifier = (call_expression "hash_find_entry(table,entry,&bucket,false)" identifier (argument_list "(table,entry,&bucket,false)" ( identifier , identifier , (pointer_expression "&bucket" & identifier) , false )))) ;) (if_statement "if (pvVar8 != (void *)0x0) {\n          iVar9 = hash_insert_if_absent_cold_11();\n          return iVar9;\n        }" if (parenthesized_expression "(pvVar8 != (void *)0x0)" ( (binary_expression "pvVar8 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          iVar9 = hash_insert_if_absent_cold_11();\n          return iVar9;\n        }" { (expression_statement "iVar9 = hash_insert_if_absent_cold_11();" (assignment_expression "iVar9 = hash_insert_if_absent_cold_11()" identifier = (call_expression "hash_insert_if_absent_cold_11()" identifier (argument_list "()" ( )))) ;) (return_statement "return iVar9;" return identifier ;) })) (goto_statement "goto LAB_0002a5c0;" goto statement_identifier ;) })) }))) (labeled_statement "LAB_0002a7b2:\n    iVar9 = -1;" statement_identifier : (expression_statement "iVar9 = -1;" (assignment_expression "iVar9 = -1" identifier = number_literal) ;)) }) (else_clause "else {\nLAB_0002a5c0:\n    if (bucket->data == (void *)0x0) {\n      bucket->data = entry;\n      iVar9 = 1;\n      table->n_entries = table->n_entries + 1;\n      table->n_buckets_used = table->n_buckets_used + 1;\n      goto LAB_0002a55c;\n    }\n    phVar10 = table->free_entry_list;\n    if (phVar10 == (hash_entry *)0x0) {\n      phVar10 = (hash_entry *)malloc(8);\n      if (phVar10 == (hash_entry *)0x0) goto LAB_0002a7b2;\n    }\n    else {\n      table->free_entry_list = phVar10->next;\n    }\n    phVar3 = bucket->next;\n    phVar10->data = entry;\n    phVar10->next = phVar3;\n    bucket->next = phVar10;\n    iVar9 = 1;\n    table->n_entries = table->n_entries + 1;\n  }" else (compound_statement "{\nLAB_0002a5c0:\n    if (bucket->data == (void *)0x0) {\n      bucket->data = entry;\n      iVar9 = 1;\n      table->n_entries = table->n_entries + 1;\n      table->n_buckets_used = table->n_buckets_used + 1;\n      goto LAB_0002a55c;\n    }\n    phVar10 = table->free_entry_list;\n    if (phVar10 == (hash_entry *)0x0) {\n      phVar10 = (hash_entry *)malloc(8);\n      if (phVar10 == (hash_entry *)0x0) goto LAB_0002a7b2;\n    }\n    else {\n      table->free_entry_list = phVar10->next;\n    }\n    phVar3 = bucket->next;\n    phVar10->data = entry;\n    phVar10->next = phVar3;\n    bucket->next = phVar10;\n    iVar9 = 1;\n    table->n_entries = table->n_entries + 1;\n  }" { (labeled_statement "LAB_0002a5c0:\n    if (bucket->data == (void *)0x0) {\n      bucket->data = entry;\n      iVar9 = 1;\n      table->n_entries = table->n_entries + 1;\n      table->n_buckets_used = table->n_buckets_used + 1;\n      goto LAB_0002a55c;\n    }" statement_identifier : (if_statement "if (bucket->data == (void *)0x0) {\n      bucket->data = entry;\n      iVar9 = 1;\n      table->n_entries = table->n_entries + 1;\n      table->n_buckets_used = table->n_buckets_used + 1;\n      goto LAB_0002a55c;\n    }" if (parenthesized_expression "(bucket->data == (void *)0x0)" ( (binary_expression "bucket->data == (void *)0x0" (field_expression "bucket->data" identifier -> field_identifier) == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      bucket->data = entry;\n      iVar9 = 1;\n      table->n_entries = table->n_entries + 1;\n      table->n_buckets_used = table->n_buckets_used + 1;\n      goto LAB_0002a55c;\n    }" { (expression_statement "bucket->data = entry;" (assignment_expression "bucket->data = entry" (field_expression "bucket->data" identifier -> field_identifier) = identifier) ;) (expression_statement "iVar9 = 1;" (assignment_expression "iVar9 = 1" identifier = number_literal) ;) (expression_statement "table->n_entries = table->n_entries + 1;" (assignment_expression "table->n_entries = table->n_entries + 1" (field_expression "table->n_entries" identifier -> field_identifier) = (binary_expression "table->n_entries + 1" (field_expression "table->n_entries" identifier -> field_identifier) + number_literal)) ;) (expression_statement "table->n_buckets_used = table->n_buckets_used + 1;" (assignment_expression "table->n_buckets_used = table->n_buckets_used + 1" (field_expression "table->n_buckets_used" identifier -> field_identifier) = (binary_expression "table->n_buckets_used + 1" (field_expression "table->n_buckets_used" identifier -> field_identifier) + number_literal)) ;) (goto_statement "goto LAB_0002a55c;" goto statement_identifier ;) }))) (expression_statement "phVar10 = table->free_entry_list;" (assignment_expression "phVar10 = table->free_entry_list" identifier = (field_expression "table->free_entry_list" identifier -> field_identifier)) ;) (if_statement "if (phVar10 == (hash_entry *)0x0) {\n      phVar10 = (hash_entry *)malloc(8);\n      if (phVar10 == (hash_entry *)0x0) goto LAB_0002a7b2;\n    }\n    else {\n      table->free_entry_list = phVar10->next;\n    }" if (parenthesized_expression "(phVar10 == (hash_entry *)0x0)" ( (binary_expression "phVar10 == (hash_entry *)0x0" identifier == (cast_expression "(hash_entry *)0x0" ( (type_descriptor "hash_entry *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      phVar10 = (hash_entry *)malloc(8);\n      if (phVar10 == (hash_entry *)0x0) goto LAB_0002a7b2;\n    }" { (expression_statement "phVar10 = (hash_entry *)malloc(8);" (assignment_expression "phVar10 = (hash_entry *)malloc(8)" identifier = (cast_expression "(hash_entry *)malloc(8)" ( (type_descriptor "hash_entry *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "malloc(8)" identifier (argument_list "(8)" ( number_literal ))))) ;) (if_statement "if (phVar10 == (hash_entry *)0x0) goto LAB_0002a7b2;" if (parenthesized_expression "(phVar10 == (hash_entry *)0x0)" ( (binary_expression "phVar10 == (hash_entry *)0x0" identifier == (cast_expression "(hash_entry *)0x0" ( (type_descriptor "hash_entry *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0002a7b2;" goto statement_identifier ;)) }) (else_clause "else {\n      table->free_entry_list = phVar10->next;\n    }" else (compound_statement "{\n      table->free_entry_list = phVar10->next;\n    }" { (expression_statement "table->free_entry_list = phVar10->next;" (assignment_expression "table->free_entry_list = phVar10->next" (field_expression "table->free_entry_list" identifier -> field_identifier) = (field_expression "phVar10->next" identifier -> field_identifier)) ;) }))) (expression_statement "phVar3 = bucket->next;" (assignment_expression "phVar3 = bucket->next" identifier = (field_expression "bucket->next" identifier -> field_identifier)) ;) (expression_statement "phVar10->data = entry;" (assignment_expression "phVar10->data = entry" (field_expression "phVar10->data" identifier -> field_identifier) = identifier) ;) (expression_statement "phVar10->next = phVar3;" (assignment_expression "phVar10->next = phVar3" (field_expression "phVar10->next" identifier -> field_identifier) = identifier) ;) (expression_statement "bucket->next = phVar10;" (assignment_expression "bucket->next = phVar10" (field_expression "bucket->next" identifier -> field_identifier) = identifier) ;) (expression_statement "iVar9 = 1;" (assignment_expression "iVar9 = 1" identifier = number_literal) ;) (expression_statement "table->n_entries = table->n_entries + 1;" (assignment_expression "table->n_entries = table->n_entries + 1" (field_expression "table->n_entries" identifier -> field_identifier) = (binary_expression "table->n_entries + 1" (field_expression "table->n_entries" identifier -> field_identifier) + number_literal)) ;) }))) (labeled_statement "LAB_0002a55c:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }" statement_identifier : (if_statement "if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\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                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }" { comment (expression_statement "__stack_chk_fail_local();" (call_expression "__stack_chk_fail_local()" identifier (argument_list "()" ( ))) ;) }))) (return_statement "return iVar9;" return identifier ;) })))
(translation_unit "undefined4 FUN_0002a500(int param_1,int param_2,int *param_3)\n\n{\n  float fVar1;\n  float *pfVar2;\n  float fVar3;\n  float fVar4;\n  float fVar5;\n  char cVar6;\n  int iVar7;\n  undefined4 uVar8;\n  int *piVar9;\n  int in_GS_OFFSET;\n  int **ppiVar10;\n  undefined4 local_3c;\n  int *local_24;\n  int local_20;\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x2a509;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  if (param_2 == 0) {\n                    \n    abort();\n  }\n  ppiVar10 = &local_24;\n  iVar7 = FUN_00029790(0);\n  fVar5 = DAT_0003c7f8;\n  if (iVar7 != 0) {\n    uVar8 = 0;\n    if (param_3 != (int *)0x0) {\n      *param_3 = iVar7;\n    }\n    goto LAB_0002a55c;\n  }\n  pfVar2 = *(float **)(param_1 + 0x14);\n  fVar1 = pfVar2[2];\n  fVar3 = (float)*(uint *)(param_1 + 8);\n  if (fVar1 * fVar3 < (float)*(uint *)(param_1 + 0xc)) {\n    if (pfVar2 == (float *)&DAT_0003c7e0) {\n      fVar3 = DAT_0003c7f8 * fVar3 * DAT_0003c7fc;\n    }\n    else {\n      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||\n         (*pfVar2 < 0.0)) {\nLAB_0002a740:\n        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;\n        if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;\n        fVar3 = fVar3 * DAT_0003c7fc;\n        fVar1 = fVar5;\n      }\n      else {\n        fVar4 = *pfVar2 + DAT_0003c800;\n        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;\n        fVar3 = pfVar2[3] * fVar3;\n        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;\n      }\n      fVar3 = fVar1 * fVar3;\n    }\nLAB_0002a686:\n    if (fVar3 < DAT_0003c80c) {\n      local_3c = (undefined4)(longlong)ROUND(fVar3);\n      cVar6 = FUN_0002a2c0(param_1,local_3c);\n      if (cVar6 != '\0') {\n        iVar7 = FUN_00029790(0);\n        if (iVar7 != 0) {\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }\n        goto LAB_0002a5c0;\n      }\n    }\nLAB_0002a7b2:\n    uVar8 = 0xffffffff;\n  }\n  else {\nLAB_0002a5c0:\n    if (*local_24 == 0) {\n      *local_24 = param_2;\n      uVar8 = 1;\n      *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n      *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;\n      goto LAB_0002a55c;\n    }\n    piVar9 = *(int **)(param_1 + 0x24);\n    if (piVar9 == (int *)0x0) {\n      piVar9 = (int *)malloc(8);\n      if (piVar9 == (int *)0x0) goto LAB_0002a7b2;\n    }\n    else {\n      *(int *)(param_1 + 0x24) = piVar9[1];\n    }\n    iVar7 = local_24[1];\n    *piVar9 = param_2;\n    piVar9[1] = iVar7;\n    local_24[1] = (int)piVar9;\n    uVar8 = 1;\n    *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n  }\nLAB_0002a55c:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_00038830();\n  }\n  return uVar8;\n}\n\n" (function_definition "undefined4 FUN_0002a500(int param_1,int param_2,int *param_3)\n\n{\n  float fVar1;\n  float *pfVar2;\n  float fVar3;\n  float fVar4;\n  float fVar5;\n  char cVar6;\n  int iVar7;\n  undefined4 uVar8;\n  int *piVar9;\n  int in_GS_OFFSET;\n  int **ppiVar10;\n  undefined4 local_3c;\n  int *local_24;\n  int local_20;\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x2a509;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  if (param_2 == 0) {\n                    \n    abort();\n  }\n  ppiVar10 = &local_24;\n  iVar7 = FUN_00029790(0);\n  fVar5 = DAT_0003c7f8;\n  if (iVar7 != 0) {\n    uVar8 = 0;\n    if (param_3 != (int *)0x0) {\n      *param_3 = iVar7;\n    }\n    goto LAB_0002a55c;\n  }\n  pfVar2 = *(float **)(param_1 + 0x14);\n  fVar1 = pfVar2[2];\n  fVar3 = (float)*(uint *)(param_1 + 8);\n  if (fVar1 * fVar3 < (float)*(uint *)(param_1 + 0xc)) {\n    if (pfVar2 == (float *)&DAT_0003c7e0) {\n      fVar3 = DAT_0003c7f8 * fVar3 * DAT_0003c7fc;\n    }\n    else {\n      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||\n         (*pfVar2 < 0.0)) {\nLAB_0002a740:\n        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;\n        if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;\n        fVar3 = fVar3 * DAT_0003c7fc;\n        fVar1 = fVar5;\n      }\n      else {\n        fVar4 = *pfVar2 + DAT_0003c800;\n        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;\n        fVar3 = pfVar2[3] * fVar3;\n        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;\n      }\n      fVar3 = fVar1 * fVar3;\n    }\nLAB_0002a686:\n    if (fVar3 < DAT_0003c80c) {\n      local_3c = (undefined4)(longlong)ROUND(fVar3);\n      cVar6 = FUN_0002a2c0(param_1,local_3c);\n      if (cVar6 != '\0') {\n        iVar7 = FUN_00029790(0);\n        if (iVar7 != 0) {\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }\n        goto LAB_0002a5c0;\n      }\n    }\nLAB_0002a7b2:\n    uVar8 = 0xffffffff;\n  }\n  else {\nLAB_0002a5c0:\n    if (*local_24 == 0) {\n      *local_24 = param_2;\n      uVar8 = 1;\n      *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n      *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;\n      goto LAB_0002a55c;\n    }\n    piVar9 = *(int **)(param_1 + 0x24);\n    if (piVar9 == (int *)0x0) {\n      piVar9 = (int *)malloc(8);\n      if (piVar9 == (int *)0x0) goto LAB_0002a7b2;\n    }\n    else {\n      *(int *)(param_1 + 0x24) = piVar9[1];\n    }\n    iVar7 = local_24[1];\n    *piVar9 = param_2;\n    piVar9[1] = iVar7;\n    local_24[1] = (int)piVar9;\n    uVar8 = 1;\n    *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n  }\nLAB_0002a55c:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_00038830();\n  }\n  return uVar8;\n}" type_identifier (function_declarator "FUN_0002a500(int param_1,int param_2,int *param_3)" identifier (parameter_list "(int param_1,int param_2,int *param_3)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  float fVar1;\n  float *pfVar2;\n  float fVar3;\n  float fVar4;\n  float fVar5;\n  char cVar6;\n  int iVar7;\n  undefined4 uVar8;\n  int *piVar9;\n  int in_GS_OFFSET;\n  int **ppiVar10;\n  undefined4 local_3c;\n  int *local_24;\n  int local_20;\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x2a509;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  if (param_2 == 0) {\n                    \n    abort();\n  }\n  ppiVar10 = &local_24;\n  iVar7 = FUN_00029790(0);\n  fVar5 = DAT_0003c7f8;\n  if (iVar7 != 0) {\n    uVar8 = 0;\n    if (param_3 != (int *)0x0) {\n      *param_3 = iVar7;\n    }\n    goto LAB_0002a55c;\n  }\n  pfVar2 = *(float **)(param_1 + 0x14);\n  fVar1 = pfVar2[2];\n  fVar3 = (float)*(uint *)(param_1 + 8);\n  if (fVar1 * fVar3 < (float)*(uint *)(param_1 + 0xc)) {\n    if (pfVar2 == (float *)&DAT_0003c7e0) {\n      fVar3 = DAT_0003c7f8 * fVar3 * DAT_0003c7fc;\n    }\n    else {\n      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||\n         (*pfVar2 < 0.0)) {\nLAB_0002a740:\n        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;\n        if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;\n        fVar3 = fVar3 * DAT_0003c7fc;\n        fVar1 = fVar5;\n      }\n      else {\n        fVar4 = *pfVar2 + DAT_0003c800;\n        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;\n        fVar3 = pfVar2[3] * fVar3;\n        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;\n      }\n      fVar3 = fVar1 * fVar3;\n    }\nLAB_0002a686:\n    if (fVar3 < DAT_0003c80c) {\n      local_3c = (undefined4)(longlong)ROUND(fVar3);\n      cVar6 = FUN_0002a2c0(param_1,local_3c);\n      if (cVar6 != '\0') {\n        iVar7 = FUN_00029790(0);\n        if (iVar7 != 0) {\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }\n        goto LAB_0002a5c0;\n      }\n    }\nLAB_0002a7b2:\n    uVar8 = 0xffffffff;\n  }\n  else {\nLAB_0002a5c0:\n    if (*local_24 == 0) {\n      *local_24 = param_2;\n      uVar8 = 1;\n      *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n      *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;\n      goto LAB_0002a55c;\n    }\n    piVar9 = *(int **)(param_1 + 0x24);\n    if (piVar9 == (int *)0x0) {\n      piVar9 = (int *)malloc(8);\n      if (piVar9 == (int *)0x0) goto LAB_0002a7b2;\n    }\n    else {\n      *(int *)(param_1 + 0x24) = piVar9[1];\n    }\n    iVar7 = local_24[1];\n    *piVar9 = param_2;\n    piVar9[1] = iVar7;\n    local_24[1] = (int)piVar9;\n    uVar8 = 1;\n    *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n  }\nLAB_0002a55c:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_00038830();\n  }\n  return uVar8;\n}" { (declaration "float fVar1;" primitive_type identifier ;) (declaration "float *pfVar2;" primitive_type (pointer_declarator "*pfVar2" * identifier) ;) (declaration "float fVar3;" primitive_type identifier ;) (declaration "float fVar4;" primitive_type identifier ;) (declaration "float fVar5;" primitive_type identifier ;) (declaration "char cVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "undefined4 uVar8;" type_identifier identifier ;) (declaration "int *piVar9;" primitive_type (pointer_declarator "*piVar9" * identifier) ;) (declaration "int in_GS_OFFSET;" primitive_type identifier ;) (declaration "int **ppiVar10;" primitive_type (pointer_declarator "**ppiVar10" * (pointer_declarator "*ppiVar10" * identifier)) ;) (declaration "undefined4 local_3c;" type_identifier identifier ;) (declaration "int *local_24;" primitive_type (pointer_declarator "*local_24" * identifier) ;) (declaration "int local_20;" primitive_type identifier ;) (declaration "undefined4 uStack_14;" type_identifier identifier ;) (expression_statement "uStack_14 = 0x2a509;" (assignment_expression "uStack_14 = 0x2a509" 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) ))))) ;) (if_statement "if (param_2 == 0) {\n                    \n    abort();\n  }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n                    \n    abort();\n  }" { (expression_statement "abort();" (call_expression "abort()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "ppiVar10 = &local_24;" (assignment_expression "ppiVar10 = &local_24" identifier = (pointer_expression "&local_24" & identifier)) ;) (expression_statement "iVar7 = FUN_00029790(0);" (assignment_expression "iVar7 = FUN_00029790(0)" identifier = (call_expression "FUN_00029790(0)" identifier (argument_list "(0)" ( number_literal )))) ;) (expression_statement "fVar5 = DAT_0003c7f8;" (assignment_expression "fVar5 = DAT_0003c7f8" identifier = identifier) ;) (if_statement "if (iVar7 != 0) {\n    uVar8 = 0;\n    if (param_3 != (int *)0x0) {\n      *param_3 = iVar7;\n    }\n    goto LAB_0002a55c;\n  }" if (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) (compound_statement "{\n    uVar8 = 0;\n    if (param_3 != (int *)0x0) {\n      *param_3 = iVar7;\n    }\n    goto LAB_0002a55c;\n  }" { (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" identifier = number_literal) ;) (if_statement "if (param_3 != (int *)0x0) {\n      *param_3 = iVar7;\n    }" if (parenthesized_expression "(param_3 != (int *)0x0)" ( (binary_expression "param_3 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      *param_3 = iVar7;\n    }" { (expression_statement "*param_3 = iVar7;" (assignment_expression "*param_3 = iVar7" (pointer_expression "*param_3" * identifier) = identifier) ;) })) (goto_statement "goto LAB_0002a55c;" goto statement_identifier ;) })) (expression_statement "pfVar2 = *(float **)(param_1 + 0x14);" (assignment_expression "pfVar2 = *(float **)(param_1 + 0x14)" identifier = (pointer_expression "*(float **)(param_1 + 0x14)" * (cast_expression "(float **)(param_1 + 0x14)" ( (type_descriptor "float **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "fVar1 = pfVar2[2];" (assignment_expression "fVar1 = pfVar2[2]" identifier = (subscript_expression "pfVar2[2]" identifier [ number_literal ])) ;) (expression_statement "fVar3 = (float)*(uint *)(param_1 + 8);" (assignment_expression "fVar3 = (float)*(uint *)(param_1 + 8)" identifier = (cast_expression "(float)*(uint *)(param_1 + 8)" ( (type_descriptor "float" primitive_type) ) (pointer_expression "*(uint *)(param_1 + 8)" * (cast_expression "(uint *)(param_1 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))))) ;) (if_statement "if (fVar1 * fVar3 < (float)*(uint *)(param_1 + 0xc)) {\n    if (pfVar2 == (float *)&DAT_0003c7e0) {\n      fVar3 = DAT_0003c7f8 * fVar3 * DAT_0003c7fc;\n    }\n    else {\n      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||\n         (*pfVar2 < 0.0)) {\nLAB_0002a740:\n        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;\n        if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;\n        fVar3 = fVar3 * DAT_0003c7fc;\n        fVar1 = fVar5;\n      }\n      else {\n        fVar4 = *pfVar2 + DAT_0003c800;\n        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;\n        fVar3 = pfVar2[3] * fVar3;\n        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;\n      }\n      fVar3 = fVar1 * fVar3;\n    }\nLAB_0002a686:\n    if (fVar3 < DAT_0003c80c) {\n      local_3c = (undefined4)(longlong)ROUND(fVar3);\n      cVar6 = FUN_0002a2c0(param_1,local_3c);\n      if (cVar6 != '\0') {\n        iVar7 = FUN_00029790(0);\n        if (iVar7 != 0) {\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }\n        goto LAB_0002a5c0;\n      }\n    }\nLAB_0002a7b2:\n    uVar8 = 0xffffffff;\n  }\n  else {\nLAB_0002a5c0:\n    if (*local_24 == 0) {\n      *local_24 = param_2;\n      uVar8 = 1;\n      *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n      *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;\n      goto LAB_0002a55c;\n    }\n    piVar9 = *(int **)(param_1 + 0x24);\n    if (piVar9 == (int *)0x0) {\n      piVar9 = (int *)malloc(8);\n      if (piVar9 == (int *)0x0) goto LAB_0002a7b2;\n    }\n    else {\n      *(int *)(param_1 + 0x24) = piVar9[1];\n    }\n    iVar7 = local_24[1];\n    *piVar9 = param_2;\n    piVar9[1] = iVar7;\n    local_24[1] = (int)piVar9;\n    uVar8 = 1;\n    *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n  }" if (parenthesized_expression "(fVar1 * fVar3 < (float)*(uint *)(param_1 + 0xc))" ( (binary_expression "fVar1 * fVar3 < (float)*(uint *)(param_1 + 0xc)" (binary_expression "fVar1 * fVar3" identifier * identifier) < (cast_expression "(float)*(uint *)(param_1 + 0xc)" ( (type_descriptor "float" primitive_type) ) (pointer_expression "*(uint *)(param_1 + 0xc)" * (cast_expression "(uint *)(param_1 + 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))))) )) (compound_statement "{\n    if (pfVar2 == (float *)&DAT_0003c7e0) {\n      fVar3 = DAT_0003c7f8 * fVar3 * DAT_0003c7fc;\n    }\n    else {\n      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||\n         (*pfVar2 < 0.0)) {\nLAB_0002a740:\n        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;\n        if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;\n        fVar3 = fVar3 * DAT_0003c7fc;\n        fVar1 = fVar5;\n      }\n      else {\n        fVar4 = *pfVar2 + DAT_0003c800;\n        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;\n        fVar3 = pfVar2[3] * fVar3;\n        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;\n      }\n      fVar3 = fVar1 * fVar3;\n    }\nLAB_0002a686:\n    if (fVar3 < DAT_0003c80c) {\n      local_3c = (undefined4)(longlong)ROUND(fVar3);\n      cVar6 = FUN_0002a2c0(param_1,local_3c);\n      if (cVar6 != '\0') {\n        iVar7 = FUN_00029790(0);\n        if (iVar7 != 0) {\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }\n        goto LAB_0002a5c0;\n      }\n    }\nLAB_0002a7b2:\n    uVar8 = 0xffffffff;\n  }" { (if_statement "if (pfVar2 == (float *)&DAT_0003c7e0) {\n      fVar3 = DAT_0003c7f8 * fVar3 * DAT_0003c7fc;\n    }\n    else {\n      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||\n         (*pfVar2 < 0.0)) {\nLAB_0002a740:\n        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;\n        if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;\n        fVar3 = fVar3 * DAT_0003c7fc;\n        fVar1 = fVar5;\n      }\n      else {\n        fVar4 = *pfVar2 + DAT_0003c800;\n        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;\n        fVar3 = pfVar2[3] * fVar3;\n        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;\n      }\n      fVar3 = fVar1 * fVar3;\n    }" if (parenthesized_expression "(pfVar2 == (float *)&DAT_0003c7e0)" ( (binary_expression "pfVar2 == (float *)&DAT_0003c7e0" identifier == (cast_expression "(float *)&DAT_0003c7e0" ( (type_descriptor "float *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&DAT_0003c7e0" & identifier))) )) (compound_statement "{\n      fVar3 = DAT_0003c7f8 * fVar3 * DAT_0003c7fc;\n    }" { (expression_statement "fVar3 = DAT_0003c7f8 * fVar3 * DAT_0003c7fc;" (assignment_expression "fVar3 = DAT_0003c7f8 * fVar3 * DAT_0003c7fc" identifier = (binary_expression "DAT_0003c7f8 * fVar3 * DAT_0003c7fc" (binary_expression "DAT_0003c7f8 * fVar3" identifier * identifier) * identifier)) ;) }) (else_clause "else {\n      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||\n         (*pfVar2 < 0.0)) {\nLAB_0002a740:\n        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;\n        if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;\n        fVar3 = fVar3 * DAT_0003c7fc;\n        fVar1 = fVar5;\n      }\n      else {\n        fVar4 = *pfVar2 + DAT_0003c800;\n        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;\n        fVar3 = pfVar2[3] * fVar3;\n        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;\n      }\n      fVar3 = fVar1 * fVar3;\n    }" else (compound_statement "{\n      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||\n         (*pfVar2 < 0.0)) {\nLAB_0002a740:\n        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;\n        if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;\n        fVar3 = fVar3 * DAT_0003c7fc;\n        fVar1 = fVar5;\n      }\n      else {\n        fVar4 = *pfVar2 + DAT_0003c800;\n        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;\n        fVar3 = pfVar2[3] * fVar3;\n        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;\n      }\n      fVar3 = fVar1 * fVar3;\n    }" { (if_statement "if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||\n         (*pfVar2 < 0.0)) {\nLAB_0002a740:\n        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;\n        if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;\n        fVar3 = fVar3 * DAT_0003c7fc;\n        fVar1 = fVar5;\n      }\n      else {\n        fVar4 = *pfVar2 + DAT_0003c800;\n        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;\n        fVar3 = pfVar2[3] * fVar3;\n        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;\n      }" if (parenthesized_expression "((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||\n         (*pfVar2 < 0.0))" ( (binary_expression "(((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||\n         (*pfVar2 < 0.0)" (parenthesized_expression "(((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808))" ( (binary_expression "((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)" (parenthesized_expression "((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1))" ( (binary_expression "(fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)" (parenthesized_expression "(fVar1 <= DAT_0003c800)" ( (binary_expression "fVar1 <= DAT_0003c800" identifier <= identifier) )) || (parenthesized_expression "(DAT_0003c804 <= fVar1)" ( (binary_expression "DAT_0003c804 <= fVar1" identifier <= identifier) ))) )) || (parenthesized_expression "(pfVar2[3] <= DAT_0003c808)" ( (binary_expression "pfVar2[3] <= DAT_0003c808" (subscript_expression "pfVar2[3]" identifier [ number_literal ]) <= identifier) ))) )) || (parenthesized_expression "(*pfVar2 < 0.0)" ( (binary_expression "*pfVar2 < 0.0" (pointer_expression "*pfVar2" * identifier) < number_literal) ))) )) (compound_statement "{\nLAB_0002a740:\n        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;\n        if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;\n        fVar3 = fVar3 * DAT_0003c7fc;\n        fVar1 = fVar5;\n      }" { (labeled_statement "LAB_0002a740:\n        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;" statement_identifier : (expression_statement "*(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;" (assignment_expression "*(undefined **)(param_1 + 0x14) = &DAT_0003c7e0" (pointer_expression "*(undefined **)(param_1 + 0x14)" * (cast_expression "(undefined **)(param_1 + 0x14)" ( (type_descriptor "undefined **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = (pointer_expression "&DAT_0003c7e0" & identifier)) ;)) (if_statement "if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;" if (parenthesized_expression "((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3)" ( (binary_expression "(float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3" (cast_expression "(float)*(uint *)(param_1 + 0xc)" ( (type_descriptor "float" primitive_type) ) (pointer_expression "*(uint *)(param_1 + 0xc)" * (cast_expression "(uint *)(param_1 + 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) ))))) <= (binary_expression "fVar5 * fVar3" identifier * identifier)) )) (goto_statement "goto LAB_0002a5c0;" goto statement_identifier ;)) (expression_statement "fVar3 = fVar3 * DAT_0003c7fc;" (assignment_expression "fVar3 = fVar3 * DAT_0003c7fc" identifier = (binary_expression "fVar3 * DAT_0003c7fc" identifier * identifier)) ;) (expression_statement "fVar1 = fVar5;" (assignment_expression "fVar1 = fVar5" identifier = identifier) ;) }) (else_clause "else {\n        fVar4 = *pfVar2 + DAT_0003c800;\n        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;\n        fVar3 = pfVar2[3] * fVar3;\n        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;\n      }" else (compound_statement "{\n        fVar4 = *pfVar2 + DAT_0003c800;\n        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;\n        fVar3 = pfVar2[3] * fVar3;\n        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;\n      }" { (expression_statement "fVar4 = *pfVar2 + DAT_0003c800;" (assignment_expression "fVar4 = *pfVar2 + DAT_0003c800" identifier = (binary_expression "*pfVar2 + DAT_0003c800" (pointer_expression "*pfVar2" * identifier) + identifier)) ;) (if_statement "if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;" if (parenthesized_expression "(((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4))" ( (binary_expression "((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)" (parenthesized_expression "((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1]))" ( (binary_expression "(pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])" (parenthesized_expression "(pfVar2[1] <= fVar4)" ( (binary_expression "pfVar2[1] <= fVar4" (subscript_expression "pfVar2[1]" identifier [ number_literal ]) <= identifier) )) || (parenthesized_expression "(1.0 < pfVar2[1])" ( (binary_expression "1.0 < pfVar2[1]" number_literal < (subscript_expression "pfVar2[1]" identifier [ number_literal ])) ))) )) || (parenthesized_expression "(fVar1 <= fVar4)" ( (binary_expression "fVar1 <= fVar4" identifier <= identifier) ))) )) (goto_statement "goto LAB_0002a740;" goto statement_identifier ;)) (expression_statement "fVar3 = pfVar2[3] * fVar3;" (assignment_expression "fVar3 = pfVar2[3] * fVar3" identifier = (binary_expression "pfVar2[3] * fVar3" (subscript_expression "pfVar2[3]" identifier [ number_literal ]) * identifier)) ;) (if_statement "if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;" if (parenthesized_expression "(*(char *)(pfVar2 + 4) != '\0')" ( (binary_expression "*(char *)(pfVar2 + 4) != '\0'" (pointer_expression "*(char *)(pfVar2 + 4)" * (cast_expression "(char *)(pfVar2 + 4)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pfVar2 + 4)" ( (binary_expression "pfVar2 + 4" identifier + number_literal) )))) != (char_literal "'\0'" ' escape_sequence ')) )) (goto_statement "goto LAB_0002a686;" goto statement_identifier ;)) }))) (expression_statement "fVar3 = fVar1 * fVar3;" (assignment_expression "fVar3 = fVar1 * fVar3" identifier = (binary_expression "fVar1 * fVar3" identifier * identifier)) ;) }))) (labeled_statement "LAB_0002a686:\n    if (fVar3 < DAT_0003c80c) {\n      local_3c = (undefined4)(longlong)ROUND(fVar3);\n      cVar6 = FUN_0002a2c0(param_1,local_3c);\n      if (cVar6 != '\0') {\n        iVar7 = FUN_00029790(0);\n        if (iVar7 != 0) {\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }\n        goto LAB_0002a5c0;\n      }\n    }" statement_identifier : (if_statement "if (fVar3 < DAT_0003c80c) {\n      local_3c = (undefined4)(longlong)ROUND(fVar3);\n      cVar6 = FUN_0002a2c0(param_1,local_3c);\n      if (cVar6 != '\0') {\n        iVar7 = FUN_00029790(0);\n        if (iVar7 != 0) {\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }\n        goto LAB_0002a5c0;\n      }\n    }" if (parenthesized_expression "(fVar3 < DAT_0003c80c)" ( (binary_expression "fVar3 < DAT_0003c80c" identifier < identifier) )) (compound_statement "{\n      local_3c = (undefined4)(longlong)ROUND(fVar3);\n      cVar6 = FUN_0002a2c0(param_1,local_3c);\n      if (cVar6 != '\0') {\n        iVar7 = FUN_00029790(0);\n        if (iVar7 != 0) {\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }\n        goto LAB_0002a5c0;\n      }\n    }" { (expression_statement "local_3c = (undefined4)(longlong)ROUND(fVar3);" (assignment_expression "local_3c = (undefined4)(longlong)ROUND(fVar3)" identifier = (cast_expression "(undefined4)(longlong)ROUND(fVar3)" ( (type_descriptor "undefined4" type_identifier) ) (cast_expression "(longlong)ROUND(fVar3)" ( (type_descriptor "longlong" type_identifier) ) (call_expression "ROUND(fVar3)" identifier (argument_list "(fVar3)" ( identifier )))))) ;) (expression_statement "cVar6 = FUN_0002a2c0(param_1,local_3c);" (assignment_expression "cVar6 = FUN_0002a2c0(param_1,local_3c)" identifier = (call_expression "FUN_0002a2c0(param_1,local_3c)" identifier (argument_list "(param_1,local_3c)" ( identifier , identifier )))) ;) (if_statement "if (cVar6 != '\0') {\n        iVar7 = FUN_00029790(0);\n        if (iVar7 != 0) {\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }\n        goto LAB_0002a5c0;\n      }" if (parenthesized_expression "(cVar6 != '\0')" ( (binary_expression "cVar6 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        iVar7 = FUN_00029790(0);\n        if (iVar7 != 0) {\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }\n        goto LAB_0002a5c0;\n      }" { (expression_statement "iVar7 = FUN_00029790(0);" (assignment_expression "iVar7 = FUN_00029790(0)" identifier = (call_expression "FUN_00029790(0)" identifier (argument_list "(0)" ( number_literal )))) ;) (if_statement "if (iVar7 != 0) {\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }" if (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) (compound_statement "{\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }" { (expression_statement "uVar8 = FUN_0001278e(ppiVar10);" (assignment_expression "uVar8 = FUN_0001278e(ppiVar10)" identifier = (call_expression "FUN_0001278e(ppiVar10)" identifier (argument_list "(ppiVar10)" ( identifier )))) ;) (return_statement "return uVar8;" return identifier ;) })) (goto_statement "goto LAB_0002a5c0;" goto statement_identifier ;) })) }))) (labeled_statement "LAB_0002a7b2:\n    uVar8 = 0xffffffff;" statement_identifier : (expression_statement "uVar8 = 0xffffffff;" (assignment_expression "uVar8 = 0xffffffff" identifier = number_literal) ;)) }) (else_clause "else {\nLAB_0002a5c0:\n    if (*local_24 == 0) {\n      *local_24 = param_2;\n      uVar8 = 1;\n      *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n      *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;\n      goto LAB_0002a55c;\n    }\n    piVar9 = *(int **)(param_1 + 0x24);\n    if (piVar9 == (int *)0x0) {\n      piVar9 = (int *)malloc(8);\n      if (piVar9 == (int *)0x0) goto LAB_0002a7b2;\n    }\n    else {\n      *(int *)(param_1 + 0x24) = piVar9[1];\n    }\n    iVar7 = local_24[1];\n    *piVar9 = param_2;\n    piVar9[1] = iVar7;\n    local_24[1] = (int)piVar9;\n    uVar8 = 1;\n    *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n  }" else (compound_statement "{\nLAB_0002a5c0:\n    if (*local_24 == 0) {\n      *local_24 = param_2;\n      uVar8 = 1;\n      *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n      *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;\n      goto LAB_0002a55c;\n    }\n    piVar9 = *(int **)(param_1 + 0x24);\n    if (piVar9 == (int *)0x0) {\n      piVar9 = (int *)malloc(8);\n      if (piVar9 == (int *)0x0) goto LAB_0002a7b2;\n    }\n    else {\n      *(int *)(param_1 + 0x24) = piVar9[1];\n    }\n    iVar7 = local_24[1];\n    *piVar9 = param_2;\n    piVar9[1] = iVar7;\n    local_24[1] = (int)piVar9;\n    uVar8 = 1;\n    *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n  }" { (labeled_statement "LAB_0002a5c0:\n    if (*local_24 == 0) {\n      *local_24 = param_2;\n      uVar8 = 1;\n      *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n      *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;\n      goto LAB_0002a55c;\n    }" statement_identifier : (if_statement "if (*local_24 == 0) {\n      *local_24 = param_2;\n      uVar8 = 1;\n      *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n      *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;\n      goto LAB_0002a55c;\n    }" if (parenthesized_expression "(*local_24 == 0)" ( (binary_expression "*local_24 == 0" (pointer_expression "*local_24" * identifier) == number_literal) )) (compound_statement "{\n      *local_24 = param_2;\n      uVar8 = 1;\n      *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n      *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;\n      goto LAB_0002a55c;\n    }" { (expression_statement "*local_24 = param_2;" (assignment_expression "*local_24 = param_2" (pointer_expression "*local_24" * identifier) = identifier) ;) (expression_statement "uVar8 = 1;" (assignment_expression "uVar8 = 1" identifier = number_literal) ;) (expression_statement "*(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;" (assignment_expression "*(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1" (pointer_expression "*(int *)(param_1 + 0x10)" * (cast_expression "(int *)(param_1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) = (binary_expression "*(int *)(param_1 + 0x10) + 1" (pointer_expression "*(int *)(param_1 + 0x10)" * (cast_expression "(int *)(param_1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "*(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;" (assignment_expression "*(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1" (pointer_expression "*(int *)(param_1 + 0xc)" * (cast_expression "(int *)(param_1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) = (binary_expression "*(int *)(param_1 + 0xc) + 1" (pointer_expression "*(int *)(param_1 + 0xc)" * (cast_expression "(int *)(param_1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) + number_literal)) ;) (goto_statement "goto LAB_0002a55c;" goto statement_identifier ;) }))) (expression_statement "piVar9 = *(int **)(param_1 + 0x24);" (assignment_expression "piVar9 = *(int **)(param_1 + 0x24)" identifier = (pointer_expression "*(int **)(param_1 + 0x24)" * (cast_expression "(int **)(param_1 + 0x24)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x24)" ( (binary_expression "param_1 + 0x24" identifier + number_literal) ))))) ;) (if_statement "if (piVar9 == (int *)0x0) {\n      piVar9 = (int *)malloc(8);\n      if (piVar9 == (int *)0x0) goto LAB_0002a7b2;\n    }\n    else {\n      *(int *)(param_1 + 0x24) = piVar9[1];\n    }" if (parenthesized_expression "(piVar9 == (int *)0x0)" ( (binary_expression "piVar9 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      piVar9 = (int *)malloc(8);\n      if (piVar9 == (int *)0x0) goto LAB_0002a7b2;\n    }" { (expression_statement "piVar9 = (int *)malloc(8);" (assignment_expression "piVar9 = (int *)malloc(8)" identifier = (cast_expression "(int *)malloc(8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "malloc(8)" identifier (argument_list "(8)" ( number_literal ))))) ;) (if_statement "if (piVar9 == (int *)0x0) goto LAB_0002a7b2;" if (parenthesized_expression "(piVar9 == (int *)0x0)" ( (binary_expression "piVar9 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0002a7b2;" goto statement_identifier ;)) }) (else_clause "else {\n      *(int *)(param_1 + 0x24) = piVar9[1];\n    }" else (compound_statement "{\n      *(int *)(param_1 + 0x24) = piVar9[1];\n    }" { (expression_statement "*(int *)(param_1 + 0x24) = piVar9[1];" (assignment_expression "*(int *)(param_1 + 0x24) = piVar9[1]" (pointer_expression "*(int *)(param_1 + 0x24)" * (cast_expression "(int *)(param_1 + 0x24)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x24)" ( (binary_expression "param_1 + 0x24" identifier + number_literal) )))) = (subscript_expression "piVar9[1]" identifier [ number_literal ])) ;) }))) (expression_statement "iVar7 = local_24[1];" (assignment_expression "iVar7 = local_24[1]" identifier = (subscript_expression "local_24[1]" identifier [ number_literal ])) ;) (expression_statement "*piVar9 = param_2;" (assignment_expression "*piVar9 = param_2" (pointer_expression "*piVar9" * identifier) = identifier) ;) (expression_statement "piVar9[1] = iVar7;" (assignment_expression "piVar9[1] = iVar7" (subscript_expression "piVar9[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "local_24[1] = (int)piVar9;" (assignment_expression "local_24[1] = (int)piVar9" (subscript_expression "local_24[1]" identifier [ number_literal ]) = (cast_expression "(int)piVar9" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "uVar8 = 1;" (assignment_expression "uVar8 = 1" identifier = number_literal) ;) (expression_statement "*(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;" (assignment_expression "*(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1" (pointer_expression "*(int *)(param_1 + 0x10)" * (cast_expression "(int *)(param_1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) = (binary_expression "*(int *)(param_1 + 0x10) + 1" (pointer_expression "*(int *)(param_1 + 0x10)" * (cast_expression "(int *)(param_1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) + number_literal)) ;) }))) (labeled_statement "LAB_0002a55c:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_00038830();\n  }" statement_identifier : (if_statement "if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_00038830();\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                    \n    FUN_00038830();\n  }" { (expression_statement "FUN_00038830();" (call_expression "FUN_00038830()" identifier (argument_list "()" ( ))) ;) }))) (return_statement "return uVar8;" return 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)) ))) (compound_statement { (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 IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * (pointer_declarator * IDENT)) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (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) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression & IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression 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 (pointer_expression * IDENT) = IDENT) ;) })) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT * IDENT) < (cast_expression ( (type_descriptor TYPE) ) (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression & IDENT))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT * IDENT) * IDENT)) ;) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) || (parenthesized_expression ( (binary_expression IDENT <= IDENT) ))) )) || (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) <= IDENT) ))) )) || (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) < LIT) ))) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (pointer_expression & IDENT)) ;)) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) <= (binary_expression IDENT * IDENT)) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT * IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) <= IDENT) )) || (parenthesized_expression ( (binary_expression LIT < (subscript_expression IDENT [ LIT ])) ))) )) || (parenthesized_expression ( (binary_expression IDENT <= IDENT) ))) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression (subscript_expression IDENT [ LIT ]) * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != (char_literal ' escape_sequence ')) )) (goto_statement goto statement_identifier ;)) }))) (expression_statement (assignment_expression IDENT = (binary_expression IDENT * IDENT)) ;) }))) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( IDENT )))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (return_statement return IDENT ;) })) (goto_statement goto statement_identifier ;) })) }))) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) }) (else_clause else (compound_statement { (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) ;) (goto_statement goto statement_identifier ;) }))) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression 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 ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (subscript_expression IDENT [ LIT ])) ;) }))) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + 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 { (expression_statement (call_expression IDENT (argument_list ( ))) ;) }))) (return_statement return IDENT ;) })))
(function_definition "undefined4 FUN_0002a500(int param_1,int param_2,int *param_3)\n\n{\n  float fVar1;\n  float *pfVar2;\n  float fVar3;\n  float fVar4;\n  float fVar5;\n  char cVar6;\n  int iVar7;\n  undefined4 uVar8;\n  int *piVar9;\n  int in_GS_OFFSET;\n  int **ppiVar10;\n  undefined4 local_3c;\n  int *local_24;\n  int local_20;\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x2a509;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  if (param_2 == 0) {\n                    \n    abort();\n  }\n  ppiVar10 = &local_24;\n  iVar7 = FUN_00029790(0);\n  fVar5 = DAT_0003c7f8;\n  if (iVar7 != 0) {\n    uVar8 = 0;\n    if (param_3 != (int *)0x0) {\n      *param_3 = iVar7;\n    }\n    goto LAB_0002a55c;\n  }\n  pfVar2 = *(float **)(param_1 + 0x14);\n  fVar1 = pfVar2[2];\n  fVar3 = (float)*(uint *)(param_1 + 8);\n  if (fVar1 * fVar3 < (float)*(uint *)(param_1 + 0xc)) {\n    if (pfVar2 == (float *)&DAT_0003c7e0) {\n      fVar3 = DAT_0003c7f8 * fVar3 * DAT_0003c7fc;\n    }\n    else {\n      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||\n         (*pfVar2 < 0.0)) {\nLAB_0002a740:\n        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;\n        if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;\n        fVar3 = fVar3 * DAT_0003c7fc;\n        fVar1 = fVar5;\n      }\n      else {\n        fVar4 = *pfVar2 + DAT_0003c800;\n        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;\n        fVar3 = pfVar2[3] * fVar3;\n        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;\n      }\n      fVar3 = fVar1 * fVar3;\n    }\nLAB_0002a686:\n    if (fVar3 < DAT_0003c80c) {\n      local_3c = (undefined4)(longlong)ROUND(fVar3);\n      cVar6 = FUN_0002a2c0(param_1,local_3c);\n      if (cVar6 != '\0') {\n        iVar7 = FUN_00029790(0);\n        if (iVar7 != 0) {\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }\n        goto LAB_0002a5c0;\n      }\n    }\nLAB_0002a7b2:\n    uVar8 = 0xffffffff;\n  }\n  else {\nLAB_0002a5c0:\n    if (*local_24 == 0) {\n      *local_24 = param_2;\n      uVar8 = 1;\n      *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n      *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;\n      goto LAB_0002a55c;\n    }\n    piVar9 = *(int **)(param_1 + 0x24);\n    if (piVar9 == (int *)0x0) {\n      piVar9 = (int *)malloc(8);\n      if (piVar9 == (int *)0x0) goto LAB_0002a7b2;\n    }\n    else {\n      *(int *)(param_1 + 0x24) = piVar9[1];\n    }\n    iVar7 = local_24[1];\n    *piVar9 = param_2;\n    piVar9[1] = iVar7;\n    local_24[1] = (int)piVar9;\n    uVar8 = 1;\n    *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n  }\nLAB_0002a55c:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_00038830();\n  }\n  return uVar8;\n}" (type_identifier "undefined4") (function_declarator "FUN_0002a500(int param_1,int param_2,int *param_3)" (identifier "FUN_0002a500") (parameter_list "(int param_1,int param_2,int *param_3)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "int *param_3" (primitive_type "int") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) () ")"))) (compound_statement "{\n  float fVar1;\n  float *pfVar2;\n  float fVar3;\n  float fVar4;\n  float fVar5;\n  char cVar6;\n  int iVar7;\n  undefined4 uVar8;\n  int *piVar9;\n  int in_GS_OFFSET;\n  int **ppiVar10;\n  undefined4 local_3c;\n  int *local_24;\n  int local_20;\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x2a509;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  if (param_2 == 0) {\n                    \n    abort();\n  }\n  ppiVar10 = &local_24;\n  iVar7 = FUN_00029790(0);\n  fVar5 = DAT_0003c7f8;\n  if (iVar7 != 0) {\n    uVar8 = 0;\n    if (param_3 != (int *)0x0) {\n      *param_3 = iVar7;\n    }\n    goto LAB_0002a55c;\n  }\n  pfVar2 = *(float **)(param_1 + 0x14);\n  fVar1 = pfVar2[2];\n  fVar3 = (float)*(uint *)(param_1 + 8);\n  if (fVar1 * fVar3 < (float)*(uint *)(param_1 + 0xc)) {\n    if (pfVar2 == (float *)&DAT_0003c7e0) {\n      fVar3 = DAT_0003c7f8 * fVar3 * DAT_0003c7fc;\n    }\n    else {\n      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||\n         (*pfVar2 < 0.0)) {\nLAB_0002a740:\n        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;\n        if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;\n        fVar3 = fVar3 * DAT_0003c7fc;\n        fVar1 = fVar5;\n      }\n      else {\n        fVar4 = *pfVar2 + DAT_0003c800;\n        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;\n        fVar3 = pfVar2[3] * fVar3;\n        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;\n      }\n      fVar3 = fVar1 * fVar3;\n    }\nLAB_0002a686:\n    if (fVar3 < DAT_0003c80c) {\n      local_3c = (undefined4)(longlong)ROUND(fVar3);\n      cVar6 = FUN_0002a2c0(param_1,local_3c);\n      if (cVar6 != '\0') {\n        iVar7 = FUN_00029790(0);\n        if (iVar7 != 0) {\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }\n        goto LAB_0002a5c0;\n      }\n    }\nLAB_0002a7b2:\n    uVar8 = 0xffffffff;\n  }\n  else {\nLAB_0002a5c0:\n    if (*local_24 == 0) {\n      *local_24 = param_2;\n      uVar8 = 1;\n      *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n      *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;\n      goto LAB_0002a55c;\n    }\n    piVar9 = *(int **)(param_1 + 0x24);\n    if (piVar9 == (int *)0x0) {\n      piVar9 = (int *)malloc(8);\n      if (piVar9 == (int *)0x0) goto LAB_0002a7b2;\n    }\n    else {\n      *(int *)(param_1 + 0x24) = piVar9[1];\n    }\n    iVar7 = local_24[1];\n    *piVar9 = param_2;\n    piVar9[1] = iVar7;\n    local_24[1] = (int)piVar9;\n    uVar8 = 1;\n    *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n  }\nLAB_0002a55c:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_00038830();\n  }\n  return uVar8;\n}" ({ "{") (declaration "float fVar1;" (primitive_type "float") (identifier "fVar1") (; ";")) (declaration "float *pfVar2;" (primitive_type "float") (pointer_declarator "*pfVar2" (* "*") (identifier "pfVar2")) (; ";")) (declaration "float fVar3;" (primitive_type "float") (identifier "fVar3") (; ";")) (declaration "float fVar4;" (primitive_type "float") (identifier "fVar4") (; ";")) (declaration "float fVar5;" (primitive_type "float") (identifier "fVar5") (; ";")) (declaration "char cVar6;" (primitive_type "char") (identifier "cVar6") (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (declaration "undefined4 uVar8;" (type_identifier "undefined4") (identifier "uVar8") (; ";")) (declaration "int *piVar9;" (primitive_type "int") (pointer_declarator "*piVar9" (* "*") (identifier "piVar9")) (; ";")) (declaration "int in_GS_OFFSET;" (primitive_type "int") (identifier "in_GS_OFFSET") (; ";")) (declaration "int **ppiVar10;" (primitive_type "int") (pointer_declarator "**ppiVar10" (* "*") (pointer_declarator "*ppiVar10" (* "*") (identifier "ppiVar10"))) (; ";")) (declaration "undefined4 local_3c;" (type_identifier "undefined4") (identifier "local_3c") (; ";")) (declaration "int *local_24;" (primitive_type "int") (pointer_declarator "*local_24" (* "*") (identifier "local_24")) (; ";")) (declaration "int local_20;" (primitive_type "int") (identifier "local_20") (; ";")) (declaration "undefined4 uStack_14;" (type_identifier "undefined4") (identifier "uStack_14") (; ";")) (expression_statement "uStack_14 = 0x2a509;" (assignment_expression "uStack_14 = 0x2a509" (identifier "uStack_14") (= "=") (number_literal "0x2a509")) (; ";")) (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")) () ")"))))) (; ";")) (if_statement "if (param_2 == 0) {\n                    \n    abort();\n  }" (if "if") (parenthesized_expression "(param_2 == 0)" (( "(") (binary_expression "param_2 == 0" (identifier "param_2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    abort();\n  }" ({ "{") (expression_statement "abort();" (call_expression "abort()" (identifier "abort") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "ppiVar10 = &local_24;" (assignment_expression "ppiVar10 = &local_24" (identifier "ppiVar10") (= "=") (pointer_expression "&local_24" (& "&") (identifier "local_24"))) (; ";")) (expression_statement "iVar7 = FUN_00029790(0);" (assignment_expression "iVar7 = FUN_00029790(0)" (identifier "iVar7") (= "=") (call_expression "FUN_00029790(0)" (identifier "FUN_00029790") (argument_list "(0)" (( "(") (number_literal "0") () ")")))) (; ";")) (expression_statement "fVar5 = DAT_0003c7f8;" (assignment_expression "fVar5 = DAT_0003c7f8" (identifier "fVar5") (= "=") (identifier "DAT_0003c7f8")) (; ";")) (if_statement "if (iVar7 != 0) {\n    uVar8 = 0;\n    if (param_3 != (int *)0x0) {\n      *param_3 = iVar7;\n    }\n    goto LAB_0002a55c;\n  }" (if "if") (parenthesized_expression "(iVar7 != 0)" (( "(") (binary_expression "iVar7 != 0" (identifier "iVar7") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    uVar8 = 0;\n    if (param_3 != (int *)0x0) {\n      *param_3 = iVar7;\n    }\n    goto LAB_0002a55c;\n  }" ({ "{") (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" (identifier "uVar8") (= "=") (number_literal "0")) (; ";")) (if_statement "if (param_3 != (int *)0x0) {\n      *param_3 = iVar7;\n    }" (if "if") (parenthesized_expression "(param_3 != (int *)0x0)" (( "(") (binary_expression "param_3 != (int *)0x0" (identifier "param_3") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      *param_3 = iVar7;\n    }" ({ "{") (expression_statement "*param_3 = iVar7;" (assignment_expression "*param_3 = iVar7" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (= "=") (identifier "iVar7")) (; ";")) (} "}"))) (goto_statement "goto LAB_0002a55c;" (goto "goto") (statement_identifier "LAB_0002a55c") (; ";")) (} "}"))) (expression_statement "pfVar2 = *(float **)(param_1 + 0x14);" (assignment_expression "pfVar2 = *(float **)(param_1 + 0x14)" (identifier "pfVar2") (= "=") (pointer_expression "*(float **)(param_1 + 0x14)" (* "*") (cast_expression "(float **)(param_1 + 0x14)" (( "(") (type_descriptor "float **" (primitive_type "float") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "fVar1 = pfVar2[2];" (assignment_expression "fVar1 = pfVar2[2]" (identifier "fVar1") (= "=") (subscript_expression "pfVar2[2]" (identifier "pfVar2") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "fVar3 = (float)*(uint *)(param_1 + 8);" (assignment_expression "fVar3 = (float)*(uint *)(param_1 + 8)" (identifier "fVar3") (= "=") (cast_expression "(float)*(uint *)(param_1 + 8)" (( "(") (type_descriptor "float" (primitive_type "float")) () ")") (pointer_expression "*(uint *)(param_1 + 8)" (* "*") (cast_expression "(uint *)(param_1 + 8)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))))) (; ";")) (if_statement "if (fVar1 * fVar3 < (float)*(uint *)(param_1 + 0xc)) {\n    if (pfVar2 == (float *)&DAT_0003c7e0) {\n      fVar3 = DAT_0003c7f8 * fVar3 * DAT_0003c7fc;\n    }\n    else {\n      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||\n         (*pfVar2 < 0.0)) {\nLAB_0002a740:\n        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;\n        if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;\n        fVar3 = fVar3 * DAT_0003c7fc;\n        fVar1 = fVar5;\n      }\n      else {\n        fVar4 = *pfVar2 + DAT_0003c800;\n        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;\n        fVar3 = pfVar2[3] * fVar3;\n        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;\n      }\n      fVar3 = fVar1 * fVar3;\n    }\nLAB_0002a686:\n    if (fVar3 < DAT_0003c80c) {\n      local_3c = (undefined4)(longlong)ROUND(fVar3);\n      cVar6 = FUN_0002a2c0(param_1,local_3c);\n      if (cVar6 != '\0') {\n        iVar7 = FUN_00029790(0);\n        if (iVar7 != 0) {\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }\n        goto LAB_0002a5c0;\n      }\n    }\nLAB_0002a7b2:\n    uVar8 = 0xffffffff;\n  }\n  else {\nLAB_0002a5c0:\n    if (*local_24 == 0) {\n      *local_24 = param_2;\n      uVar8 = 1;\n      *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n      *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;\n      goto LAB_0002a55c;\n    }\n    piVar9 = *(int **)(param_1 + 0x24);\n    if (piVar9 == (int *)0x0) {\n      piVar9 = (int *)malloc(8);\n      if (piVar9 == (int *)0x0) goto LAB_0002a7b2;\n    }\n    else {\n      *(int *)(param_1 + 0x24) = piVar9[1];\n    }\n    iVar7 = local_24[1];\n    *piVar9 = param_2;\n    piVar9[1] = iVar7;\n    local_24[1] = (int)piVar9;\n    uVar8 = 1;\n    *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n  }" (if "if") (parenthesized_expression "(fVar1 * fVar3 < (float)*(uint *)(param_1 + 0xc))" (( "(") (binary_expression "fVar1 * fVar3 < (float)*(uint *)(param_1 + 0xc)" (binary_expression "fVar1 * fVar3" (identifier "fVar1") (* "*") (identifier "fVar3")) (< "<") (cast_expression "(float)*(uint *)(param_1 + 0xc)" (( "(") (type_descriptor "float" (primitive_type "float")) () ")") (pointer_expression "*(uint *)(param_1 + 0xc)" (* "*") (cast_expression "(uint *)(param_1 + 0xc)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")")))))) () ")")) (compound_statement "{\n    if (pfVar2 == (float *)&DAT_0003c7e0) {\n      fVar3 = DAT_0003c7f8 * fVar3 * DAT_0003c7fc;\n    }\n    else {\n      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||\n         (*pfVar2 < 0.0)) {\nLAB_0002a740:\n        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;\n        if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;\n        fVar3 = fVar3 * DAT_0003c7fc;\n        fVar1 = fVar5;\n      }\n      else {\n        fVar4 = *pfVar2 + DAT_0003c800;\n        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;\n        fVar3 = pfVar2[3] * fVar3;\n        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;\n      }\n      fVar3 = fVar1 * fVar3;\n    }\nLAB_0002a686:\n    if (fVar3 < DAT_0003c80c) {\n      local_3c = (undefined4)(longlong)ROUND(fVar3);\n      cVar6 = FUN_0002a2c0(param_1,local_3c);\n      if (cVar6 != '\0') {\n        iVar7 = FUN_00029790(0);\n        if (iVar7 != 0) {\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }\n        goto LAB_0002a5c0;\n      }\n    }\nLAB_0002a7b2:\n    uVar8 = 0xffffffff;\n  }" ({ "{") (if_statement "if (pfVar2 == (float *)&DAT_0003c7e0) {\n      fVar3 = DAT_0003c7f8 * fVar3 * DAT_0003c7fc;\n    }\n    else {\n      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||\n         (*pfVar2 < 0.0)) {\nLAB_0002a740:\n        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;\n        if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;\n        fVar3 = fVar3 * DAT_0003c7fc;\n        fVar1 = fVar5;\n      }\n      else {\n        fVar4 = *pfVar2 + DAT_0003c800;\n        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;\n        fVar3 = pfVar2[3] * fVar3;\n        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;\n      }\n      fVar3 = fVar1 * fVar3;\n    }" (if "if") (parenthesized_expression "(pfVar2 == (float *)&DAT_0003c7e0)" (( "(") (binary_expression "pfVar2 == (float *)&DAT_0003c7e0" (identifier "pfVar2") (== "==") (cast_expression "(float *)&DAT_0003c7e0" (( "(") (type_descriptor "float *" (primitive_type "float") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "&DAT_0003c7e0" (& "&") (identifier "DAT_0003c7e0")))) () ")")) (compound_statement "{\n      fVar3 = DAT_0003c7f8 * fVar3 * DAT_0003c7fc;\n    }" ({ "{") (expression_statement "fVar3 = DAT_0003c7f8 * fVar3 * DAT_0003c7fc;" (assignment_expression "fVar3 = DAT_0003c7f8 * fVar3 * DAT_0003c7fc" (identifier "fVar3") (= "=") (binary_expression "DAT_0003c7f8 * fVar3 * DAT_0003c7fc" (binary_expression "DAT_0003c7f8 * fVar3" (identifier "DAT_0003c7f8") (* "*") (identifier "fVar3")) (* "*") (identifier "DAT_0003c7fc"))) (; ";")) (} "}")) (else_clause "else {\n      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||\n         (*pfVar2 < 0.0)) {\nLAB_0002a740:\n        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;\n        if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;\n        fVar3 = fVar3 * DAT_0003c7fc;\n        fVar1 = fVar5;\n      }\n      else {\n        fVar4 = *pfVar2 + DAT_0003c800;\n        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;\n        fVar3 = pfVar2[3] * fVar3;\n        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;\n      }\n      fVar3 = fVar1 * fVar3;\n    }" (else "else") (compound_statement "{\n      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||\n         (*pfVar2 < 0.0)) {\nLAB_0002a740:\n        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;\n        if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;\n        fVar3 = fVar3 * DAT_0003c7fc;\n        fVar1 = fVar5;\n      }\n      else {\n        fVar4 = *pfVar2 + DAT_0003c800;\n        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;\n        fVar3 = pfVar2[3] * fVar3;\n        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;\n      }\n      fVar3 = fVar1 * fVar3;\n    }" ({ "{") (if_statement "if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||\n         (*pfVar2 < 0.0)) {\nLAB_0002a740:\n        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;\n        if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;\n        fVar3 = fVar3 * DAT_0003c7fc;\n        fVar1 = fVar5;\n      }\n      else {\n        fVar4 = *pfVar2 + DAT_0003c800;\n        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;\n        fVar3 = pfVar2[3] * fVar3;\n        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;\n      }" (if "if") (parenthesized_expression "((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||\n         (*pfVar2 < 0.0))" (( "(") (binary_expression "(((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||\n         (*pfVar2 < 0.0)" (parenthesized_expression "(((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808))" (( "(") (binary_expression "((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)" (parenthesized_expression "((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1))" (( "(") (binary_expression "(fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)" (parenthesized_expression "(fVar1 <= DAT_0003c800)" (( "(") (binary_expression "fVar1 <= DAT_0003c800" (identifier "fVar1") (<= "<=") (identifier "DAT_0003c800")) () ")")) (|| "||") (parenthesized_expression "(DAT_0003c804 <= fVar1)" (( "(") (binary_expression "DAT_0003c804 <= fVar1" (identifier "DAT_0003c804") (<= "<=") (identifier "fVar1")) () ")"))) () ")")) (|| "||") (parenthesized_expression "(pfVar2[3] <= DAT_0003c808)" (( "(") (binary_expression "pfVar2[3] <= DAT_0003c808" (subscript_expression "pfVar2[3]" (identifier "pfVar2") ([ "[") (number_literal "3") (] "]")) (<= "<=") (identifier "DAT_0003c808")) () ")"))) () ")")) (|| "||") (parenthesized_expression "(*pfVar2 < 0.0)" (( "(") (binary_expression "*pfVar2 < 0.0" (pointer_expression "*pfVar2" (* "*") (identifier "pfVar2")) (< "<") (number_literal "0.0")) () ")"))) () ")")) (compound_statement "{\nLAB_0002a740:\n        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;\n        if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;\n        fVar3 = fVar3 * DAT_0003c7fc;\n        fVar1 = fVar5;\n      }" ({ "{") (labeled_statement "LAB_0002a740:\n        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;" (statement_identifier "LAB_0002a740") (: ":") (expression_statement "*(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;" (assignment_expression "*(undefined **)(param_1 + 0x14) = &DAT_0003c7e0" (pointer_expression "*(undefined **)(param_1 + 0x14)" (* "*") (cast_expression "(undefined **)(param_1 + 0x14)" (( "(") (type_descriptor "undefined **" (type_identifier "undefined") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")")))) (= "=") (pointer_expression "&DAT_0003c7e0" (& "&") (identifier "DAT_0003c7e0"))) (; ";"))) (if_statement "if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;" (if "if") (parenthesized_expression "((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3)" (( "(") (binary_expression "(float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3" (cast_expression "(float)*(uint *)(param_1 + 0xc)" (( "(") (type_descriptor "float" (primitive_type "float")) () ")") (pointer_expression "*(uint *)(param_1 + 0xc)" (* "*") (cast_expression "(uint *)(param_1 + 0xc)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")"))))) (<= "<=") (binary_expression "fVar5 * fVar3" (identifier "fVar5") (* "*") (identifier "fVar3"))) () ")")) (goto_statement "goto LAB_0002a5c0;" (goto "goto") (statement_identifier "LAB_0002a5c0") (; ";"))) (expression_statement "fVar3 = fVar3 * DAT_0003c7fc;" (assignment_expression "fVar3 = fVar3 * DAT_0003c7fc" (identifier "fVar3") (= "=") (binary_expression "fVar3 * DAT_0003c7fc" (identifier "fVar3") (* "*") (identifier "DAT_0003c7fc"))) (; ";")) (expression_statement "fVar1 = fVar5;" (assignment_expression "fVar1 = fVar5" (identifier "fVar1") (= "=") (identifier "fVar5")) (; ";")) (} "}")) (else_clause "else {\n        fVar4 = *pfVar2 + DAT_0003c800;\n        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;\n        fVar3 = pfVar2[3] * fVar3;\n        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;\n      }" (else "else") (compound_statement "{\n        fVar4 = *pfVar2 + DAT_0003c800;\n        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;\n        fVar3 = pfVar2[3] * fVar3;\n        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;\n      }" ({ "{") (expression_statement "fVar4 = *pfVar2 + DAT_0003c800;" (assignment_expression "fVar4 = *pfVar2 + DAT_0003c800" (identifier "fVar4") (= "=") (binary_expression "*pfVar2 + DAT_0003c800" (pointer_expression "*pfVar2" (* "*") (identifier "pfVar2")) (+ "+") (identifier "DAT_0003c800"))) (; ";")) (if_statement "if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;" (if "if") (parenthesized_expression "(((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4))" (( "(") (binary_expression "((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)" (parenthesized_expression "((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1]))" (( "(") (binary_expression "(pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])" (parenthesized_expression "(pfVar2[1] <= fVar4)" (( "(") (binary_expression "pfVar2[1] <= fVar4" (subscript_expression "pfVar2[1]" (identifier "pfVar2") ([ "[") (number_literal "1") (] "]")) (<= "<=") (identifier "fVar4")) () ")")) (|| "||") (parenthesized_expression "(1.0 < pfVar2[1])" (( "(") (binary_expression "1.0 < pfVar2[1]" (number_literal "1.0") (< "<") (subscript_expression "pfVar2[1]" (identifier "pfVar2") ([ "[") (number_literal "1") (] "]"))) () ")"))) () ")")) (|| "||") (parenthesized_expression "(fVar1 <= fVar4)" (( "(") (binary_expression "fVar1 <= fVar4" (identifier "fVar1") (<= "<=") (identifier "fVar4")) () ")"))) () ")")) (goto_statement "goto LAB_0002a740;" (goto "goto") (statement_identifier "LAB_0002a740") (; ";"))) (expression_statement "fVar3 = pfVar2[3] * fVar3;" (assignment_expression "fVar3 = pfVar2[3] * fVar3" (identifier "fVar3") (= "=") (binary_expression "pfVar2[3] * fVar3" (subscript_expression "pfVar2[3]" (identifier "pfVar2") ([ "[") (number_literal "3") (] "]")) (* "*") (identifier "fVar3"))) (; ";")) (if_statement "if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;" (if "if") (parenthesized_expression "(*(char *)(pfVar2 + 4) != '\0')" (( "(") (binary_expression "*(char *)(pfVar2 + 4) != '\0'" (pointer_expression "*(char *)(pfVar2 + 4)" (* "*") (cast_expression "(char *)(pfVar2 + 4)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pfVar2 + 4)" (( "(") (binary_expression "pfVar2 + 4" (identifier "pfVar2") (+ "+") (number_literal "4")) () ")")))) (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (goto_statement "goto LAB_0002a686;" (goto "goto") (statement_identifier "LAB_0002a686") (; ";"))) (} "}")))) (expression_statement "fVar3 = fVar1 * fVar3;" (assignment_expression "fVar3 = fVar1 * fVar3" (identifier "fVar3") (= "=") (binary_expression "fVar1 * fVar3" (identifier "fVar1") (* "*") (identifier "fVar3"))) (; ";")) (} "}")))) (labeled_statement "LAB_0002a686:\n    if (fVar3 < DAT_0003c80c) {\n      local_3c = (undefined4)(longlong)ROUND(fVar3);\n      cVar6 = FUN_0002a2c0(param_1,local_3c);\n      if (cVar6 != '\0') {\n        iVar7 = FUN_00029790(0);\n        if (iVar7 != 0) {\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }\n        goto LAB_0002a5c0;\n      }\n    }" (statement_identifier "LAB_0002a686") (: ":") (if_statement "if (fVar3 < DAT_0003c80c) {\n      local_3c = (undefined4)(longlong)ROUND(fVar3);\n      cVar6 = FUN_0002a2c0(param_1,local_3c);\n      if (cVar6 != '\0') {\n        iVar7 = FUN_00029790(0);\n        if (iVar7 != 0) {\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }\n        goto LAB_0002a5c0;\n      }\n    }" (if "if") (parenthesized_expression "(fVar3 < DAT_0003c80c)" (( "(") (binary_expression "fVar3 < DAT_0003c80c" (identifier "fVar3") (< "<") (identifier "DAT_0003c80c")) () ")")) (compound_statement "{\n      local_3c = (undefined4)(longlong)ROUND(fVar3);\n      cVar6 = FUN_0002a2c0(param_1,local_3c);\n      if (cVar6 != '\0') {\n        iVar7 = FUN_00029790(0);\n        if (iVar7 != 0) {\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }\n        goto LAB_0002a5c0;\n      }\n    }" ({ "{") (expression_statement "local_3c = (undefined4)(longlong)ROUND(fVar3);" (assignment_expression "local_3c = (undefined4)(longlong)ROUND(fVar3)" (identifier "local_3c") (= "=") (cast_expression "(undefined4)(longlong)ROUND(fVar3)" (( "(") (type_descriptor "undefined4" (type_identifier "undefined4")) () ")") (cast_expression "(longlong)ROUND(fVar3)" (( "(") (type_descriptor "longlong" (type_identifier "longlong")) () ")") (call_expression "ROUND(fVar3)" (identifier "ROUND") (argument_list "(fVar3)" (( "(") (identifier "fVar3") () ")")))))) (; ";")) (expression_statement "cVar6 = FUN_0002a2c0(param_1,local_3c);" (assignment_expression "cVar6 = FUN_0002a2c0(param_1,local_3c)" (identifier "cVar6") (= "=") (call_expression "FUN_0002a2c0(param_1,local_3c)" (identifier "FUN_0002a2c0") (argument_list "(param_1,local_3c)" (( "(") (identifier "param_1") (, ",") (identifier "local_3c") () ")")))) (; ";")) (if_statement "if (cVar6 != '\0') {\n        iVar7 = FUN_00029790(0);\n        if (iVar7 != 0) {\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }\n        goto LAB_0002a5c0;\n      }" (if "if") (parenthesized_expression "(cVar6 != '\0')" (( "(") (binary_expression "cVar6 != '\0'" (identifier "cVar6") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n        iVar7 = FUN_00029790(0);\n        if (iVar7 != 0) {\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }\n        goto LAB_0002a5c0;\n      }" ({ "{") (expression_statement "iVar7 = FUN_00029790(0);" (assignment_expression "iVar7 = FUN_00029790(0)" (identifier "iVar7") (= "=") (call_expression "FUN_00029790(0)" (identifier "FUN_00029790") (argument_list "(0)" (( "(") (number_literal "0") () ")")))) (; ";")) (if_statement "if (iVar7 != 0) {\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }" (if "if") (parenthesized_expression "(iVar7 != 0)" (( "(") (binary_expression "iVar7 != 0" (identifier "iVar7") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          uVar8 = FUN_0001278e(ppiVar10);\n          return uVar8;\n        }" ({ "{") (expression_statement "uVar8 = FUN_0001278e(ppiVar10);" (assignment_expression "uVar8 = FUN_0001278e(ppiVar10)" (identifier "uVar8") (= "=") (call_expression "FUN_0001278e(ppiVar10)" (identifier "FUN_0001278e") (argument_list "(ppiVar10)" (( "(") (identifier "ppiVar10") () ")")))) (; ";")) (return_statement "return uVar8;" (return "return") (identifier "uVar8") (; ";")) (} "}"))) (goto_statement "goto LAB_0002a5c0;" (goto "goto") (statement_identifier "LAB_0002a5c0") (; ";")) (} "}"))) (} "}")))) (labeled_statement "LAB_0002a7b2:\n    uVar8 = 0xffffffff;" (statement_identifier "LAB_0002a7b2") (: ":") (expression_statement "uVar8 = 0xffffffff;" (assignment_expression "uVar8 = 0xffffffff" (identifier "uVar8") (= "=") (number_literal "0xffffffff")) (; ";"))) (} "}")) (else_clause "else {\nLAB_0002a5c0:\n    if (*local_24 == 0) {\n      *local_24 = param_2;\n      uVar8 = 1;\n      *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n      *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;\n      goto LAB_0002a55c;\n    }\n    piVar9 = *(int **)(param_1 + 0x24);\n    if (piVar9 == (int *)0x0) {\n      piVar9 = (int *)malloc(8);\n      if (piVar9 == (int *)0x0) goto LAB_0002a7b2;\n    }\n    else {\n      *(int *)(param_1 + 0x24) = piVar9[1];\n    }\n    iVar7 = local_24[1];\n    *piVar9 = param_2;\n    piVar9[1] = iVar7;\n    local_24[1] = (int)piVar9;\n    uVar8 = 1;\n    *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n  }" (else "else") (compound_statement "{\nLAB_0002a5c0:\n    if (*local_24 == 0) {\n      *local_24 = param_2;\n      uVar8 = 1;\n      *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n      *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;\n      goto LAB_0002a55c;\n    }\n    piVar9 = *(int **)(param_1 + 0x24);\n    if (piVar9 == (int *)0x0) {\n      piVar9 = (int *)malloc(8);\n      if (piVar9 == (int *)0x0) goto LAB_0002a7b2;\n    }\n    else {\n      *(int *)(param_1 + 0x24) = piVar9[1];\n    }\n    iVar7 = local_24[1];\n    *piVar9 = param_2;\n    piVar9[1] = iVar7;\n    local_24[1] = (int)piVar9;\n    uVar8 = 1;\n    *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n  }" ({ "{") (labeled_statement "LAB_0002a5c0:\n    if (*local_24 == 0) {\n      *local_24 = param_2;\n      uVar8 = 1;\n      *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n      *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;\n      goto LAB_0002a55c;\n    }" (statement_identifier "LAB_0002a5c0") (: ":") (if_statement "if (*local_24 == 0) {\n      *local_24 = param_2;\n      uVar8 = 1;\n      *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n      *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;\n      goto LAB_0002a55c;\n    }" (if "if") (parenthesized_expression "(*local_24 == 0)" (( "(") (binary_expression "*local_24 == 0" (pointer_expression "*local_24" (* "*") (identifier "local_24")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      *local_24 = param_2;\n      uVar8 = 1;\n      *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;\n      *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;\n      goto LAB_0002a55c;\n    }" ({ "{") (expression_statement "*local_24 = param_2;" (assignment_expression "*local_24 = param_2" (pointer_expression "*local_24" (* "*") (identifier "local_24")) (= "=") (identifier "param_2")) (; ";")) (expression_statement "uVar8 = 1;" (assignment_expression "uVar8 = 1" (identifier "uVar8") (= "=") (number_literal "1")) (; ";")) (expression_statement "*(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;" (assignment_expression "*(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1" (pointer_expression "*(int *)(param_1 + 0x10)" (* "*") (cast_expression "(int *)(param_1 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")")))) (= "=") (binary_expression "*(int *)(param_1 + 0x10) + 1" (pointer_expression "*(int *)(param_1 + 0x10)" (* "*") (cast_expression "(int *)(param_1 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")")))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;" (assignment_expression "*(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1" (pointer_expression "*(int *)(param_1 + 0xc)" (* "*") (cast_expression "(int *)(param_1 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")")))) (= "=") (binary_expression "*(int *)(param_1 + 0xc) + 1" (pointer_expression "*(int *)(param_1 + 0xc)" (* "*") (cast_expression "(int *)(param_1 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")")))) (+ "+") (number_literal "1"))) (; ";")) (goto_statement "goto LAB_0002a55c;" (goto "goto") (statement_identifier "LAB_0002a55c") (; ";")) (} "}")))) (expression_statement "piVar9 = *(int **)(param_1 + 0x24);" (assignment_expression "piVar9 = *(int **)(param_1 + 0x24)" (identifier "piVar9") (= "=") (pointer_expression "*(int **)(param_1 + 0x24)" (* "*") (cast_expression "(int **)(param_1 + 0x24)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x24)" (( "(") (binary_expression "param_1 + 0x24" (identifier "param_1") (+ "+") (number_literal "0x24")) () ")"))))) (; ";")) (if_statement "if (piVar9 == (int *)0x0) {\n      piVar9 = (int *)malloc(8);\n      if (piVar9 == (int *)0x0) goto LAB_0002a7b2;\n    }\n    else {\n      *(int *)(param_1 + 0x24) = piVar9[1];\n    }" (if "if") (parenthesized_expression "(piVar9 == (int *)0x0)" (( "(") (binary_expression "piVar9 == (int *)0x0" (identifier "piVar9") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      piVar9 = (int *)malloc(8);\n      if (piVar9 == (int *)0x0) goto LAB_0002a7b2;\n    }" ({ "{") (expression_statement "piVar9 = (int *)malloc(8);" (assignment_expression "piVar9 = (int *)malloc(8)" (identifier "piVar9") (= "=") (cast_expression "(int *)malloc(8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "malloc(8)" (identifier "malloc") (argument_list "(8)" (( "(") (number_literal "8") () ")"))))) (; ";")) (if_statement "if (piVar9 == (int *)0x0) goto LAB_0002a7b2;" (if "if") (parenthesized_expression "(piVar9 == (int *)0x0)" (( "(") (binary_expression "piVar9 == (int *)0x0" (identifier "piVar9") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (goto_statement "goto LAB_0002a7b2;" (goto "goto") (statement_identifier "LAB_0002a7b2") (; ";"))) (} "}")) (else_clause "else {\n      *(int *)(param_1 + 0x24) = piVar9[1];\n    }" (else "else") (compound_statement "{\n      *(int *)(param_1 + 0x24) = piVar9[1];\n    }" ({ "{") (expression_statement "*(int *)(param_1 + 0x24) = piVar9[1];" (assignment_expression "*(int *)(param_1 + 0x24) = piVar9[1]" (pointer_expression "*(int *)(param_1 + 0x24)" (* "*") (cast_expression "(int *)(param_1 + 0x24)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x24)" (( "(") (binary_expression "param_1 + 0x24" (identifier "param_1") (+ "+") (number_literal "0x24")) () ")")))) (= "=") (subscript_expression "piVar9[1]" (identifier "piVar9") ([ "[") (number_literal "1") (] "]"))) (; ";")) (} "}")))) (expression_statement "iVar7 = local_24[1];" (assignment_expression "iVar7 = local_24[1]" (identifier "iVar7") (= "=") (subscript_expression "local_24[1]" (identifier "local_24") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "*piVar9 = param_2;" (assignment_expression "*piVar9 = param_2" (pointer_expression "*piVar9" (* "*") (identifier "piVar9")) (= "=") (identifier "param_2")) (; ";")) (expression_statement "piVar9[1] = iVar7;" (assignment_expression "piVar9[1] = iVar7" (subscript_expression "piVar9[1]" (identifier "piVar9") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "iVar7")) (; ";")) (expression_statement "local_24[1] = (int)piVar9;" (assignment_expression "local_24[1] = (int)piVar9" (subscript_expression "local_24[1]" (identifier "local_24") ([ "[") (number_literal "1") (] "]")) (= "=") (cast_expression "(int)piVar9" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "piVar9"))) (; ";")) (expression_statement "uVar8 = 1;" (assignment_expression "uVar8 = 1" (identifier "uVar8") (= "=") (number_literal "1")) (; ";")) (expression_statement "*(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;" (assignment_expression "*(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1" (pointer_expression "*(int *)(param_1 + 0x10)" (* "*") (cast_expression "(int *)(param_1 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")")))) (= "=") (binary_expression "*(int *)(param_1 + 0x10) + 1" (pointer_expression "*(int *)(param_1 + 0x10)" (* "*") (cast_expression "(int *)(param_1 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")")))) (+ "+") (number_literal "1"))) (; ";")) (} "}")))) (labeled_statement "LAB_0002a55c:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_00038830();\n  }" (statement_identifier "LAB_0002a55c") (: ":") (if_statement "if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_00038830();\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                    \n    FUN_00038830();\n  }" ({ "{") (expression_statement "FUN_00038830();" (call_expression "FUN_00038830()" (identifier "FUN_00038830") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))) (return_statement "return uVar8;" (return "return") (identifier "uVar8") (; ";")) (} "}")))

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

int function_1(type_1 *table,void *var_2,void **var_6)

{
  float var_7;
  type_2 *var_9;
  type_3 *phVar3;
  float var_8;
  float var_16;
  float var_15;
  type_4 _Var7;
  void *var_5;
  int iVar9;
  type_3 *var_21;
  int var_1;
  size_t sStack_3c;
  type_3 *bucket;
  int var_23;
  type_5 uStack_14;
  
  uStack_14 = 0x2a509;
  var_23 = *(int *)(var_1 + 0x14);
  if (var_2 == (void *)0x0) {
                    /* WARNING: Subroutine does not return */
    var_3();
  }
  var_5 = var_4(table,var_2,&bucket,false);
  var_15 = var_10;
  if (var_5 != (void *)0x0) {
    iVar9 = 0;
    if (var_6 != (void **)0x0) {
      *var_6 = var_5;
    }
    goto LAB_0002a55c;
  }
  var_9 = table->tuning;
  var_7 = var_9->growth_threshold;
  var_8 = (float)table->n_buckets;
  if (var_7 * var_8 < (float)table->n_buckets_used) {
    if (var_9 == &default_tuning) {
      var_8 = var_10 * var_8 * var_11;
    }
    else {
      if ((((var_7 <= var_12) || (var_13 <= var_7)) ||
          (var_9->growth_factor <= var_14)) || (var_9->shrink_threshold < 0.0)) {
LAB_0002a740:
        table->tuning = &default_tuning;
        if ((float)table->n_buckets_used <= var_15 * var_8) goto LAB_0002a5c0;
        var_8 = var_8 * var_11;
        var_7 = var_15;
      }
      else {
        var_16 = var_9->shrink_threshold + var_12;
        if (((var_9->shrink_factor <= var_16) || (1.0 < var_9->shrink_factor)) || (var_7 <= var_16))
        goto LAB_0002a740;
        var_8 = var_9->growth_factor * var_8;
        if (var_9->is_n_buckets != false) goto LAB_0002a686;
      }
      var_8 = var_7 * var_8;
    }
LAB_0002a686:
    if (var_8 < var_17) {
      sStack_3c = (size_t)(type_6)var_18(var_8);
      _Var7 = var_19(table,sStack_3c);
      if (_Var7) {
        var_5 = var_4(table,var_2,&bucket,false);
        if (var_5 != (void *)0x0) {
          iVar9 = var_20();
          return iVar9;
        }
        goto LAB_0002a5c0;
      }
    }
LAB_0002a7b2:
    iVar9 = -1;
  }
  else {
LAB_0002a5c0:
    if (bucket->data == (void *)0x0) {
      bucket->data = var_2;
      iVar9 = 1;
      table->n_entries = table->n_entries + 1;
      table->n_buckets_used = table->n_buckets_used + 1;
      goto LAB_0002a55c;
    }
    var_21 = table->free_entry_list;
    if (var_21 == (type_3 *)0x0) {
      var_21 = (type_3 *)var_22(8);
      if (var_21 == (type_3 *)0x0) goto LAB_0002a7b2;
    }
    else {
      table->free_entry_list = var_21->next;
    }
    phVar3 = bucket->next;
    var_21->data = var_2;
    var_21->next = phVar3;
    bucket->next = var_21;
    iVar9 = 1;
    table->n_entries = table->n_entries + 1;
  }
LAB_0002a55c:
  if (var_23 != *(int *)(var_1 + 0x14)) {
                    /* WARNING: Subroutine does not return */
    var_24();
  }
  return iVar9;
}


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

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

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

{
  float fVar1;
  float *pfVar2;
  float fVar3;
  float fVar4;
  float fVar5;
  char cVar6;
  int iVar7;
  undefined4 uVar8;
  int *piVar9;
  int in_GS_OFFSET;
  int **ppiVar10;
  undefined4 local_3c;
  int *local_24;
  int local_20;
  undefined4 uStack_14;
  
  uStack_14 = 0x2a509;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  if (param_2 == 0) {
                    /* WARNING: Subroutine does not return */
    abort();
  }
  ppiVar10 = &local_24;
  iVar7 = FUN_00029790(0);
  fVar5 = DAT_0003c7f8;
  if (iVar7 != 0) {
    uVar8 = 0;
    if (param_3 != (int *)0x0) {
      *param_3 = iVar7;
    }
    goto LAB_0002a55c;
  }
  pfVar2 = *(float **)(param_1 + 0x14);
  fVar1 = pfVar2[2];
  fVar3 = (float)*(uint *)(param_1 + 8);
  if (fVar1 * fVar3 < (float)*(uint *)(param_1 + 0xc)) {
    if (pfVar2 == (float *)&DAT_0003c7e0) {
      fVar3 = DAT_0003c7f8 * fVar3 * DAT_0003c7fc;
    }
    else {
      if ((((fVar1 <= DAT_0003c800) || (DAT_0003c804 <= fVar1)) || (pfVar2[3] <= DAT_0003c808)) ||
         (*pfVar2 < 0.0)) {
LAB_0002a740:
        *(undefined **)(param_1 + 0x14) = &DAT_0003c7e0;
        if ((float)*(uint *)(param_1 + 0xc) <= fVar5 * fVar3) goto LAB_0002a5c0;
        fVar3 = fVar3 * DAT_0003c7fc;
        fVar1 = fVar5;
      }
      else {
        fVar4 = *pfVar2 + DAT_0003c800;
        if (((pfVar2[1] <= fVar4) || (1.0 < pfVar2[1])) || (fVar1 <= fVar4)) goto LAB_0002a740;
        fVar3 = pfVar2[3] * fVar3;
        if (*(char *)(pfVar2 + 4) != '\0') goto LAB_0002a686;
      }
      fVar3 = fVar1 * fVar3;
    }
LAB_0002a686:
    if (fVar3 < DAT_0003c80c) {
      local_3c = (undefined4)(longlong)ROUND(fVar3);
      cVar6 = FUN_0002a2c0(param_1,local_3c);
      if (cVar6 != '\0') {
        iVar7 = FUN_00029790(0);
        if (iVar7 != 0) {
          uVar8 = FUN_0001278e(ppiVar10);
          return uVar8;
        }
        goto LAB_0002a5c0;
      }
    }
LAB_0002a7b2:
    uVar8 = 0xffffffff;
  }
  else {
LAB_0002a5c0:
    if (*local_24 == 0) {
      *local_24 = param_2;
      uVar8 = 1;
      *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;
      *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;
      goto LAB_0002a55c;
    }
    piVar9 = *(int **)(param_1 + 0x24);
    if (piVar9 == (int *)0x0) {
      piVar9 = (int *)malloc(8);
      if (piVar9 == (int *)0x0) goto LAB_0002a7b2;
    }
    else {
      *(int *)(param_1 + 0x24) = piVar9[1];
    }
    iVar7 = local_24[1];
    *piVar9 = param_2;
    piVar9[1] = iVar7;
    local_24[1] = (int)piVar9;
    uVar8 = 1;
    *(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;
  }
LAB_0002a55c:
  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    FUN_00038830();
  }
  return uVar8;
}

