
int clearDatabasePage(BtShared *pBt,Pgno pgno,int freePageFlag,int *pnChange)

{
  byte bVar1;
  ushort uVar2;
  ushort uVar3;
  uint uVar4;
  long lVar5;
  u8 *puVar6;
  int iVar7;
  long in_FS_OFFSET;
  int rc;
  MemPage *pPage;
  CellInfo info;
  
  lVar5 = *(long *)(in_FS_OFFSET + 0x28);
  if (pBt->nPage < pgno) {
    iVar7 = sqlite3CorruptError(0x1201c);
    goto LAB_0014d863;
  }
  rc = getAndInitPage(pBt,pgno,&pPage,(BtCursor *)0x0,0);
  iVar7 = rc;
  if (rc != 0) goto LAB_0014d863;
  if (pPage->bBusy == '\0') {
    pPage->bBusy = '\x01';
    bVar1 = pPage->hdrOffset;
    uVar2 = pPage->nCell;
    if (uVar2 != 0) {
      iVar7 = 0;
      do {
        rc = 0;
        uVar3 = *(ushort *)(pPage->aCellIdx + iVar7 * 2);
        uVar2 = pPage->maskPage;
        puVar6 = pPage->aData;
        if (pPage->leaf == '\0') {
          uVar4 = *(uint *)(puVar6 + ((uVar3 << 8 | uVar3 >> 8) & uVar2));
          rc = clearDatabasePage(pBt,uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8
                                     | uVar4 << 0x18,1,pnChange);
          if (rc != 0) goto LAB_0014d896;
        }
        rc = clearCell(pPage,puVar6 + ((uVar3 << 8 | uVar3 >> 8) & uVar2),&info);
        if (rc != 0) goto LAB_0014d896;
        iVar7 = iVar7 + 1;
        uVar2 = pPage->nCell;
      } while (iVar7 < (int)(uint)uVar2);
    }
    if (pPage->leaf == '\0') {
      uVar4 = *(uint *)(pPage->aData + (ulong)bVar1 + 8);
      rc = clearDatabasePage(pBt,uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |
                                 uVar4 << 0x18,1,pnChange);
      if (rc != 0) goto LAB_0014d896;
    }
    else if (pnChange != (int *)0x0) {
      *pnChange = *pnChange + (uint)uVar2;
    }
    if (freePageFlag == 0) {
      rc = sqlite3PagerWrite(pPage->pDbPage);
      if (rc == 0) {
        zeroPage(pPage,(uint)(pPage->aData[bVar1] | 8));
      }
    }
    else {
      freePage(pPage,&rc);
    }
  }
  else {
    rc = sqlite3CorruptError(0x12021);
  }
LAB_0014d896:
  pPage->bBusy = '\0';
  releasePage(pPage);
  iVar7 = rc;
LAB_0014d863:
  if (lVar5 != *(long *)(in_FS_OFFSET + 0x28)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return iVar7;
}



int FUN_0014d7d9(long param_1,undefined8 param_2,int param_3,int *param_4)

{
  byte bVar1;
  ushort uVar2;
  uint uVar3;
  uint *puVar4;
  int iVar5;
  long in_FS_OFFSET;
  int local_64;
  long local_60;
  undefined1 local_58 [24];
  long local_40;
  
  local_40 = *(long *)(in_FS_OFFSET + 0x28);
  if (*(uint *)(param_1 + 0x40) < (uint)param_2) {
    iVar5 = FUN_00129d5f(0x1201c);
    goto LAB_0014d863;
  }
  local_64 = FUN_0012b326(param_1,param_2,&local_60,0,0);
  iVar5 = local_64;
  if (local_64 != 0) goto LAB_0014d863;
  if (*(char *)(local_60 + 1) == '\0') {
    *(undefined1 *)(local_60 + 1) = 1;
    bVar1 = *(byte *)(local_60 + 9);
    uVar2 = *(ushort *)(local_60 + 0x18);
    if (uVar2 != 0) {
      iVar5 = 0;
      do {
        local_64 = 0;
        uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2));
        puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +
                         *(long *)(local_60 + 0x50));
        if (*(char *)(local_60 + 8) == '\0') {
          uVar3 = *puVar4;
          local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |
                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);
          if (local_64 != 0) goto LAB_0014d896;
        }
        local_64 = FUN_0014b3c0(local_60,puVar4,local_58);
        if (local_64 != 0) goto LAB_0014d896;
        iVar5 = iVar5 + 1;
        uVar2 = *(ushort *)(local_60 + 0x18);
      } while (iVar5 < (int)(uint)uVar2);
    }
    if (*(char *)(local_60 + 8) == '\0') {
      uVar3 = *(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1);
      local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |
                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);
      if (local_64 != 0) goto LAB_0014d896;
    }
    else if (param_4 != (int *)0x0) {
      *param_4 = *param_4 + (uint)uVar2;
    }
    if (param_3 == 0) {
      local_64 = FUN_00146893(*(undefined8 *)(local_60 + 0x70));
      if (local_64 == 0) {
        FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8);
      }
    }
    else {
      FUN_0014b567(local_60,&local_64);
    }
  }
  else {
    local_64 = FUN_00129d5f(0x12021);
  }
LAB_0014d896:
  *(undefined1 *)(local_60 + 1) = 0;
  FUN_0010f151(local_60);
  iVar5 = local_64;
LAB_0014d863:
  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return iVar5;
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x48
MOV RAX,qword ptr FS:[0x28]
MOV qword ptr [RSP + 0x38],RAX
XOR EAX,EAX
CMP ESI,dword ptr [RDI + 0x40]
JA 0x0014d857
MOV R12,RDI
MOV R14D,EDX
MOV R13,RCX
LEA RDX,[RSP + 0x18]
MOV R8D,0x0
MOV ECX,0x0
CALL 0x0012b326
MOV EBP,EAX
MOV dword ptr [RSP + 0x14],EAX
TEST EAX,EAX
JNZ 0x0014d863
MOV RAX,qword ptr [RSP + 0x18]
CMP byte ptr [RAX + 0x1],0x0
JNZ 0x0014d888
MOV byte ptr [RAX + 0x1],0x1
MOV RAX,qword ptr [RSP + 0x18]
MOVZX EDI,byte ptr [RAX + 0x9]
MOV byte ptr [RSP + 0xf],DIL
MOVZX EDX,word ptr [RAX + 0x18]
TEST EDX,EDX
JLE 0x0014d91c
LEA R15,[RSP + 0x20]
JMP 0x0014d8d7
MOV EDI,0x1201c
CALL 0x00129d5f
MOV EBP,EAX
MOV EAX,EBP
MOV RCX,qword ptr [RSP + 0x38]
XOR RCX,qword ptr FS:[0x28]
JNZ 0x0014d9ae
ADD RSP,0x48
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV EDI,0x12021
CALL 0x00129d5f
MOV dword ptr [RSP + 0x14],EAX
MOV RAX,qword ptr [RSP + 0x18]
MOV byte ptr [RAX + 0x1],0x0
MOV RDI,qword ptr [RSP + 0x18]
CALL 0x0010f151
MOV EBP,dword ptr [RSP + 0x14]
JMP 0x0014d863
MOV RDX,R15
MOV RSI,RBX
MOV RDI,qword ptr [RSP + 0x18]
CALL 0x0014b3c0
MOV dword ptr [RSP + 0x14],EAX
TEST EAX,EAX
JNZ 0x0014d896
ADD EBP,0x1
MOV RAX,qword ptr [RSP + 0x18]
MOVZX EDX,word ptr [RAX + 0x18]
CMP EDX,EBP
JLE 0x0014d91c
LEA EDX,[RBP + RBP*0x1]
MOVSXD RDX,EDX
MOV RCX,qword ptr [RAX + 0x60]
MOVZX EBX,word ptr [RCX + RDX*0x1]
ROL BX,0x8
AND BX,word ptr [RAX + 0x1a]
MOVZX EBX,BX
ADD RBX,qword ptr [RAX + 0x50]
CMP byte ptr [RAX + 0x8],0x0
JNZ 0x0014d8af
MOV ESI,dword ptr [RBX]
BSWAP ESI
MOV RCX,R13
MOV EDX,0x1
MOV RDI,R12
CALL 0x0014d7d9
MOV dword ptr [RSP + 0x14],EAX
TEST EAX,EAX
JZ 0x0014d8af
JMP 0x0014d896
CMP byte ptr [RAX + 0x8],0x0
JZ 0x0014d944
TEST R13,R13
JZ 0x0014d92b
ADD dword ptr [R13],EDX
TEST R14D,R14D
JZ 0x0014d971
LEA RSI,[RSP + 0x14]
MOV RDI,qword ptr [RSP + 0x18]
CALL 0x0014b567
JMP 0x0014d896
MOVZX EDX,byte ptr [RSP + 0xf]
MOV RCX,qword ptr [RAX + 0x50]
MOV ESI,dword ptr [RCX + RDX*0x1 + 0x8]
BSWAP ESI
MOV RCX,R13
MOV EDX,0x1
MOV RDI,R12
CALL 0x0014d7d9
MOV dword ptr [RSP + 0x14],EAX
TEST EAX,EAX
JNZ 0x0014d896
JMP 0x0014d92b
MOV RAX,qword ptr [RSP + 0x18]
MOV RDI,qword ptr [RAX + 0x70]
CALL 0x00146893
MOV dword ptr [RSP + 0x14],EAX
TEST EAX,EAX
JNZ 0x0014d896
MOV RDI,qword ptr [RSP + 0x18]
MOVZX EAX,byte ptr [RSP + 0xf]
MOV RDX,qword ptr [RDI + 0x50]
MOVZX ESI,byte ptr [RDX + RAX*0x1]
OR ESI,0x8
MOVZX ESI,SIL
CALL 0x00129e53
JMP 0x0014d896
CALL 0x0010c0d0
(translation_unit "int FUN_0014d7d9(long param_1,undefined8 param_2,int param_3,int *param_4)\n\n{\n  byte bVar1;\n  ushort uVar2;\n  uint uVar3;\n  uint *puVar4;\n  int iVar5;\n  long in_FS_OFFSET;\n  int local_64;\n  long local_60;\n  undefined1 local_58 [24];\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if (*(uint *)(param_1 + 0x40) < (uint)param_2) {\n    iVar5 = FUN_00129d5f(0x1201c);\n    goto LAB_0014d863;\n  }\n  local_64 = FUN_0012b326(param_1,param_2,&local_60,0,0);\n  iVar5 = local_64;\n  if (local_64 != 0) goto LAB_0014d863;\n  if (*(char *)(local_60 + 1) == '\0') {\n    *(undefined1 *)(local_60 + 1) = 1;\n    bVar1 = *(byte *)(local_60 + 9);\n    uVar2 = *(ushort *)(local_60 + 0x18);\n    if (uVar2 != 0) {\n      iVar5 = 0;\n      do {\n        local_64 = 0;\n        uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2));\n        puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50));\n        if (*(char *)(local_60 + 8) == '\0') {\n          uVar3 = *puVar4;\n          local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n          if (local_64 != 0) goto LAB_0014d896;\n        }\n        local_64 = FUN_0014b3c0(local_60,puVar4,local_58);\n        if (local_64 != 0) goto LAB_0014d896;\n        iVar5 = iVar5 + 1;\n        uVar2 = *(ushort *)(local_60 + 0x18);\n      } while (iVar5 < (int)(uint)uVar2);\n    }\n    if (*(char *)(local_60 + 8) == '\0') {\n      uVar3 = *(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1);\n      local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n      if (local_64 != 0) goto LAB_0014d896;\n    }\n    else if (param_4 != (int *)0x0) {\n      *param_4 = *param_4 + (uint)uVar2;\n    }\n    if (param_3 == 0) {\n      local_64 = FUN_00146893(*(undefined8 *)(local_60 + 0x70));\n      if (local_64 == 0) {\n        FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8);\n      }\n    }\n    else {\n      FUN_0014b567(local_60,&local_64);\n    }\n  }\n  else {\n    local_64 = FUN_00129d5f(0x12021);\n  }\nLAB_0014d896:\n  *(undefined1 *)(local_60 + 1) = 0;\n  FUN_0010f151(local_60);\n  iVar5 = local_64;\nLAB_0014d863:\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  return iVar5;\n}\n\n" (function_definition "int FUN_0014d7d9(long param_1,undefined8 param_2,int param_3,int *param_4)\n\n{\n  byte bVar1;\n  ushort uVar2;\n  uint uVar3;\n  uint *puVar4;\n  int iVar5;\n  long in_FS_OFFSET;\n  int local_64;\n  long local_60;\n  undefined1 local_58 [24];\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if (*(uint *)(param_1 + 0x40) < (uint)param_2) {\n    iVar5 = FUN_00129d5f(0x1201c);\n    goto LAB_0014d863;\n  }\n  local_64 = FUN_0012b326(param_1,param_2,&local_60,0,0);\n  iVar5 = local_64;\n  if (local_64 != 0) goto LAB_0014d863;\n  if (*(char *)(local_60 + 1) == '\0') {\n    *(undefined1 *)(local_60 + 1) = 1;\n    bVar1 = *(byte *)(local_60 + 9);\n    uVar2 = *(ushort *)(local_60 + 0x18);\n    if (uVar2 != 0) {\n      iVar5 = 0;\n      do {\n        local_64 = 0;\n        uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2));\n        puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50));\n        if (*(char *)(local_60 + 8) == '\0') {\n          uVar3 = *puVar4;\n          local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n          if (local_64 != 0) goto LAB_0014d896;\n        }\n        local_64 = FUN_0014b3c0(local_60,puVar4,local_58);\n        if (local_64 != 0) goto LAB_0014d896;\n        iVar5 = iVar5 + 1;\n        uVar2 = *(ushort *)(local_60 + 0x18);\n      } while (iVar5 < (int)(uint)uVar2);\n    }\n    if (*(char *)(local_60 + 8) == '\0') {\n      uVar3 = *(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1);\n      local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n      if (local_64 != 0) goto LAB_0014d896;\n    }\n    else if (param_4 != (int *)0x0) {\n      *param_4 = *param_4 + (uint)uVar2;\n    }\n    if (param_3 == 0) {\n      local_64 = FUN_00146893(*(undefined8 *)(local_60 + 0x70));\n      if (local_64 == 0) {\n        FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8);\n      }\n    }\n    else {\n      FUN_0014b567(local_60,&local_64);\n    }\n  }\n  else {\n    local_64 = FUN_00129d5f(0x12021);\n  }\nLAB_0014d896:\n  *(undefined1 *)(local_60 + 1) = 0;\n  FUN_0010f151(local_60);\n  iVar5 = local_64;\nLAB_0014d863:\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  return iVar5;\n}" primitive_type (function_declarator "FUN_0014d7d9(long param_1,undefined8 param_2,int param_3,int *param_4)" identifier (parameter_list "(long param_1,undefined8 param_2,int param_3,int *param_4)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_2" type_identifier identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int *param_4" primitive_type (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  byte bVar1;\n  ushort uVar2;\n  uint uVar3;\n  uint *puVar4;\n  int iVar5;\n  long in_FS_OFFSET;\n  int local_64;\n  long local_60;\n  undefined1 local_58 [24];\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if (*(uint *)(param_1 + 0x40) < (uint)param_2) {\n    iVar5 = FUN_00129d5f(0x1201c);\n    goto LAB_0014d863;\n  }\n  local_64 = FUN_0012b326(param_1,param_2,&local_60,0,0);\n  iVar5 = local_64;\n  if (local_64 != 0) goto LAB_0014d863;\n  if (*(char *)(local_60 + 1) == '\0') {\n    *(undefined1 *)(local_60 + 1) = 1;\n    bVar1 = *(byte *)(local_60 + 9);\n    uVar2 = *(ushort *)(local_60 + 0x18);\n    if (uVar2 != 0) {\n      iVar5 = 0;\n      do {\n        local_64 = 0;\n        uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2));\n        puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50));\n        if (*(char *)(local_60 + 8) == '\0') {\n          uVar3 = *puVar4;\n          local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n          if (local_64 != 0) goto LAB_0014d896;\n        }\n        local_64 = FUN_0014b3c0(local_60,puVar4,local_58);\n        if (local_64 != 0) goto LAB_0014d896;\n        iVar5 = iVar5 + 1;\n        uVar2 = *(ushort *)(local_60 + 0x18);\n      } while (iVar5 < (int)(uint)uVar2);\n    }\n    if (*(char *)(local_60 + 8) == '\0') {\n      uVar3 = *(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1);\n      local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n      if (local_64 != 0) goto LAB_0014d896;\n    }\n    else if (param_4 != (int *)0x0) {\n      *param_4 = *param_4 + (uint)uVar2;\n    }\n    if (param_3 == 0) {\n      local_64 = FUN_00146893(*(undefined8 *)(local_60 + 0x70));\n      if (local_64 == 0) {\n        FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8);\n      }\n    }\n    else {\n      FUN_0014b567(local_60,&local_64);\n    }\n  }\n  else {\n    local_64 = FUN_00129d5f(0x12021);\n  }\nLAB_0014d896:\n  *(undefined1 *)(local_60 + 1) = 0;\n  FUN_0010f151(local_60);\n  iVar5 = local_64;\nLAB_0014d863:\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  return iVar5;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "ushort uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "int local_64;" primitive_type identifier ;) (declaration "long local_60;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 local_58 [24];" type_identifier (array_declarator "local_58 [24]" identifier [ number_literal ]) ;) (declaration "long local_40;" (sized_type_specifier "long" long) identifier ;) (expression_statement "local_40 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_40 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (if_statement "if (*(uint *)(param_1 + 0x40) < (uint)param_2) {\n    iVar5 = FUN_00129d5f(0x1201c);\n    goto LAB_0014d863;\n  }" if (parenthesized_expression "(*(uint *)(param_1 + 0x40) < (uint)param_2)" ( (binary_expression "*(uint *)(param_1 + 0x40) < (uint)param_2" (pointer_expression "*(uint *)(param_1 + 0x40)" * (cast_expression "(uint *)(param_1 + 0x40)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) < (cast_expression "(uint)param_2" ( (type_descriptor "uint" type_identifier) ) identifier)) )) (compound_statement "{\n    iVar5 = FUN_00129d5f(0x1201c);\n    goto LAB_0014d863;\n  }" { (expression_statement "iVar5 = FUN_00129d5f(0x1201c);" (assignment_expression "iVar5 = FUN_00129d5f(0x1201c)" identifier = (call_expression "FUN_00129d5f(0x1201c)" identifier (argument_list "(0x1201c)" ( number_literal )))) ;) (goto_statement "goto LAB_0014d863;" goto statement_identifier ;) })) (expression_statement "local_64 = FUN_0012b326(param_1,param_2,&local_60,0,0);" (assignment_expression "local_64 = FUN_0012b326(param_1,param_2,&local_60,0,0)" identifier = (call_expression "FUN_0012b326(param_1,param_2,&local_60,0,0)" identifier (argument_list "(param_1,param_2,&local_60,0,0)" ( identifier , identifier , (pointer_expression "&local_60" & identifier) , number_literal , number_literal )))) ;) (expression_statement "iVar5 = local_64;" (assignment_expression "iVar5 = local_64" identifier = identifier) ;) (if_statement "if (local_64 != 0) goto LAB_0014d863;" if (parenthesized_expression "(local_64 != 0)" ( (binary_expression "local_64 != 0" identifier != number_literal) )) (goto_statement "goto LAB_0014d863;" goto statement_identifier ;)) (if_statement "if (*(char *)(local_60 + 1) == '\0') {\n    *(undefined1 *)(local_60 + 1) = 1;\n    bVar1 = *(byte *)(local_60 + 9);\n    uVar2 = *(ushort *)(local_60 + 0x18);\n    if (uVar2 != 0) {\n      iVar5 = 0;\n      do {\n        local_64 = 0;\n        uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2));\n        puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50));\n        if (*(char *)(local_60 + 8) == '\0') {\n          uVar3 = *puVar4;\n          local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n          if (local_64 != 0) goto LAB_0014d896;\n        }\n        local_64 = FUN_0014b3c0(local_60,puVar4,local_58);\n        if (local_64 != 0) goto LAB_0014d896;\n        iVar5 = iVar5 + 1;\n        uVar2 = *(ushort *)(local_60 + 0x18);\n      } while (iVar5 < (int)(uint)uVar2);\n    }\n    if (*(char *)(local_60 + 8) == '\0') {\n      uVar3 = *(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1);\n      local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n      if (local_64 != 0) goto LAB_0014d896;\n    }\n    else if (param_4 != (int *)0x0) {\n      *param_4 = *param_4 + (uint)uVar2;\n    }\n    if (param_3 == 0) {\n      local_64 = FUN_00146893(*(undefined8 *)(local_60 + 0x70));\n      if (local_64 == 0) {\n        FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8);\n      }\n    }\n    else {\n      FUN_0014b567(local_60,&local_64);\n    }\n  }\n  else {\n    local_64 = FUN_00129d5f(0x12021);\n  }" if (parenthesized_expression "(*(char *)(local_60 + 1) == '\0')" ( (binary_expression "*(char *)(local_60 + 1) == '\0'" (pointer_expression "*(char *)(local_60 + 1)" * (cast_expression "(char *)(local_60 + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + 1)" ( (binary_expression "local_60 + 1" identifier + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    *(undefined1 *)(local_60 + 1) = 1;\n    bVar1 = *(byte *)(local_60 + 9);\n    uVar2 = *(ushort *)(local_60 + 0x18);\n    if (uVar2 != 0) {\n      iVar5 = 0;\n      do {\n        local_64 = 0;\n        uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2));\n        puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50));\n        if (*(char *)(local_60 + 8) == '\0') {\n          uVar3 = *puVar4;\n          local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n          if (local_64 != 0) goto LAB_0014d896;\n        }\n        local_64 = FUN_0014b3c0(local_60,puVar4,local_58);\n        if (local_64 != 0) goto LAB_0014d896;\n        iVar5 = iVar5 + 1;\n        uVar2 = *(ushort *)(local_60 + 0x18);\n      } while (iVar5 < (int)(uint)uVar2);\n    }\n    if (*(char *)(local_60 + 8) == '\0') {\n      uVar3 = *(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1);\n      local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n      if (local_64 != 0) goto LAB_0014d896;\n    }\n    else if (param_4 != (int *)0x0) {\n      *param_4 = *param_4 + (uint)uVar2;\n    }\n    if (param_3 == 0) {\n      local_64 = FUN_00146893(*(undefined8 *)(local_60 + 0x70));\n      if (local_64 == 0) {\n        FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8);\n      }\n    }\n    else {\n      FUN_0014b567(local_60,&local_64);\n    }\n  }" { (expression_statement "*(undefined1 *)(local_60 + 1) = 1;" (assignment_expression "*(undefined1 *)(local_60 + 1) = 1" (pointer_expression "*(undefined1 *)(local_60 + 1)" * (cast_expression "(undefined1 *)(local_60 + 1)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + 1)" ( (binary_expression "local_60 + 1" identifier + number_literal) )))) = number_literal) ;) (expression_statement "bVar1 = *(byte *)(local_60 + 9);" (assignment_expression "bVar1 = *(byte *)(local_60 + 9)" identifier = (pointer_expression "*(byte *)(local_60 + 9)" * (cast_expression "(byte *)(local_60 + 9)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + 9)" ( (binary_expression "local_60 + 9" identifier + number_literal) ))))) ;) (expression_statement "uVar2 = *(ushort *)(local_60 + 0x18);" (assignment_expression "uVar2 = *(ushort *)(local_60 + 0x18)" identifier = (pointer_expression "*(ushort *)(local_60 + 0x18)" * (cast_expression "(ushort *)(local_60 + 0x18)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + 0x18)" ( (binary_expression "local_60 + 0x18" identifier + number_literal) ))))) ;) (if_statement "if (uVar2 != 0) {\n      iVar5 = 0;\n      do {\n        local_64 = 0;\n        uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2));\n        puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50));\n        if (*(char *)(local_60 + 8) == '\0') {\n          uVar3 = *puVar4;\n          local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n          if (local_64 != 0) goto LAB_0014d896;\n        }\n        local_64 = FUN_0014b3c0(local_60,puVar4,local_58);\n        if (local_64 != 0) goto LAB_0014d896;\n        iVar5 = iVar5 + 1;\n        uVar2 = *(ushort *)(local_60 + 0x18);\n      } while (iVar5 < (int)(uint)uVar2);\n    }" if (parenthesized_expression "(uVar2 != 0)" ( (binary_expression "uVar2 != 0" identifier != number_literal) )) (compound_statement "{\n      iVar5 = 0;\n      do {\n        local_64 = 0;\n        uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2));\n        puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50));\n        if (*(char *)(local_60 + 8) == '\0') {\n          uVar3 = *puVar4;\n          local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n          if (local_64 != 0) goto LAB_0014d896;\n        }\n        local_64 = FUN_0014b3c0(local_60,puVar4,local_58);\n        if (local_64 != 0) goto LAB_0014d896;\n        iVar5 = iVar5 + 1;\n        uVar2 = *(ushort *)(local_60 + 0x18);\n      } while (iVar5 < (int)(uint)uVar2);\n    }" { (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) (do_statement "do {\n        local_64 = 0;\n        uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2));\n        puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50));\n        if (*(char *)(local_60 + 8) == '\0') {\n          uVar3 = *puVar4;\n          local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n          if (local_64 != 0) goto LAB_0014d896;\n        }\n        local_64 = FUN_0014b3c0(local_60,puVar4,local_58);\n        if (local_64 != 0) goto LAB_0014d896;\n        iVar5 = iVar5 + 1;\n        uVar2 = *(ushort *)(local_60 + 0x18);\n      } while (iVar5 < (int)(uint)uVar2);" do (compound_statement "{\n        local_64 = 0;\n        uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2));\n        puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50));\n        if (*(char *)(local_60 + 8) == '\0') {\n          uVar3 = *puVar4;\n          local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n          if (local_64 != 0) goto LAB_0014d896;\n        }\n        local_64 = FUN_0014b3c0(local_60,puVar4,local_58);\n        if (local_64 != 0) goto LAB_0014d896;\n        iVar5 = iVar5 + 1;\n        uVar2 = *(ushort *)(local_60 + 0x18);\n      }" { (expression_statement "local_64 = 0;" (assignment_expression "local_64 = 0" identifier = number_literal) ;) (expression_statement "uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2));" (assignment_expression "uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2))" identifier = (pointer_expression "*(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2))" * (cast_expression "(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2))" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2))" ( (binary_expression "*(long *)(local_60 + 0x60) + (long)(iVar5 * 2)" (pointer_expression "*(long *)(local_60 + 0x60)" * (cast_expression "(long *)(local_60 + 0x60)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + 0x60)" ( (binary_expression "local_60 + 0x60" identifier + number_literal) )))) + (cast_expression "(long)(iVar5 * 2)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(iVar5 * 2)" ( (binary_expression "iVar5 * 2" identifier * number_literal) )))) ))))) ;) (expression_statement "puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50));" (assignment_expression "puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50))" identifier = (cast_expression "(uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50))" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50))" ( (binary_expression "(ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50)" (call_expression "(ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a))" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a))" ( (binary_expression "(uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)" (parenthesized_expression "(uVar2 << 8 | uVar2 >> 8)" ( (binary_expression "uVar2 << 8 | uVar2 >> 8" (binary_expression "uVar2 << 8" identifier << number_literal) | (binary_expression "uVar2 >> 8" identifier >> number_literal)) )) & (pointer_expression "*(ushort *)(local_60 + 0x1a)" * (cast_expression "(ushort *)(local_60 + 0x1a)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + 0x1a)" ( (binary_expression "local_60 + 0x1a" identifier + number_literal) ))))) ))) + (pointer_expression "*(long *)(local_60 + 0x50)" * (cast_expression "(long *)(local_60 + 0x50)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + 0x50)" ( (binary_expression "local_60 + 0x50" identifier + number_literal) ))))) )))) ;) (if_statement "if (*(char *)(local_60 + 8) == '\0') {\n          uVar3 = *puVar4;\n          local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n          if (local_64 != 0) goto LAB_0014d896;\n        }" if (parenthesized_expression "(*(char *)(local_60 + 8) == '\0')" ( (binary_expression "*(char *)(local_60 + 8) == '\0'" (pointer_expression "*(char *)(local_60 + 8)" * (cast_expression "(char *)(local_60 + 8)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + 8)" ( (binary_expression "local_60 + 8" identifier + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n          uVar3 = *puVar4;\n          local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n          if (local_64 != 0) goto LAB_0014d896;\n        }" { (expression_statement "uVar3 = *puVar4;" (assignment_expression "uVar3 = *puVar4" identifier = (pointer_expression "*puVar4" * identifier)) ;) (expression_statement "local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);" (assignment_expression "local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4)" identifier = (call_expression "FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4)" identifier (argument_list "(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4)" ( identifier , (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8" (binary_expression "uVar3 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar3 & 0xff0000) >> 8" (parenthesized_expression "(uVar3 & 0xff0000)" ( (binary_expression "uVar3 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar3 & 0xff00) << 8" (parenthesized_expression "(uVar3 & 0xff00)" ( (binary_expression "uVar3 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar3 << 0x18" identifier << number_literal)) , number_literal , identifier )))) ;) (if_statement "if (local_64 != 0) goto LAB_0014d896;" if (parenthesized_expression "(local_64 != 0)" ( (binary_expression "local_64 != 0" identifier != number_literal) )) (goto_statement "goto LAB_0014d896;" goto statement_identifier ;)) })) (expression_statement "local_64 = FUN_0014b3c0(local_60,puVar4,local_58);" (assignment_expression "local_64 = FUN_0014b3c0(local_60,puVar4,local_58)" identifier = (call_expression "FUN_0014b3c0(local_60,puVar4,local_58)" identifier (argument_list "(local_60,puVar4,local_58)" ( identifier , identifier , identifier )))) ;) (if_statement "if (local_64 != 0) goto LAB_0014d896;" if (parenthesized_expression "(local_64 != 0)" ( (binary_expression "local_64 != 0" identifier != number_literal) )) (goto_statement "goto LAB_0014d896;" goto statement_identifier ;)) (expression_statement "iVar5 = iVar5 + 1;" (assignment_expression "iVar5 = iVar5 + 1" identifier = (binary_expression "iVar5 + 1" identifier + number_literal)) ;) (expression_statement "uVar2 = *(ushort *)(local_60 + 0x18);" (assignment_expression "uVar2 = *(ushort *)(local_60 + 0x18)" identifier = (pointer_expression "*(ushort *)(local_60 + 0x18)" * (cast_expression "(ushort *)(local_60 + 0x18)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + 0x18)" ( (binary_expression "local_60 + 0x18" identifier + number_literal) ))))) ;) }) while (parenthesized_expression "(iVar5 < (int)(uint)uVar2)" ( (binary_expression "iVar5 < (int)(uint)uVar2" identifier < (cast_expression "(int)(uint)uVar2" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)uVar2" ( (type_descriptor "uint" type_identifier) ) identifier))) )) ;) })) (if_statement "if (*(char *)(local_60 + 8) == '\0') {\n      uVar3 = *(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1);\n      local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n      if (local_64 != 0) goto LAB_0014d896;\n    }\n    else if (param_4 != (int *)0x0) {\n      *param_4 = *param_4 + (uint)uVar2;\n    }" if (parenthesized_expression "(*(char *)(local_60 + 8) == '\0')" ( (binary_expression "*(char *)(local_60 + 8) == '\0'" (pointer_expression "*(char *)(local_60 + 8)" * (cast_expression "(char *)(local_60 + 8)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + 8)" ( (binary_expression "local_60 + 8" identifier + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      uVar3 = *(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1);\n      local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n      if (local_64 != 0) goto LAB_0014d896;\n    }" { (expression_statement "uVar3 = *(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1);" (assignment_expression "uVar3 = *(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1)" identifier = (pointer_expression "*(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1)" * (cast_expression "(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1)" ( (binary_expression "*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1" (binary_expression "*(long *)(local_60 + 0x50) + 8" (pointer_expression "*(long *)(local_60 + 0x50)" * (cast_expression "(long *)(local_60 + 0x50)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + 0x50)" ( (binary_expression "local_60 + 0x50" identifier + number_literal) )))) + number_literal) + (cast_expression "(ulong)bVar1" ( (type_descriptor "ulong" type_identifier) ) identifier)) ))))) ;) (expression_statement "local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);" (assignment_expression "local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4)" identifier = (call_expression "FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4)" identifier (argument_list "(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4)" ( identifier , (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8" (binary_expression "uVar3 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar3 & 0xff0000) >> 8" (parenthesized_expression "(uVar3 & 0xff0000)" ( (binary_expression "uVar3 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar3 & 0xff00) << 8" (parenthesized_expression "(uVar3 & 0xff00)" ( (binary_expression "uVar3 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar3 << 0x18" identifier << number_literal)) , number_literal , identifier )))) ;) (if_statement "if (local_64 != 0) goto LAB_0014d896;" if (parenthesized_expression "(local_64 != 0)" ( (binary_expression "local_64 != 0" identifier != number_literal) )) (goto_statement "goto LAB_0014d896;" goto statement_identifier ;)) }) (else_clause "else if (param_4 != (int *)0x0) {\n      *param_4 = *param_4 + (uint)uVar2;\n    }" else (if_statement "if (param_4 != (int *)0x0) {\n      *param_4 = *param_4 + (uint)uVar2;\n    }" if (parenthesized_expression "(param_4 != (int *)0x0)" ( (binary_expression "param_4 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      *param_4 = *param_4 + (uint)uVar2;\n    }" { (expression_statement "*param_4 = *param_4 + (uint)uVar2;" (assignment_expression "*param_4 = *param_4 + (uint)uVar2" (pointer_expression "*param_4" * identifier) = (binary_expression "*param_4 + (uint)uVar2" (pointer_expression "*param_4" * identifier) + (cast_expression "(uint)uVar2" ( (type_descriptor "uint" type_identifier) ) identifier))) ;) })))) (if_statement "if (param_3 == 0) {\n      local_64 = FUN_00146893(*(undefined8 *)(local_60 + 0x70));\n      if (local_64 == 0) {\n        FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8);\n      }\n    }\n    else {\n      FUN_0014b567(local_60,&local_64);\n    }" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (compound_statement "{\n      local_64 = FUN_00146893(*(undefined8 *)(local_60 + 0x70));\n      if (local_64 == 0) {\n        FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8);\n      }\n    }" { (expression_statement "local_64 = FUN_00146893(*(undefined8 *)(local_60 + 0x70));" (assignment_expression "local_64 = FUN_00146893(*(undefined8 *)(local_60 + 0x70))" identifier = (call_expression "FUN_00146893(*(undefined8 *)(local_60 + 0x70))" identifier (argument_list "(*(undefined8 *)(local_60 + 0x70))" ( (pointer_expression "*(undefined8 *)(local_60 + 0x70)" * (cast_expression "(undefined8 *)(local_60 + 0x70)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + 0x70)" ( (binary_expression "local_60 + 0x70" identifier + number_literal) )))) )))) ;) (if_statement "if (local_64 == 0) {\n        FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8);\n      }" if (parenthesized_expression "(local_64 == 0)" ( (binary_expression "local_64 == 0" identifier == number_literal) )) (compound_statement "{\n        FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8);\n      }" { (expression_statement "FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8);" (call_expression "FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8)" identifier (argument_list "(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8)" ( identifier , (binary_expression "*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8" (pointer_expression "*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1)" * (cast_expression "(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(local_60 + 0x50) + (ulong)bVar1)" ( (binary_expression "*(long *)(local_60 + 0x50) + (ulong)bVar1" (pointer_expression "*(long *)(local_60 + 0x50)" * (cast_expression "(long *)(local_60 + 0x50)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + 0x50)" ( (binary_expression "local_60 + 0x50" identifier + number_literal) )))) + (cast_expression "(ulong)bVar1" ( (type_descriptor "ulong" type_identifier) ) identifier)) )))) | number_literal) ))) ;) })) }) (else_clause "else {\n      FUN_0014b567(local_60,&local_64);\n    }" else (compound_statement "{\n      FUN_0014b567(local_60,&local_64);\n    }" { (expression_statement "FUN_0014b567(local_60,&local_64);" (call_expression "FUN_0014b567(local_60,&local_64)" identifier (argument_list "(local_60,&local_64)" ( identifier , (pointer_expression "&local_64" & identifier) ))) ;) }))) }) (else_clause "else {\n    local_64 = FUN_00129d5f(0x12021);\n  }" else (compound_statement "{\n    local_64 = FUN_00129d5f(0x12021);\n  }" { (expression_statement "local_64 = FUN_00129d5f(0x12021);" (assignment_expression "local_64 = FUN_00129d5f(0x12021)" identifier = (call_expression "FUN_00129d5f(0x12021)" identifier (argument_list "(0x12021)" ( number_literal )))) ;) }))) (labeled_statement "LAB_0014d896:\n  *(undefined1 *)(local_60 + 1) = 0;" statement_identifier : (expression_statement "*(undefined1 *)(local_60 + 1) = 0;" (assignment_expression "*(undefined1 *)(local_60 + 1) = 0" (pointer_expression "*(undefined1 *)(local_60 + 1)" * (cast_expression "(undefined1 *)(local_60 + 1)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + 1)" ( (binary_expression "local_60 + 1" identifier + number_literal) )))) = number_literal) ;)) (expression_statement "FUN_0010f151(local_60);" (call_expression "FUN_0010f151(local_60)" identifier (argument_list "(local_60)" ( identifier ))) ;) (expression_statement "iVar5 = local_64;" (assignment_expression "iVar5 = local_64" identifier = identifier) ;) (labeled_statement "LAB_0014d863:\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }" statement_identifier : (if_statement "if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }" if (parenthesized_expression "(local_40 != *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_40 != *(long *)(in_FS_OFFSET + 0x28)" identifier != (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }" { comment (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) }))) (return_statement "return iVar5;" return identifier ;) })))
(translation_unit "int clearDatabasePage(BtShared *pBt,Pgno pgno,int freePageFlag,int *pnChange)\n\n{\n  byte bVar1;\n  ushort uVar2;\n  ushort uVar3;\n  uint uVar4;\n  long lVar5;\n  u8 *puVar6;\n  int iVar7;\n  long in_FS_OFFSET;\n  int rc;\n  MemPage *pPage;\n  CellInfo info;\n  \n  lVar5 = *(long *)(in_FS_OFFSET + 0x28);\n  if (pBt->nPage < pgno) {\n    iVar7 = sqlite3CorruptError(0x1201c);\n    goto LAB_0014d863;\n  }\n  rc = getAndInitPage(pBt,pgno,&pPage,(BtCursor *)0x0,0);\n  iVar7 = rc;\n  if (rc != 0) goto LAB_0014d863;\n  if (pPage->bBusy == '\0') {\n    pPage->bBusy = '\x01';\n    bVar1 = pPage->hdrOffset;\n    uVar2 = pPage->nCell;\n    if (uVar2 != 0) {\n      iVar7 = 0;\n      do {\n        rc = 0;\n        uVar3 = *(ushort *)(pPage->aCellIdx + iVar7 * 2);\n        uVar2 = pPage->maskPage;\n        puVar6 = pPage->aData;\n        if (pPage->leaf == '\0') {\n          uVar4 = *(uint *)(puVar6 + ((uVar3 << 8 | uVar3 >> 8) & uVar2));\n          rc = clearDatabasePage(pBt,uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8\n                                     | uVar4 << 0x18,1,pnChange);\n          if (rc != 0) goto LAB_0014d896;\n        }\n        rc = clearCell(pPage,puVar6 + ((uVar3 << 8 | uVar3 >> 8) & uVar2),&info);\n        if (rc != 0) goto LAB_0014d896;\n        iVar7 = iVar7 + 1;\n        uVar2 = pPage->nCell;\n      } while (iVar7 < (int)(uint)uVar2);\n    }\n    if (pPage->leaf == '\0') {\n      uVar4 = *(uint *)(pPage->aData + (ulong)bVar1 + 8);\n      rc = clearDatabasePage(pBt,uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                                 uVar4 << 0x18,1,pnChange);\n      if (rc != 0) goto LAB_0014d896;\n    }\n    else if (pnChange != (int *)0x0) {\n      *pnChange = *pnChange + (uint)uVar2;\n    }\n    if (freePageFlag == 0) {\n      rc = sqlite3PagerWrite(pPage->pDbPage);\n      if (rc == 0) {\n        zeroPage(pPage,(uint)(pPage->aData[bVar1] | 8));\n      }\n    }\n    else {\n      freePage(pPage,&rc);\n    }\n  }\n  else {\n    rc = sqlite3CorruptError(0x12021);\n  }\nLAB_0014d896:\n  pPage->bBusy = '\0';\n  releasePage(pPage);\n  iVar7 = rc;\nLAB_0014d863:\n  if (lVar5 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  return iVar7;\n}\n\n" (function_definition "int clearDatabasePage(BtShared *pBt,Pgno pgno,int freePageFlag,int *pnChange)\n\n{\n  byte bVar1;\n  ushort uVar2;\n  ushort uVar3;\n  uint uVar4;\n  long lVar5;\n  u8 *puVar6;\n  int iVar7;\n  long in_FS_OFFSET;\n  int rc;\n  MemPage *pPage;\n  CellInfo info;\n  \n  lVar5 = *(long *)(in_FS_OFFSET + 0x28);\n  if (pBt->nPage < pgno) {\n    iVar7 = sqlite3CorruptError(0x1201c);\n    goto LAB_0014d863;\n  }\n  rc = getAndInitPage(pBt,pgno,&pPage,(BtCursor *)0x0,0);\n  iVar7 = rc;\n  if (rc != 0) goto LAB_0014d863;\n  if (pPage->bBusy == '\0') {\n    pPage->bBusy = '\x01';\n    bVar1 = pPage->hdrOffset;\n    uVar2 = pPage->nCell;\n    if (uVar2 != 0) {\n      iVar7 = 0;\n      do {\n        rc = 0;\n        uVar3 = *(ushort *)(pPage->aCellIdx + iVar7 * 2);\n        uVar2 = pPage->maskPage;\n        puVar6 = pPage->aData;\n        if (pPage->leaf == '\0') {\n          uVar4 = *(uint *)(puVar6 + ((uVar3 << 8 | uVar3 >> 8) & uVar2));\n          rc = clearDatabasePage(pBt,uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8\n                                     | uVar4 << 0x18,1,pnChange);\n          if (rc != 0) goto LAB_0014d896;\n        }\n        rc = clearCell(pPage,puVar6 + ((uVar3 << 8 | uVar3 >> 8) & uVar2),&info);\n        if (rc != 0) goto LAB_0014d896;\n        iVar7 = iVar7 + 1;\n        uVar2 = pPage->nCell;\n      } while (iVar7 < (int)(uint)uVar2);\n    }\n    if (pPage->leaf == '\0') {\n      uVar4 = *(uint *)(pPage->aData + (ulong)bVar1 + 8);\n      rc = clearDatabasePage(pBt,uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                                 uVar4 << 0x18,1,pnChange);\n      if (rc != 0) goto LAB_0014d896;\n    }\n    else if (pnChange != (int *)0x0) {\n      *pnChange = *pnChange + (uint)uVar2;\n    }\n    if (freePageFlag == 0) {\n      rc = sqlite3PagerWrite(pPage->pDbPage);\n      if (rc == 0) {\n        zeroPage(pPage,(uint)(pPage->aData[bVar1] | 8));\n      }\n    }\n    else {\n      freePage(pPage,&rc);\n    }\n  }\n  else {\n    rc = sqlite3CorruptError(0x12021);\n  }\nLAB_0014d896:\n  pPage->bBusy = '\0';\n  releasePage(pPage);\n  iVar7 = rc;\nLAB_0014d863:\n  if (lVar5 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  return iVar7;\n}" primitive_type (function_declarator "clearDatabasePage(BtShared *pBt,Pgno pgno,int freePageFlag,int *pnChange)" identifier (parameter_list "(BtShared *pBt,Pgno pgno,int freePageFlag,int *pnChange)" ( (parameter_declaration "BtShared *pBt" type_identifier (pointer_declarator "*pBt" * identifier)) , (parameter_declaration "Pgno pgno" type_identifier identifier) , (parameter_declaration "int freePageFlag" primitive_type identifier) , (parameter_declaration "int *pnChange" primitive_type (pointer_declarator "*pnChange" * identifier)) ))) (compound_statement "{\n  byte bVar1;\n  ushort uVar2;\n  ushort uVar3;\n  uint uVar4;\n  long lVar5;\n  u8 *puVar6;\n  int iVar7;\n  long in_FS_OFFSET;\n  int rc;\n  MemPage *pPage;\n  CellInfo info;\n  \n  lVar5 = *(long *)(in_FS_OFFSET + 0x28);\n  if (pBt->nPage < pgno) {\n    iVar7 = sqlite3CorruptError(0x1201c);\n    goto LAB_0014d863;\n  }\n  rc = getAndInitPage(pBt,pgno,&pPage,(BtCursor *)0x0,0);\n  iVar7 = rc;\n  if (rc != 0) goto LAB_0014d863;\n  if (pPage->bBusy == '\0') {\n    pPage->bBusy = '\x01';\n    bVar1 = pPage->hdrOffset;\n    uVar2 = pPage->nCell;\n    if (uVar2 != 0) {\n      iVar7 = 0;\n      do {\n        rc = 0;\n        uVar3 = *(ushort *)(pPage->aCellIdx + iVar7 * 2);\n        uVar2 = pPage->maskPage;\n        puVar6 = pPage->aData;\n        if (pPage->leaf == '\0') {\n          uVar4 = *(uint *)(puVar6 + ((uVar3 << 8 | uVar3 >> 8) & uVar2));\n          rc = clearDatabasePage(pBt,uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8\n                                     | uVar4 << 0x18,1,pnChange);\n          if (rc != 0) goto LAB_0014d896;\n        }\n        rc = clearCell(pPage,puVar6 + ((uVar3 << 8 | uVar3 >> 8) & uVar2),&info);\n        if (rc != 0) goto LAB_0014d896;\n        iVar7 = iVar7 + 1;\n        uVar2 = pPage->nCell;\n      } while (iVar7 < (int)(uint)uVar2);\n    }\n    if (pPage->leaf == '\0') {\n      uVar4 = *(uint *)(pPage->aData + (ulong)bVar1 + 8);\n      rc = clearDatabasePage(pBt,uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                                 uVar4 << 0x18,1,pnChange);\n      if (rc != 0) goto LAB_0014d896;\n    }\n    else if (pnChange != (int *)0x0) {\n      *pnChange = *pnChange + (uint)uVar2;\n    }\n    if (freePageFlag == 0) {\n      rc = sqlite3PagerWrite(pPage->pDbPage);\n      if (rc == 0) {\n        zeroPage(pPage,(uint)(pPage->aData[bVar1] | 8));\n      }\n    }\n    else {\n      freePage(pPage,&rc);\n    }\n  }\n  else {\n    rc = sqlite3CorruptError(0x12021);\n  }\nLAB_0014d896:\n  pPage->bBusy = '\0';\n  releasePage(pPage);\n  iVar7 = rc;\nLAB_0014d863:\n  if (lVar5 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  return iVar7;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "ushort uVar2;" type_identifier identifier ;) (declaration "ushort uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "u8 *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "int rc;" primitive_type identifier ;) (declaration "MemPage *pPage;" type_identifier (pointer_declarator "*pPage" * identifier) ;) (declaration "CellInfo info;" type_identifier identifier ;) (expression_statement "lVar5 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "lVar5 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (if_statement "if (pBt->nPage < pgno) {\n    iVar7 = sqlite3CorruptError(0x1201c);\n    goto LAB_0014d863;\n  }" if (parenthesized_expression "(pBt->nPage < pgno)" ( (binary_expression "pBt->nPage < pgno" (field_expression "pBt->nPage" identifier -> field_identifier) < identifier) )) (compound_statement "{\n    iVar7 = sqlite3CorruptError(0x1201c);\n    goto LAB_0014d863;\n  }" { (expression_statement "iVar7 = sqlite3CorruptError(0x1201c);" (assignment_expression "iVar7 = sqlite3CorruptError(0x1201c)" identifier = (call_expression "sqlite3CorruptError(0x1201c)" identifier (argument_list "(0x1201c)" ( number_literal )))) ;) (goto_statement "goto LAB_0014d863;" goto statement_identifier ;) })) (expression_statement "rc = getAndInitPage(pBt,pgno,&pPage,(BtCursor *)0x0,0);" (assignment_expression "rc = getAndInitPage(pBt,pgno,&pPage,(BtCursor *)0x0,0)" identifier = (call_expression "getAndInitPage(pBt,pgno,&pPage,(BtCursor *)0x0,0)" identifier (argument_list "(pBt,pgno,&pPage,(BtCursor *)0x0,0)" ( identifier , identifier , (pointer_expression "&pPage" & identifier) , (cast_expression "(BtCursor *)0x0" ( (type_descriptor "BtCursor *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) , number_literal )))) ;) (expression_statement "iVar7 = rc;" (assignment_expression "iVar7 = rc" identifier = identifier) ;) (if_statement "if (rc != 0) goto LAB_0014d863;" if (parenthesized_expression "(rc != 0)" ( (binary_expression "rc != 0" identifier != number_literal) )) (goto_statement "goto LAB_0014d863;" goto statement_identifier ;)) (if_statement "if (pPage->bBusy == '\0') {\n    pPage->bBusy = '\x01';\n    bVar1 = pPage->hdrOffset;\n    uVar2 = pPage->nCell;\n    if (uVar2 != 0) {\n      iVar7 = 0;\n      do {\n        rc = 0;\n        uVar3 = *(ushort *)(pPage->aCellIdx + iVar7 * 2);\n        uVar2 = pPage->maskPage;\n        puVar6 = pPage->aData;\n        if (pPage->leaf == '\0') {\n          uVar4 = *(uint *)(puVar6 + ((uVar3 << 8 | uVar3 >> 8) & uVar2));\n          rc = clearDatabasePage(pBt,uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8\n                                     | uVar4 << 0x18,1,pnChange);\n          if (rc != 0) goto LAB_0014d896;\n        }\n        rc = clearCell(pPage,puVar6 + ((uVar3 << 8 | uVar3 >> 8) & uVar2),&info);\n        if (rc != 0) goto LAB_0014d896;\n        iVar7 = iVar7 + 1;\n        uVar2 = pPage->nCell;\n      } while (iVar7 < (int)(uint)uVar2);\n    }\n    if (pPage->leaf == '\0') {\n      uVar4 = *(uint *)(pPage->aData + (ulong)bVar1 + 8);\n      rc = clearDatabasePage(pBt,uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                                 uVar4 << 0x18,1,pnChange);\n      if (rc != 0) goto LAB_0014d896;\n    }\n    else if (pnChange != (int *)0x0) {\n      *pnChange = *pnChange + (uint)uVar2;\n    }\n    if (freePageFlag == 0) {\n      rc = sqlite3PagerWrite(pPage->pDbPage);\n      if (rc == 0) {\n        zeroPage(pPage,(uint)(pPage->aData[bVar1] | 8));\n      }\n    }\n    else {\n      freePage(pPage,&rc);\n    }\n  }\n  else {\n    rc = sqlite3CorruptError(0x12021);\n  }" if (parenthesized_expression "(pPage->bBusy == '\0')" ( (binary_expression "pPage->bBusy == '\0'" (field_expression "pPage->bBusy" identifier -> field_identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    pPage->bBusy = '\x01';\n    bVar1 = pPage->hdrOffset;\n    uVar2 = pPage->nCell;\n    if (uVar2 != 0) {\n      iVar7 = 0;\n      do {\n        rc = 0;\n        uVar3 = *(ushort *)(pPage->aCellIdx + iVar7 * 2);\n        uVar2 = pPage->maskPage;\n        puVar6 = pPage->aData;\n        if (pPage->leaf == '\0') {\n          uVar4 = *(uint *)(puVar6 + ((uVar3 << 8 | uVar3 >> 8) & uVar2));\n          rc = clearDatabasePage(pBt,uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8\n                                     | uVar4 << 0x18,1,pnChange);\n          if (rc != 0) goto LAB_0014d896;\n        }\n        rc = clearCell(pPage,puVar6 + ((uVar3 << 8 | uVar3 >> 8) & uVar2),&info);\n        if (rc != 0) goto LAB_0014d896;\n        iVar7 = iVar7 + 1;\n        uVar2 = pPage->nCell;\n      } while (iVar7 < (int)(uint)uVar2);\n    }\n    if (pPage->leaf == '\0') {\n      uVar4 = *(uint *)(pPage->aData + (ulong)bVar1 + 8);\n      rc = clearDatabasePage(pBt,uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                                 uVar4 << 0x18,1,pnChange);\n      if (rc != 0) goto LAB_0014d896;\n    }\n    else if (pnChange != (int *)0x0) {\n      *pnChange = *pnChange + (uint)uVar2;\n    }\n    if (freePageFlag == 0) {\n      rc = sqlite3PagerWrite(pPage->pDbPage);\n      if (rc == 0) {\n        zeroPage(pPage,(uint)(pPage->aData[bVar1] | 8));\n      }\n    }\n    else {\n      freePage(pPage,&rc);\n    }\n  }" { (expression_statement "pPage->bBusy = '\x01';" (assignment_expression "pPage->bBusy = '\x01'" (field_expression "pPage->bBusy" identifier -> field_identifier) = (char_literal "'\x01'" ' escape_sequence ')) ;) (expression_statement "bVar1 = pPage->hdrOffset;" (assignment_expression "bVar1 = pPage->hdrOffset" identifier = (field_expression "pPage->hdrOffset" identifier -> field_identifier)) ;) (expression_statement "uVar2 = pPage->nCell;" (assignment_expression "uVar2 = pPage->nCell" identifier = (field_expression "pPage->nCell" identifier -> field_identifier)) ;) (if_statement "if (uVar2 != 0) {\n      iVar7 = 0;\n      do {\n        rc = 0;\n        uVar3 = *(ushort *)(pPage->aCellIdx + iVar7 * 2);\n        uVar2 = pPage->maskPage;\n        puVar6 = pPage->aData;\n        if (pPage->leaf == '\0') {\n          uVar4 = *(uint *)(puVar6 + ((uVar3 << 8 | uVar3 >> 8) & uVar2));\n          rc = clearDatabasePage(pBt,uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8\n                                     | uVar4 << 0x18,1,pnChange);\n          if (rc != 0) goto LAB_0014d896;\n        }\n        rc = clearCell(pPage,puVar6 + ((uVar3 << 8 | uVar3 >> 8) & uVar2),&info);\n        if (rc != 0) goto LAB_0014d896;\n        iVar7 = iVar7 + 1;\n        uVar2 = pPage->nCell;\n      } while (iVar7 < (int)(uint)uVar2);\n    }" if (parenthesized_expression "(uVar2 != 0)" ( (binary_expression "uVar2 != 0" identifier != number_literal) )) (compound_statement "{\n      iVar7 = 0;\n      do {\n        rc = 0;\n        uVar3 = *(ushort *)(pPage->aCellIdx + iVar7 * 2);\n        uVar2 = pPage->maskPage;\n        puVar6 = pPage->aData;\n        if (pPage->leaf == '\0') {\n          uVar4 = *(uint *)(puVar6 + ((uVar3 << 8 | uVar3 >> 8) & uVar2));\n          rc = clearDatabasePage(pBt,uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8\n                                     | uVar4 << 0x18,1,pnChange);\n          if (rc != 0) goto LAB_0014d896;\n        }\n        rc = clearCell(pPage,puVar6 + ((uVar3 << 8 | uVar3 >> 8) & uVar2),&info);\n        if (rc != 0) goto LAB_0014d896;\n        iVar7 = iVar7 + 1;\n        uVar2 = pPage->nCell;\n      } while (iVar7 < (int)(uint)uVar2);\n    }" { (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (do_statement "do {\n        rc = 0;\n        uVar3 = *(ushort *)(pPage->aCellIdx + iVar7 * 2);\n        uVar2 = pPage->maskPage;\n        puVar6 = pPage->aData;\n        if (pPage->leaf == '\0') {\n          uVar4 = *(uint *)(puVar6 + ((uVar3 << 8 | uVar3 >> 8) & uVar2));\n          rc = clearDatabasePage(pBt,uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8\n                                     | uVar4 << 0x18,1,pnChange);\n          if (rc != 0) goto LAB_0014d896;\n        }\n        rc = clearCell(pPage,puVar6 + ((uVar3 << 8 | uVar3 >> 8) & uVar2),&info);\n        if (rc != 0) goto LAB_0014d896;\n        iVar7 = iVar7 + 1;\n        uVar2 = pPage->nCell;\n      } while (iVar7 < (int)(uint)uVar2);" do (compound_statement "{\n        rc = 0;\n        uVar3 = *(ushort *)(pPage->aCellIdx + iVar7 * 2);\n        uVar2 = pPage->maskPage;\n        puVar6 = pPage->aData;\n        if (pPage->leaf == '\0') {\n          uVar4 = *(uint *)(puVar6 + ((uVar3 << 8 | uVar3 >> 8) & uVar2));\n          rc = clearDatabasePage(pBt,uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8\n                                     | uVar4 << 0x18,1,pnChange);\n          if (rc != 0) goto LAB_0014d896;\n        }\n        rc = clearCell(pPage,puVar6 + ((uVar3 << 8 | uVar3 >> 8) & uVar2),&info);\n        if (rc != 0) goto LAB_0014d896;\n        iVar7 = iVar7 + 1;\n        uVar2 = pPage->nCell;\n      }" { (expression_statement "rc = 0;" (assignment_expression "rc = 0" identifier = number_literal) ;) (expression_statement "uVar3 = *(ushort *)(pPage->aCellIdx + iVar7 * 2);" (assignment_expression "uVar3 = *(ushort *)(pPage->aCellIdx + iVar7 * 2)" identifier = (pointer_expression "*(ushort *)(pPage->aCellIdx + iVar7 * 2)" * (cast_expression "(ushort *)(pPage->aCellIdx + iVar7 * 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pPage->aCellIdx + iVar7 * 2)" ( (binary_expression "pPage->aCellIdx + iVar7 * 2" (field_expression "pPage->aCellIdx" identifier -> field_identifier) + (binary_expression "iVar7 * 2" identifier * number_literal)) ))))) ;) (expression_statement "uVar2 = pPage->maskPage;" (assignment_expression "uVar2 = pPage->maskPage" identifier = (field_expression "pPage->maskPage" identifier -> field_identifier)) ;) (expression_statement "puVar6 = pPage->aData;" (assignment_expression "puVar6 = pPage->aData" identifier = (field_expression "pPage->aData" identifier -> field_identifier)) ;) (if_statement "if (pPage->leaf == '\0') {\n          uVar4 = *(uint *)(puVar6 + ((uVar3 << 8 | uVar3 >> 8) & uVar2));\n          rc = clearDatabasePage(pBt,uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8\n                                     | uVar4 << 0x18,1,pnChange);\n          if (rc != 0) goto LAB_0014d896;\n        }" if (parenthesized_expression "(pPage->leaf == '\0')" ( (binary_expression "pPage->leaf == '\0'" (field_expression "pPage->leaf" identifier -> field_identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n          uVar4 = *(uint *)(puVar6 + ((uVar3 << 8 | uVar3 >> 8) & uVar2));\n          rc = clearDatabasePage(pBt,uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8\n                                     | uVar4 << 0x18,1,pnChange);\n          if (rc != 0) goto LAB_0014d896;\n        }" { (expression_statement "uVar4 = *(uint *)(puVar6 + ((uVar3 << 8 | uVar3 >> 8) & uVar2));" (assignment_expression "uVar4 = *(uint *)(puVar6 + ((uVar3 << 8 | uVar3 >> 8) & uVar2))" identifier = (pointer_expression "*(uint *)(puVar6 + ((uVar3 << 8 | uVar3 >> 8) & uVar2))" * (cast_expression "(uint *)(puVar6 + ((uVar3 << 8 | uVar3 >> 8) & uVar2))" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar6 + ((uVar3 << 8 | uVar3 >> 8) & uVar2))" ( (binary_expression "puVar6 + ((uVar3 << 8 | uVar3 >> 8) & uVar2)" identifier + (parenthesized_expression "((uVar3 << 8 | uVar3 >> 8) & uVar2)" ( (binary_expression "(uVar3 << 8 | uVar3 >> 8) & uVar2" (parenthesized_expression "(uVar3 << 8 | uVar3 >> 8)" ( (binary_expression "uVar3 << 8 | uVar3 >> 8" (binary_expression "uVar3 << 8" identifier << number_literal) | (binary_expression "uVar3 >> 8" identifier >> number_literal)) )) & identifier) ))) ))))) ;) (expression_statement "rc = clearDatabasePage(pBt,uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8\n                                     | uVar4 << 0x18,1,pnChange);" (assignment_expression "rc = clearDatabasePage(pBt,uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8\n                                     | uVar4 << 0x18,1,pnChange)" identifier = (call_expression "clearDatabasePage(pBt,uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8\n                                     | uVar4 << 0x18,1,pnChange)" identifier (argument_list "(pBt,uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8\n                                     | uVar4 << 0x18,1,pnChange)" ( identifier , (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8\n                                     | uVar4 << 0x18" (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8" (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8" (binary_expression "uVar4 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar4 & 0xff0000) >> 8" (parenthesized_expression "(uVar4 & 0xff0000)" ( (binary_expression "uVar4 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar4 & 0xff00) << 8" (parenthesized_expression "(uVar4 & 0xff00)" ( (binary_expression "uVar4 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar4 << 0x18" identifier << number_literal)) , number_literal , identifier )))) ;) (if_statement "if (rc != 0) goto LAB_0014d896;" if (parenthesized_expression "(rc != 0)" ( (binary_expression "rc != 0" identifier != number_literal) )) (goto_statement "goto LAB_0014d896;" goto statement_identifier ;)) })) (expression_statement "rc = clearCell(pPage,puVar6 + ((uVar3 << 8 | uVar3 >> 8) & uVar2),&info);" (assignment_expression "rc = clearCell(pPage,puVar6 + ((uVar3 << 8 | uVar3 >> 8) & uVar2),&info)" identifier = (call_expression "clearCell(pPage,puVar6 + ((uVar3 << 8 | uVar3 >> 8) & uVar2),&info)" identifier (argument_list "(pPage,puVar6 + ((uVar3 << 8 | uVar3 >> 8) & uVar2),&info)" ( identifier , (binary_expression "puVar6 + ((uVar3 << 8 | uVar3 >> 8) & uVar2)" identifier + (parenthesized_expression "((uVar3 << 8 | uVar3 >> 8) & uVar2)" ( (binary_expression "(uVar3 << 8 | uVar3 >> 8) & uVar2" (parenthesized_expression "(uVar3 << 8 | uVar3 >> 8)" ( (binary_expression "uVar3 << 8 | uVar3 >> 8" (binary_expression "uVar3 << 8" identifier << number_literal) | (binary_expression "uVar3 >> 8" identifier >> number_literal)) )) & identifier) ))) , (pointer_expression "&info" & identifier) )))) ;) (if_statement "if (rc != 0) goto LAB_0014d896;" if (parenthesized_expression "(rc != 0)" ( (binary_expression "rc != 0" identifier != number_literal) )) (goto_statement "goto LAB_0014d896;" goto statement_identifier ;)) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) (expression_statement "uVar2 = pPage->nCell;" (assignment_expression "uVar2 = pPage->nCell" identifier = (field_expression "pPage->nCell" identifier -> field_identifier)) ;) }) while (parenthesized_expression "(iVar7 < (int)(uint)uVar2)" ( (binary_expression "iVar7 < (int)(uint)uVar2" identifier < (cast_expression "(int)(uint)uVar2" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)uVar2" ( (type_descriptor "uint" type_identifier) ) identifier))) )) ;) })) (if_statement "if (pPage->leaf == '\0') {\n      uVar4 = *(uint *)(pPage->aData + (ulong)bVar1 + 8);\n      rc = clearDatabasePage(pBt,uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                                 uVar4 << 0x18,1,pnChange);\n      if (rc != 0) goto LAB_0014d896;\n    }\n    else if (pnChange != (int *)0x0) {\n      *pnChange = *pnChange + (uint)uVar2;\n    }" if (parenthesized_expression "(pPage->leaf == '\0')" ( (binary_expression "pPage->leaf == '\0'" (field_expression "pPage->leaf" identifier -> field_identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      uVar4 = *(uint *)(pPage->aData + (ulong)bVar1 + 8);\n      rc = clearDatabasePage(pBt,uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                                 uVar4 << 0x18,1,pnChange);\n      if (rc != 0) goto LAB_0014d896;\n    }" { (expression_statement "uVar4 = *(uint *)(pPage->aData + (ulong)bVar1 + 8);" (assignment_expression "uVar4 = *(uint *)(pPage->aData + (ulong)bVar1 + 8)" identifier = (pointer_expression "*(uint *)(pPage->aData + (ulong)bVar1 + 8)" * (cast_expression "(uint *)(pPage->aData + (ulong)bVar1 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pPage->aData + (ulong)bVar1 + 8)" ( (binary_expression "pPage->aData + (ulong)bVar1 + 8" (binary_expression "pPage->aData + (ulong)bVar1" (field_expression "pPage->aData" identifier -> field_identifier) + (cast_expression "(ulong)bVar1" ( (type_descriptor "ulong" type_identifier) ) identifier)) + number_literal) ))))) ;) (expression_statement "rc = clearDatabasePage(pBt,uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                                 uVar4 << 0x18,1,pnChange);" (assignment_expression "rc = clearDatabasePage(pBt,uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                                 uVar4 << 0x18,1,pnChange)" identifier = (call_expression "clearDatabasePage(pBt,uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                                 uVar4 << 0x18,1,pnChange)" identifier (argument_list "(pBt,uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                                 uVar4 << 0x18,1,pnChange)" ( identifier , (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                                 uVar4 << 0x18" (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8" (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8" (binary_expression "uVar4 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar4 & 0xff0000) >> 8" (parenthesized_expression "(uVar4 & 0xff0000)" ( (binary_expression "uVar4 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar4 & 0xff00) << 8" (parenthesized_expression "(uVar4 & 0xff00)" ( (binary_expression "uVar4 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar4 << 0x18" identifier << number_literal)) , number_literal , identifier )))) ;) (if_statement "if (rc != 0) goto LAB_0014d896;" if (parenthesized_expression "(rc != 0)" ( (binary_expression "rc != 0" identifier != number_literal) )) (goto_statement "goto LAB_0014d896;" goto statement_identifier ;)) }) (else_clause "else if (pnChange != (int *)0x0) {\n      *pnChange = *pnChange + (uint)uVar2;\n    }" else (if_statement "if (pnChange != (int *)0x0) {\n      *pnChange = *pnChange + (uint)uVar2;\n    }" if (parenthesized_expression "(pnChange != (int *)0x0)" ( (binary_expression "pnChange != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      *pnChange = *pnChange + (uint)uVar2;\n    }" { (expression_statement "*pnChange = *pnChange + (uint)uVar2;" (assignment_expression "*pnChange = *pnChange + (uint)uVar2" (pointer_expression "*pnChange" * identifier) = (binary_expression "*pnChange + (uint)uVar2" (pointer_expression "*pnChange" * identifier) + (cast_expression "(uint)uVar2" ( (type_descriptor "uint" type_identifier) ) identifier))) ;) })))) (if_statement "if (freePageFlag == 0) {\n      rc = sqlite3PagerWrite(pPage->pDbPage);\n      if (rc == 0) {\n        zeroPage(pPage,(uint)(pPage->aData[bVar1] | 8));\n      }\n    }\n    else {\n      freePage(pPage,&rc);\n    }" if (parenthesized_expression "(freePageFlag == 0)" ( (binary_expression "freePageFlag == 0" identifier == number_literal) )) (compound_statement "{\n      rc = sqlite3PagerWrite(pPage->pDbPage);\n      if (rc == 0) {\n        zeroPage(pPage,(uint)(pPage->aData[bVar1] | 8));\n      }\n    }" { (expression_statement "rc = sqlite3PagerWrite(pPage->pDbPage);" (assignment_expression "rc = sqlite3PagerWrite(pPage->pDbPage)" identifier = (call_expression "sqlite3PagerWrite(pPage->pDbPage)" identifier (argument_list "(pPage->pDbPage)" ( (field_expression "pPage->pDbPage" identifier -> field_identifier) )))) ;) (if_statement "if (rc == 0) {\n        zeroPage(pPage,(uint)(pPage->aData[bVar1] | 8));\n      }" if (parenthesized_expression "(rc == 0)" ( (binary_expression "rc == 0" identifier == number_literal) )) (compound_statement "{\n        zeroPage(pPage,(uint)(pPage->aData[bVar1] | 8));\n      }" { (expression_statement "zeroPage(pPage,(uint)(pPage->aData[bVar1] | 8));" (call_expression "zeroPage(pPage,(uint)(pPage->aData[bVar1] | 8))" identifier (argument_list "(pPage,(uint)(pPage->aData[bVar1] | 8))" ( identifier , (call_expression "(uint)(pPage->aData[bVar1] | 8)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(pPage->aData[bVar1] | 8)" ( (binary_expression "pPage->aData[bVar1] | 8" (subscript_expression "pPage->aData[bVar1]" (field_expression "pPage->aData" identifier -> field_identifier) [ identifier ]) | number_literal) ))) ))) ;) })) }) (else_clause "else {\n      freePage(pPage,&rc);\n    }" else (compound_statement "{\n      freePage(pPage,&rc);\n    }" { (expression_statement "freePage(pPage,&rc);" (call_expression "freePage(pPage,&rc)" identifier (argument_list "(pPage,&rc)" ( identifier , (pointer_expression "&rc" & identifier) ))) ;) }))) }) (else_clause "else {\n    rc = sqlite3CorruptError(0x12021);\n  }" else (compound_statement "{\n    rc = sqlite3CorruptError(0x12021);\n  }" { (expression_statement "rc = sqlite3CorruptError(0x12021);" (assignment_expression "rc = sqlite3CorruptError(0x12021)" identifier = (call_expression "sqlite3CorruptError(0x12021)" identifier (argument_list "(0x12021)" ( number_literal )))) ;) }))) (labeled_statement "LAB_0014d896:\n  pPage->bBusy = '\0';" statement_identifier : (expression_statement "pPage->bBusy = '\0';" (assignment_expression "pPage->bBusy = '\0'" (field_expression "pPage->bBusy" identifier -> field_identifier) = (char_literal "'\0'" ' escape_sequence ')) ;)) (expression_statement "releasePage(pPage);" (call_expression "releasePage(pPage)" identifier (argument_list "(pPage)" ( identifier ))) ;) (expression_statement "iVar7 = rc;" (assignment_expression "iVar7 = rc" identifier = identifier) ;) (labeled_statement "LAB_0014d863:\n  if (lVar5 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }" statement_identifier : (if_statement "if (lVar5 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }" if (parenthesized_expression "(lVar5 != *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "lVar5 != *(long *)(in_FS_OFFSET + 0x28)" identifier != (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }" { comment (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) }))) (return_statement "return iVar7;" return identifier ;) })))
(translation_unit "int FUN_0014d7d9(long param_1,undefined8 param_2,int param_3,int *param_4)\n\n{\n  byte bVar1;\n  ushort uVar2;\n  uint uVar3;\n  uint *puVar4;\n  int iVar5;\n  long in_FS_OFFSET;\n  int local_64;\n  long local_60;\n  undefined1 local_58 [24];\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if (*(uint *)(param_1 + 0x40) < (uint)param_2) {\n    iVar5 = FUN_00129d5f(0x1201c);\n    goto LAB_0014d863;\n  }\n  local_64 = FUN_0012b326(param_1,param_2,&local_60,0,0);\n  iVar5 = local_64;\n  if (local_64 != 0) goto LAB_0014d863;\n  if (*(char *)(local_60 + 1) == '\0') {\n    *(undefined1 *)(local_60 + 1) = 1;\n    bVar1 = *(byte *)(local_60 + 9);\n    uVar2 = *(ushort *)(local_60 + 0x18);\n    if (uVar2 != 0) {\n      iVar5 = 0;\n      do {\n        local_64 = 0;\n        uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2));\n        puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50));\n        if (*(char *)(local_60 + 8) == '\0') {\n          uVar3 = *puVar4;\n          local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n          if (local_64 != 0) goto LAB_0014d896;\n        }\n        local_64 = FUN_0014b3c0(local_60,puVar4,local_58);\n        if (local_64 != 0) goto LAB_0014d896;\n        iVar5 = iVar5 + 1;\n        uVar2 = *(ushort *)(local_60 + 0x18);\n      } while (iVar5 < (int)(uint)uVar2);\n    }\n    if (*(char *)(local_60 + 8) == '\0') {\n      uVar3 = *(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1);\n      local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n      if (local_64 != 0) goto LAB_0014d896;\n    }\n    else if (param_4 != (int *)0x0) {\n      *param_4 = *param_4 + (uint)uVar2;\n    }\n    if (param_3 == 0) {\n      local_64 = FUN_00146893(*(undefined8 *)(local_60 + 0x70));\n      if (local_64 == 0) {\n        FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8);\n      }\n    }\n    else {\n      FUN_0014b567(local_60,&local_64);\n    }\n  }\n  else {\n    local_64 = FUN_00129d5f(0x12021);\n  }\nLAB_0014d896:\n  *(undefined1 *)(local_60 + 1) = 0;\n  FUN_0010f151(local_60);\n  iVar5 = local_64;\nLAB_0014d863:\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }\n  return iVar5;\n}\n\n" (function_definition "int FUN_0014d7d9(long param_1,undefined8 param_2,int param_3,int *param_4)\n\n{\n  byte bVar1;\n  ushort uVar2;\n  uint uVar3;\n  uint *puVar4;\n  int iVar5;\n  long in_FS_OFFSET;\n  int local_64;\n  long local_60;\n  undefined1 local_58 [24];\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if (*(uint *)(param_1 + 0x40) < (uint)param_2) {\n    iVar5 = FUN_00129d5f(0x1201c);\n    goto LAB_0014d863;\n  }\n  local_64 = FUN_0012b326(param_1,param_2,&local_60,0,0);\n  iVar5 = local_64;\n  if (local_64 != 0) goto LAB_0014d863;\n  if (*(char *)(local_60 + 1) == '\0') {\n    *(undefined1 *)(local_60 + 1) = 1;\n    bVar1 = *(byte *)(local_60 + 9);\n    uVar2 = *(ushort *)(local_60 + 0x18);\n    if (uVar2 != 0) {\n      iVar5 = 0;\n      do {\n        local_64 = 0;\n        uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2));\n        puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50));\n        if (*(char *)(local_60 + 8) == '\0') {\n          uVar3 = *puVar4;\n          local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n          if (local_64 != 0) goto LAB_0014d896;\n        }\n        local_64 = FUN_0014b3c0(local_60,puVar4,local_58);\n        if (local_64 != 0) goto LAB_0014d896;\n        iVar5 = iVar5 + 1;\n        uVar2 = *(ushort *)(local_60 + 0x18);\n      } while (iVar5 < (int)(uint)uVar2);\n    }\n    if (*(char *)(local_60 + 8) == '\0') {\n      uVar3 = *(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1);\n      local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n      if (local_64 != 0) goto LAB_0014d896;\n    }\n    else if (param_4 != (int *)0x0) {\n      *param_4 = *param_4 + (uint)uVar2;\n    }\n    if (param_3 == 0) {\n      local_64 = FUN_00146893(*(undefined8 *)(local_60 + 0x70));\n      if (local_64 == 0) {\n        FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8);\n      }\n    }\n    else {\n      FUN_0014b567(local_60,&local_64);\n    }\n  }\n  else {\n    local_64 = FUN_00129d5f(0x12021);\n  }\nLAB_0014d896:\n  *(undefined1 *)(local_60 + 1) = 0;\n  FUN_0010f151(local_60);\n  iVar5 = local_64;\nLAB_0014d863:\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }\n  return iVar5;\n}" primitive_type (function_declarator "FUN_0014d7d9(long param_1,undefined8 param_2,int param_3,int *param_4)" identifier (parameter_list "(long param_1,undefined8 param_2,int param_3,int *param_4)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_2" type_identifier identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int *param_4" primitive_type (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  byte bVar1;\n  ushort uVar2;\n  uint uVar3;\n  uint *puVar4;\n  int iVar5;\n  long in_FS_OFFSET;\n  int local_64;\n  long local_60;\n  undefined1 local_58 [24];\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if (*(uint *)(param_1 + 0x40) < (uint)param_2) {\n    iVar5 = FUN_00129d5f(0x1201c);\n    goto LAB_0014d863;\n  }\n  local_64 = FUN_0012b326(param_1,param_2,&local_60,0,0);\n  iVar5 = local_64;\n  if (local_64 != 0) goto LAB_0014d863;\n  if (*(char *)(local_60 + 1) == '\0') {\n    *(undefined1 *)(local_60 + 1) = 1;\n    bVar1 = *(byte *)(local_60 + 9);\n    uVar2 = *(ushort *)(local_60 + 0x18);\n    if (uVar2 != 0) {\n      iVar5 = 0;\n      do {\n        local_64 = 0;\n        uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2));\n        puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50));\n        if (*(char *)(local_60 + 8) == '\0') {\n          uVar3 = *puVar4;\n          local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n          if (local_64 != 0) goto LAB_0014d896;\n        }\n        local_64 = FUN_0014b3c0(local_60,puVar4,local_58);\n        if (local_64 != 0) goto LAB_0014d896;\n        iVar5 = iVar5 + 1;\n        uVar2 = *(ushort *)(local_60 + 0x18);\n      } while (iVar5 < (int)(uint)uVar2);\n    }\n    if (*(char *)(local_60 + 8) == '\0') {\n      uVar3 = *(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1);\n      local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n      if (local_64 != 0) goto LAB_0014d896;\n    }\n    else if (param_4 != (int *)0x0) {\n      *param_4 = *param_4 + (uint)uVar2;\n    }\n    if (param_3 == 0) {\n      local_64 = FUN_00146893(*(undefined8 *)(local_60 + 0x70));\n      if (local_64 == 0) {\n        FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8);\n      }\n    }\n    else {\n      FUN_0014b567(local_60,&local_64);\n    }\n  }\n  else {\n    local_64 = FUN_00129d5f(0x12021);\n  }\nLAB_0014d896:\n  *(undefined1 *)(local_60 + 1) = 0;\n  FUN_0010f151(local_60);\n  iVar5 = local_64;\nLAB_0014d863:\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }\n  return iVar5;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "ushort uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "int local_64;" primitive_type identifier ;) (declaration "long local_60;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 local_58 [24];" type_identifier (array_declarator "local_58 [24]" identifier [ number_literal ]) ;) (declaration "long local_40;" (sized_type_specifier "long" long) identifier ;) (expression_statement "local_40 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_40 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (if_statement "if (*(uint *)(param_1 + 0x40) < (uint)param_2) {\n    iVar5 = FUN_00129d5f(0x1201c);\n    goto LAB_0014d863;\n  }" if (parenthesized_expression "(*(uint *)(param_1 + 0x40) < (uint)param_2)" ( (binary_expression "*(uint *)(param_1 + 0x40) < (uint)param_2" (pointer_expression "*(uint *)(param_1 + 0x40)" * (cast_expression "(uint *)(param_1 + 0x40)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) < (cast_expression "(uint)param_2" ( (type_descriptor "uint" type_identifier) ) identifier)) )) (compound_statement "{\n    iVar5 = FUN_00129d5f(0x1201c);\n    goto LAB_0014d863;\n  }" { (expression_statement "iVar5 = FUN_00129d5f(0x1201c);" (assignment_expression "iVar5 = FUN_00129d5f(0x1201c)" identifier = (call_expression "FUN_00129d5f(0x1201c)" identifier (argument_list "(0x1201c)" ( number_literal )))) ;) (goto_statement "goto LAB_0014d863;" goto statement_identifier ;) })) (expression_statement "local_64 = FUN_0012b326(param_1,param_2,&local_60,0,0);" (assignment_expression "local_64 = FUN_0012b326(param_1,param_2,&local_60,0,0)" identifier = (call_expression "FUN_0012b326(param_1,param_2,&local_60,0,0)" identifier (argument_list "(param_1,param_2,&local_60,0,0)" ( identifier , identifier , (pointer_expression "&local_60" & identifier) , number_literal , number_literal )))) ;) (expression_statement "iVar5 = local_64;" (assignment_expression "iVar5 = local_64" identifier = identifier) ;) (if_statement "if (local_64 != 0) goto LAB_0014d863;" if (parenthesized_expression "(local_64 != 0)" ( (binary_expression "local_64 != 0" identifier != number_literal) )) (goto_statement "goto LAB_0014d863;" goto statement_identifier ;)) (if_statement "if (*(char *)(local_60 + 1) == '\0') {\n    *(undefined1 *)(local_60 + 1) = 1;\n    bVar1 = *(byte *)(local_60 + 9);\n    uVar2 = *(ushort *)(local_60 + 0x18);\n    if (uVar2 != 0) {\n      iVar5 = 0;\n      do {\n        local_64 = 0;\n        uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2));\n        puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50));\n        if (*(char *)(local_60 + 8) == '\0') {\n          uVar3 = *puVar4;\n          local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n          if (local_64 != 0) goto LAB_0014d896;\n        }\n        local_64 = FUN_0014b3c0(local_60,puVar4,local_58);\n        if (local_64 != 0) goto LAB_0014d896;\n        iVar5 = iVar5 + 1;\n        uVar2 = *(ushort *)(local_60 + 0x18);\n      } while (iVar5 < (int)(uint)uVar2);\n    }\n    if (*(char *)(local_60 + 8) == '\0') {\n      uVar3 = *(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1);\n      local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n      if (local_64 != 0) goto LAB_0014d896;\n    }\n    else if (param_4 != (int *)0x0) {\n      *param_4 = *param_4 + (uint)uVar2;\n    }\n    if (param_3 == 0) {\n      local_64 = FUN_00146893(*(undefined8 *)(local_60 + 0x70));\n      if (local_64 == 0) {\n        FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8);\n      }\n    }\n    else {\n      FUN_0014b567(local_60,&local_64);\n    }\n  }\n  else {\n    local_64 = FUN_00129d5f(0x12021);\n  }" if (parenthesized_expression "(*(char *)(local_60 + 1) == '\0')" ( (binary_expression "*(char *)(local_60 + 1) == '\0'" (pointer_expression "*(char *)(local_60 + 1)" * (cast_expression "(char *)(local_60 + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + 1)" ( (binary_expression "local_60 + 1" identifier + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    *(undefined1 *)(local_60 + 1) = 1;\n    bVar1 = *(byte *)(local_60 + 9);\n    uVar2 = *(ushort *)(local_60 + 0x18);\n    if (uVar2 != 0) {\n      iVar5 = 0;\n      do {\n        local_64 = 0;\n        uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2));\n        puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50));\n        if (*(char *)(local_60 + 8) == '\0') {\n          uVar3 = *puVar4;\n          local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n          if (local_64 != 0) goto LAB_0014d896;\n        }\n        local_64 = FUN_0014b3c0(local_60,puVar4,local_58);\n        if (local_64 != 0) goto LAB_0014d896;\n        iVar5 = iVar5 + 1;\n        uVar2 = *(ushort *)(local_60 + 0x18);\n      } while (iVar5 < (int)(uint)uVar2);\n    }\n    if (*(char *)(local_60 + 8) == '\0') {\n      uVar3 = *(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1);\n      local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n      if (local_64 != 0) goto LAB_0014d896;\n    }\n    else if (param_4 != (int *)0x0) {\n      *param_4 = *param_4 + (uint)uVar2;\n    }\n    if (param_3 == 0) {\n      local_64 = FUN_00146893(*(undefined8 *)(local_60 + 0x70));\n      if (local_64 == 0) {\n        FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8);\n      }\n    }\n    else {\n      FUN_0014b567(local_60,&local_64);\n    }\n  }" { (expression_statement "*(undefined1 *)(local_60 + 1) = 1;" (assignment_expression "*(undefined1 *)(local_60 + 1) = 1" (pointer_expression "*(undefined1 *)(local_60 + 1)" * (cast_expression "(undefined1 *)(local_60 + 1)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + 1)" ( (binary_expression "local_60 + 1" identifier + number_literal) )))) = number_literal) ;) (expression_statement "bVar1 = *(byte *)(local_60 + 9);" (assignment_expression "bVar1 = *(byte *)(local_60 + 9)" identifier = (pointer_expression "*(byte *)(local_60 + 9)" * (cast_expression "(byte *)(local_60 + 9)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + 9)" ( (binary_expression "local_60 + 9" identifier + number_literal) ))))) ;) (expression_statement "uVar2 = *(ushort *)(local_60 + 0x18);" (assignment_expression "uVar2 = *(ushort *)(local_60 + 0x18)" identifier = (pointer_expression "*(ushort *)(local_60 + 0x18)" * (cast_expression "(ushort *)(local_60 + 0x18)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + 0x18)" ( (binary_expression "local_60 + 0x18" identifier + number_literal) ))))) ;) (if_statement "if (uVar2 != 0) {\n      iVar5 = 0;\n      do {\n        local_64 = 0;\n        uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2));\n        puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50));\n        if (*(char *)(local_60 + 8) == '\0') {\n          uVar3 = *puVar4;\n          local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n          if (local_64 != 0) goto LAB_0014d896;\n        }\n        local_64 = FUN_0014b3c0(local_60,puVar4,local_58);\n        if (local_64 != 0) goto LAB_0014d896;\n        iVar5 = iVar5 + 1;\n        uVar2 = *(ushort *)(local_60 + 0x18);\n      } while (iVar5 < (int)(uint)uVar2);\n    }" if (parenthesized_expression "(uVar2 != 0)" ( (binary_expression "uVar2 != 0" identifier != number_literal) )) (compound_statement "{\n      iVar5 = 0;\n      do {\n        local_64 = 0;\n        uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2));\n        puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50));\n        if (*(char *)(local_60 + 8) == '\0') {\n          uVar3 = *puVar4;\n          local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n          if (local_64 != 0) goto LAB_0014d896;\n        }\n        local_64 = FUN_0014b3c0(local_60,puVar4,local_58);\n        if (local_64 != 0) goto LAB_0014d896;\n        iVar5 = iVar5 + 1;\n        uVar2 = *(ushort *)(local_60 + 0x18);\n      } while (iVar5 < (int)(uint)uVar2);\n    }" { (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) (do_statement "do {\n        local_64 = 0;\n        uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2));\n        puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50));\n        if (*(char *)(local_60 + 8) == '\0') {\n          uVar3 = *puVar4;\n          local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n          if (local_64 != 0) goto LAB_0014d896;\n        }\n        local_64 = FUN_0014b3c0(local_60,puVar4,local_58);\n        if (local_64 != 0) goto LAB_0014d896;\n        iVar5 = iVar5 + 1;\n        uVar2 = *(ushort *)(local_60 + 0x18);\n      } while (iVar5 < (int)(uint)uVar2);" do (compound_statement "{\n        local_64 = 0;\n        uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2));\n        puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50));\n        if (*(char *)(local_60 + 8) == '\0') {\n          uVar3 = *puVar4;\n          local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n          if (local_64 != 0) goto LAB_0014d896;\n        }\n        local_64 = FUN_0014b3c0(local_60,puVar4,local_58);\n        if (local_64 != 0) goto LAB_0014d896;\n        iVar5 = iVar5 + 1;\n        uVar2 = *(ushort *)(local_60 + 0x18);\n      }" { (expression_statement "local_64 = 0;" (assignment_expression "local_64 = 0" identifier = number_literal) ;) (expression_statement "uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2));" (assignment_expression "uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2))" identifier = (pointer_expression "*(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2))" * (cast_expression "(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2))" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2))" ( (binary_expression "*(long *)(local_60 + 0x60) + (long)(iVar5 * 2)" (pointer_expression "*(long *)(local_60 + 0x60)" * (cast_expression "(long *)(local_60 + 0x60)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + 0x60)" ( (binary_expression "local_60 + 0x60" identifier + number_literal) )))) + (cast_expression "(long)(iVar5 * 2)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(iVar5 * 2)" ( (binary_expression "iVar5 * 2" identifier * number_literal) )))) ))))) ;) (expression_statement "puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50));" (assignment_expression "puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50))" identifier = (cast_expression "(uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50))" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50))" ( (binary_expression "(ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50)" (call_expression "(ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a))" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a))" ( (binary_expression "(uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)" (parenthesized_expression "(uVar2 << 8 | uVar2 >> 8)" ( (binary_expression "uVar2 << 8 | uVar2 >> 8" (binary_expression "uVar2 << 8" identifier << number_literal) | (binary_expression "uVar2 >> 8" identifier >> number_literal)) )) & (pointer_expression "*(ushort *)(local_60 + 0x1a)" * (cast_expression "(ushort *)(local_60 + 0x1a)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + 0x1a)" ( (binary_expression "local_60 + 0x1a" identifier + number_literal) ))))) ))) + (pointer_expression "*(long *)(local_60 + 0x50)" * (cast_expression "(long *)(local_60 + 0x50)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + 0x50)" ( (binary_expression "local_60 + 0x50" identifier + number_literal) ))))) )))) ;) (if_statement "if (*(char *)(local_60 + 8) == '\0') {\n          uVar3 = *puVar4;\n          local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n          if (local_64 != 0) goto LAB_0014d896;\n        }" if (parenthesized_expression "(*(char *)(local_60 + 8) == '\0')" ( (binary_expression "*(char *)(local_60 + 8) == '\0'" (pointer_expression "*(char *)(local_60 + 8)" * (cast_expression "(char *)(local_60 + 8)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + 8)" ( (binary_expression "local_60 + 8" identifier + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n          uVar3 = *puVar4;\n          local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n          if (local_64 != 0) goto LAB_0014d896;\n        }" { (expression_statement "uVar3 = *puVar4;" (assignment_expression "uVar3 = *puVar4" identifier = (pointer_expression "*puVar4" * identifier)) ;) (expression_statement "local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);" (assignment_expression "local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4)" identifier = (call_expression "FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4)" identifier (argument_list "(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4)" ( identifier , (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8" (binary_expression "uVar3 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar3 & 0xff0000) >> 8" (parenthesized_expression "(uVar3 & 0xff0000)" ( (binary_expression "uVar3 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar3 & 0xff00) << 8" (parenthesized_expression "(uVar3 & 0xff00)" ( (binary_expression "uVar3 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar3 << 0x18" identifier << number_literal)) , number_literal , identifier )))) ;) (if_statement "if (local_64 != 0) goto LAB_0014d896;" if (parenthesized_expression "(local_64 != 0)" ( (binary_expression "local_64 != 0" identifier != number_literal) )) (goto_statement "goto LAB_0014d896;" goto statement_identifier ;)) })) (expression_statement "local_64 = FUN_0014b3c0(local_60,puVar4,local_58);" (assignment_expression "local_64 = FUN_0014b3c0(local_60,puVar4,local_58)" identifier = (call_expression "FUN_0014b3c0(local_60,puVar4,local_58)" identifier (argument_list "(local_60,puVar4,local_58)" ( identifier , identifier , identifier )))) ;) (if_statement "if (local_64 != 0) goto LAB_0014d896;" if (parenthesized_expression "(local_64 != 0)" ( (binary_expression "local_64 != 0" identifier != number_literal) )) (goto_statement "goto LAB_0014d896;" goto statement_identifier ;)) (expression_statement "iVar5 = iVar5 + 1;" (assignment_expression "iVar5 = iVar5 + 1" identifier = (binary_expression "iVar5 + 1" identifier + number_literal)) ;) (expression_statement "uVar2 = *(ushort *)(local_60 + 0x18);" (assignment_expression "uVar2 = *(ushort *)(local_60 + 0x18)" identifier = (pointer_expression "*(ushort *)(local_60 + 0x18)" * (cast_expression "(ushort *)(local_60 + 0x18)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + 0x18)" ( (binary_expression "local_60 + 0x18" identifier + number_literal) ))))) ;) }) while (parenthesized_expression "(iVar5 < (int)(uint)uVar2)" ( (binary_expression "iVar5 < (int)(uint)uVar2" identifier < (cast_expression "(int)(uint)uVar2" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)uVar2" ( (type_descriptor "uint" type_identifier) ) identifier))) )) ;) })) (if_statement "if (*(char *)(local_60 + 8) == '\0') {\n      uVar3 = *(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1);\n      local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n      if (local_64 != 0) goto LAB_0014d896;\n    }\n    else if (param_4 != (int *)0x0) {\n      *param_4 = *param_4 + (uint)uVar2;\n    }" if (parenthesized_expression "(*(char *)(local_60 + 8) == '\0')" ( (binary_expression "*(char *)(local_60 + 8) == '\0'" (pointer_expression "*(char *)(local_60 + 8)" * (cast_expression "(char *)(local_60 + 8)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + 8)" ( (binary_expression "local_60 + 8" identifier + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      uVar3 = *(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1);\n      local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n      if (local_64 != 0) goto LAB_0014d896;\n    }" { (expression_statement "uVar3 = *(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1);" (assignment_expression "uVar3 = *(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1)" identifier = (pointer_expression "*(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1)" * (cast_expression "(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1)" ( (binary_expression "*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1" (binary_expression "*(long *)(local_60 + 0x50) + 8" (pointer_expression "*(long *)(local_60 + 0x50)" * (cast_expression "(long *)(local_60 + 0x50)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + 0x50)" ( (binary_expression "local_60 + 0x50" identifier + number_literal) )))) + number_literal) + (cast_expression "(ulong)bVar1" ( (type_descriptor "ulong" type_identifier) ) identifier)) ))))) ;) (expression_statement "local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);" (assignment_expression "local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4)" identifier = (call_expression "FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4)" identifier (argument_list "(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4)" ( identifier , (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8" (binary_expression "uVar3 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar3 & 0xff0000) >> 8" (parenthesized_expression "(uVar3 & 0xff0000)" ( (binary_expression "uVar3 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar3 & 0xff00) << 8" (parenthesized_expression "(uVar3 & 0xff00)" ( (binary_expression "uVar3 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar3 << 0x18" identifier << number_literal)) , number_literal , identifier )))) ;) (if_statement "if (local_64 != 0) goto LAB_0014d896;" if (parenthesized_expression "(local_64 != 0)" ( (binary_expression "local_64 != 0" identifier != number_literal) )) (goto_statement "goto LAB_0014d896;" goto statement_identifier ;)) }) (else_clause "else if (param_4 != (int *)0x0) {\n      *param_4 = *param_4 + (uint)uVar2;\n    }" else (if_statement "if (param_4 != (int *)0x0) {\n      *param_4 = *param_4 + (uint)uVar2;\n    }" if (parenthesized_expression "(param_4 != (int *)0x0)" ( (binary_expression "param_4 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      *param_4 = *param_4 + (uint)uVar2;\n    }" { (expression_statement "*param_4 = *param_4 + (uint)uVar2;" (assignment_expression "*param_4 = *param_4 + (uint)uVar2" (pointer_expression "*param_4" * identifier) = (binary_expression "*param_4 + (uint)uVar2" (pointer_expression "*param_4" * identifier) + (cast_expression "(uint)uVar2" ( (type_descriptor "uint" type_identifier) ) identifier))) ;) })))) (if_statement "if (param_3 == 0) {\n      local_64 = FUN_00146893(*(undefined8 *)(local_60 + 0x70));\n      if (local_64 == 0) {\n        FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8);\n      }\n    }\n    else {\n      FUN_0014b567(local_60,&local_64);\n    }" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (compound_statement "{\n      local_64 = FUN_00146893(*(undefined8 *)(local_60 + 0x70));\n      if (local_64 == 0) {\n        FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8);\n      }\n    }" { (expression_statement "local_64 = FUN_00146893(*(undefined8 *)(local_60 + 0x70));" (assignment_expression "local_64 = FUN_00146893(*(undefined8 *)(local_60 + 0x70))" identifier = (call_expression "FUN_00146893(*(undefined8 *)(local_60 + 0x70))" identifier (argument_list "(*(undefined8 *)(local_60 + 0x70))" ( (pointer_expression "*(undefined8 *)(local_60 + 0x70)" * (cast_expression "(undefined8 *)(local_60 + 0x70)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + 0x70)" ( (binary_expression "local_60 + 0x70" identifier + number_literal) )))) )))) ;) (if_statement "if (local_64 == 0) {\n        FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8);\n      }" if (parenthesized_expression "(local_64 == 0)" ( (binary_expression "local_64 == 0" identifier == number_literal) )) (compound_statement "{\n        FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8);\n      }" { (expression_statement "FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8);" (call_expression "FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8)" identifier (argument_list "(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8)" ( identifier , (binary_expression "*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8" (pointer_expression "*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1)" * (cast_expression "(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(local_60 + 0x50) + (ulong)bVar1)" ( (binary_expression "*(long *)(local_60 + 0x50) + (ulong)bVar1" (pointer_expression "*(long *)(local_60 + 0x50)" * (cast_expression "(long *)(local_60 + 0x50)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + 0x50)" ( (binary_expression "local_60 + 0x50" identifier + number_literal) )))) + (cast_expression "(ulong)bVar1" ( (type_descriptor "ulong" type_identifier) ) identifier)) )))) | number_literal) ))) ;) })) }) (else_clause "else {\n      FUN_0014b567(local_60,&local_64);\n    }" else (compound_statement "{\n      FUN_0014b567(local_60,&local_64);\n    }" { (expression_statement "FUN_0014b567(local_60,&local_64);" (call_expression "FUN_0014b567(local_60,&local_64)" identifier (argument_list "(local_60,&local_64)" ( identifier , (pointer_expression "&local_64" & identifier) ))) ;) }))) }) (else_clause "else {\n    local_64 = FUN_00129d5f(0x12021);\n  }" else (compound_statement "{\n    local_64 = FUN_00129d5f(0x12021);\n  }" { (expression_statement "local_64 = FUN_00129d5f(0x12021);" (assignment_expression "local_64 = FUN_00129d5f(0x12021)" identifier = (call_expression "FUN_00129d5f(0x12021)" identifier (argument_list "(0x12021)" ( number_literal )))) ;) }))) (labeled_statement "LAB_0014d896:\n  *(undefined1 *)(local_60 + 1) = 0;" statement_identifier : (expression_statement "*(undefined1 *)(local_60 + 1) = 0;" (assignment_expression "*(undefined1 *)(local_60 + 1) = 0" (pointer_expression "*(undefined1 *)(local_60 + 1)" * (cast_expression "(undefined1 *)(local_60 + 1)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + 1)" ( (binary_expression "local_60 + 1" identifier + number_literal) )))) = number_literal) ;)) (expression_statement "FUN_0010f151(local_60);" (call_expression "FUN_0010f151(local_60)" identifier (argument_list "(local_60)" ( identifier ))) ;) (expression_statement "iVar5 = local_64;" (assignment_expression "iVar5 = local_64" identifier = identifier) ;) (labeled_statement "LAB_0014d863:\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }" statement_identifier : (if_statement "if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }" if (parenthesized_expression "(local_40 != *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_40 != *(long *)(in_FS_OFFSET + 0x28)" identifier != (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n                    \n    __stack_chk_fail();\n  }" { (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) }))) (return_statement "return iVar5;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration (sized_type_specifier long) IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT )))) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (pointer_expression & IDENT) , LIT , LIT )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;)) (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 ')) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (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 (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (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 (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression IDENT * LIT) )))) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT << LIT) | (binary_expression IDENT >> LIT)) )) & (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ))) + (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )))) ;) (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 ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT << LIT)) , LIT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;)) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }) while (parenthesized_expression ( (binary_expression IDENT < (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) 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 ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) + (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT << LIT)) , LIT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (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) = (binary_expression (pointer_expression * IDENT) + (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) })))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (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 ( IDENT , (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (cast_expression ( (type_descriptor TYPE) ) IDENT)) )))) | LIT) ))) ;) })) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression & IDENT) ))) ;) }))) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT )))) ;) }))) (labeled_statement statement_identifier : (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;)) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT != (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) }))) (return_statement return IDENT ;) })))
(function_definition "int FUN_0014d7d9(long param_1,undefined8 param_2,int param_3,int *param_4)\n\n{\n  byte bVar1;\n  ushort uVar2;\n  uint uVar3;\n  uint *puVar4;\n  int iVar5;\n  long in_FS_OFFSET;\n  int local_64;\n  long local_60;\n  undefined1 local_58 [24];\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if (*(uint *)(param_1 + 0x40) < (uint)param_2) {\n    iVar5 = FUN_00129d5f(0x1201c);\n    goto LAB_0014d863;\n  }\n  local_64 = FUN_0012b326(param_1,param_2,&local_60,0,0);\n  iVar5 = local_64;\n  if (local_64 != 0) goto LAB_0014d863;\n  if (*(char *)(local_60 + 1) == '\0') {\n    *(undefined1 *)(local_60 + 1) = 1;\n    bVar1 = *(byte *)(local_60 + 9);\n    uVar2 = *(ushort *)(local_60 + 0x18);\n    if (uVar2 != 0) {\n      iVar5 = 0;\n      do {\n        local_64 = 0;\n        uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2));\n        puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50));\n        if (*(char *)(local_60 + 8) == '\0') {\n          uVar3 = *puVar4;\n          local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n          if (local_64 != 0) goto LAB_0014d896;\n        }\n        local_64 = FUN_0014b3c0(local_60,puVar4,local_58);\n        if (local_64 != 0) goto LAB_0014d896;\n        iVar5 = iVar5 + 1;\n        uVar2 = *(ushort *)(local_60 + 0x18);\n      } while (iVar5 < (int)(uint)uVar2);\n    }\n    if (*(char *)(local_60 + 8) == '\0') {\n      uVar3 = *(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1);\n      local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n      if (local_64 != 0) goto LAB_0014d896;\n    }\n    else if (param_4 != (int *)0x0) {\n      *param_4 = *param_4 + (uint)uVar2;\n    }\n    if (param_3 == 0) {\n      local_64 = FUN_00146893(*(undefined8 *)(local_60 + 0x70));\n      if (local_64 == 0) {\n        FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8);\n      }\n    }\n    else {\n      FUN_0014b567(local_60,&local_64);\n    }\n  }\n  else {\n    local_64 = FUN_00129d5f(0x12021);\n  }\nLAB_0014d896:\n  *(undefined1 *)(local_60 + 1) = 0;\n  FUN_0010f151(local_60);\n  iVar5 = local_64;\nLAB_0014d863:\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }\n  return iVar5;\n}" (primitive_type "int") (function_declarator "FUN_0014d7d9(long param_1,undefined8 param_2,int param_3,int *param_4)" (identifier "FUN_0014d7d9") (parameter_list "(long param_1,undefined8 param_2,int param_3,int *param_4)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "undefined8 param_2" (type_identifier "undefined8") (identifier "param_2")) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) (, ",") (parameter_declaration "int *param_4" (primitive_type "int") (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) () ")"))) (compound_statement "{\n  byte bVar1;\n  ushort uVar2;\n  uint uVar3;\n  uint *puVar4;\n  int iVar5;\n  long in_FS_OFFSET;\n  int local_64;\n  long local_60;\n  undefined1 local_58 [24];\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if (*(uint *)(param_1 + 0x40) < (uint)param_2) {\n    iVar5 = FUN_00129d5f(0x1201c);\n    goto LAB_0014d863;\n  }\n  local_64 = FUN_0012b326(param_1,param_2,&local_60,0,0);\n  iVar5 = local_64;\n  if (local_64 != 0) goto LAB_0014d863;\n  if (*(char *)(local_60 + 1) == '\0') {\n    *(undefined1 *)(local_60 + 1) = 1;\n    bVar1 = *(byte *)(local_60 + 9);\n    uVar2 = *(ushort *)(local_60 + 0x18);\n    if (uVar2 != 0) {\n      iVar5 = 0;\n      do {\n        local_64 = 0;\n        uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2));\n        puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50));\n        if (*(char *)(local_60 + 8) == '\0') {\n          uVar3 = *puVar4;\n          local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n          if (local_64 != 0) goto LAB_0014d896;\n        }\n        local_64 = FUN_0014b3c0(local_60,puVar4,local_58);\n        if (local_64 != 0) goto LAB_0014d896;\n        iVar5 = iVar5 + 1;\n        uVar2 = *(ushort *)(local_60 + 0x18);\n      } while (iVar5 < (int)(uint)uVar2);\n    }\n    if (*(char *)(local_60 + 8) == '\0') {\n      uVar3 = *(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1);\n      local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n      if (local_64 != 0) goto LAB_0014d896;\n    }\n    else if (param_4 != (int *)0x0) {\n      *param_4 = *param_4 + (uint)uVar2;\n    }\n    if (param_3 == 0) {\n      local_64 = FUN_00146893(*(undefined8 *)(local_60 + 0x70));\n      if (local_64 == 0) {\n        FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8);\n      }\n    }\n    else {\n      FUN_0014b567(local_60,&local_64);\n    }\n  }\n  else {\n    local_64 = FUN_00129d5f(0x12021);\n  }\nLAB_0014d896:\n  *(undefined1 *)(local_60 + 1) = 0;\n  FUN_0010f151(local_60);\n  iVar5 = local_64;\nLAB_0014d863:\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }\n  return iVar5;\n}" ({ "{") (declaration "byte bVar1;" (type_identifier "byte") (identifier "bVar1") (; ";")) (declaration "ushort uVar2;" (type_identifier "ushort") (identifier "uVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "uint *puVar4;" (type_identifier "uint") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" (long "long")) (identifier "in_FS_OFFSET") (; ";")) (declaration "int local_64;" (primitive_type "int") (identifier "local_64") (; ";")) (declaration "long local_60;" (sized_type_specifier "long" (long "long")) (identifier "local_60") (; ";")) (declaration "undefined1 local_58 [24];" (type_identifier "undefined1") (array_declarator "local_58 [24]" (identifier "local_58") ([ "[") (number_literal "24") (] "]")) (; ";")) (declaration "long local_40;" (sized_type_specifier "long" (long "long")) (identifier "local_40") (; ";")) (expression_statement "local_40 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_40 = *(long *)(in_FS_OFFSET + 0x28)" (identifier "local_40") (= "=") (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" (* "*") (cast_expression "(long *)(in_FS_OFFSET + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_FS_OFFSET + 0x28)" (( "(") (binary_expression "in_FS_OFFSET + 0x28" (identifier "in_FS_OFFSET") (+ "+") (number_literal "0x28")) () ")"))))) (; ";")) (if_statement "if (*(uint *)(param_1 + 0x40) < (uint)param_2) {\n    iVar5 = FUN_00129d5f(0x1201c);\n    goto LAB_0014d863;\n  }" (if "if") (parenthesized_expression "(*(uint *)(param_1 + 0x40) < (uint)param_2)" (( "(") (binary_expression "*(uint *)(param_1 + 0x40) < (uint)param_2" (pointer_expression "*(uint *)(param_1 + 0x40)" (* "*") (cast_expression "(uint *)(param_1 + 0x40)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")")))) (< "<") (cast_expression "(uint)param_2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "param_2"))) () ")")) (compound_statement "{\n    iVar5 = FUN_00129d5f(0x1201c);\n    goto LAB_0014d863;\n  }" ({ "{") (expression_statement "iVar5 = FUN_00129d5f(0x1201c);" (assignment_expression "iVar5 = FUN_00129d5f(0x1201c)" (identifier "iVar5") (= "=") (call_expression "FUN_00129d5f(0x1201c)" (identifier "FUN_00129d5f") (argument_list "(0x1201c)" (( "(") (number_literal "0x1201c") () ")")))) (; ";")) (goto_statement "goto LAB_0014d863;" (goto "goto") (statement_identifier "LAB_0014d863") (; ";")) (} "}"))) (expression_statement "local_64 = FUN_0012b326(param_1,param_2,&local_60,0,0);" (assignment_expression "local_64 = FUN_0012b326(param_1,param_2,&local_60,0,0)" (identifier "local_64") (= "=") (call_expression "FUN_0012b326(param_1,param_2,&local_60,0,0)" (identifier "FUN_0012b326") (argument_list "(param_1,param_2,&local_60,0,0)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (pointer_expression "&local_60" (& "&") (identifier "local_60")) (, ",") (number_literal "0") (, ",") (number_literal "0") () ")")))) (; ";")) (expression_statement "iVar5 = local_64;" (assignment_expression "iVar5 = local_64" (identifier "iVar5") (= "=") (identifier "local_64")) (; ";")) (if_statement "if (local_64 != 0) goto LAB_0014d863;" (if "if") (parenthesized_expression "(local_64 != 0)" (( "(") (binary_expression "local_64 != 0" (identifier "local_64") (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_0014d863;" (goto "goto") (statement_identifier "LAB_0014d863") (; ";"))) (if_statement "if (*(char *)(local_60 + 1) == '\0') {\n    *(undefined1 *)(local_60 + 1) = 1;\n    bVar1 = *(byte *)(local_60 + 9);\n    uVar2 = *(ushort *)(local_60 + 0x18);\n    if (uVar2 != 0) {\n      iVar5 = 0;\n      do {\n        local_64 = 0;\n        uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2));\n        puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50));\n        if (*(char *)(local_60 + 8) == '\0') {\n          uVar3 = *puVar4;\n          local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n          if (local_64 != 0) goto LAB_0014d896;\n        }\n        local_64 = FUN_0014b3c0(local_60,puVar4,local_58);\n        if (local_64 != 0) goto LAB_0014d896;\n        iVar5 = iVar5 + 1;\n        uVar2 = *(ushort *)(local_60 + 0x18);\n      } while (iVar5 < (int)(uint)uVar2);\n    }\n    if (*(char *)(local_60 + 8) == '\0') {\n      uVar3 = *(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1);\n      local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n      if (local_64 != 0) goto LAB_0014d896;\n    }\n    else if (param_4 != (int *)0x0) {\n      *param_4 = *param_4 + (uint)uVar2;\n    }\n    if (param_3 == 0) {\n      local_64 = FUN_00146893(*(undefined8 *)(local_60 + 0x70));\n      if (local_64 == 0) {\n        FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8);\n      }\n    }\n    else {\n      FUN_0014b567(local_60,&local_64);\n    }\n  }\n  else {\n    local_64 = FUN_00129d5f(0x12021);\n  }" (if "if") (parenthesized_expression "(*(char *)(local_60 + 1) == '\0')" (( "(") (binary_expression "*(char *)(local_60 + 1) == '\0'" (pointer_expression "*(char *)(local_60 + 1)" (* "*") (cast_expression "(char *)(local_60 + 1)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_60 + 1)" (( "(") (binary_expression "local_60 + 1" (identifier "local_60") (+ "+") (number_literal "1")) () ")")))) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n    *(undefined1 *)(local_60 + 1) = 1;\n    bVar1 = *(byte *)(local_60 + 9);\n    uVar2 = *(ushort *)(local_60 + 0x18);\n    if (uVar2 != 0) {\n      iVar5 = 0;\n      do {\n        local_64 = 0;\n        uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2));\n        puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50));\n        if (*(char *)(local_60 + 8) == '\0') {\n          uVar3 = *puVar4;\n          local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n          if (local_64 != 0) goto LAB_0014d896;\n        }\n        local_64 = FUN_0014b3c0(local_60,puVar4,local_58);\n        if (local_64 != 0) goto LAB_0014d896;\n        iVar5 = iVar5 + 1;\n        uVar2 = *(ushort *)(local_60 + 0x18);\n      } while (iVar5 < (int)(uint)uVar2);\n    }\n    if (*(char *)(local_60 + 8) == '\0') {\n      uVar3 = *(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1);\n      local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n      if (local_64 != 0) goto LAB_0014d896;\n    }\n    else if (param_4 != (int *)0x0) {\n      *param_4 = *param_4 + (uint)uVar2;\n    }\n    if (param_3 == 0) {\n      local_64 = FUN_00146893(*(undefined8 *)(local_60 + 0x70));\n      if (local_64 == 0) {\n        FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8);\n      }\n    }\n    else {\n      FUN_0014b567(local_60,&local_64);\n    }\n  }" ({ "{") (expression_statement "*(undefined1 *)(local_60 + 1) = 1;" (assignment_expression "*(undefined1 *)(local_60 + 1) = 1" (pointer_expression "*(undefined1 *)(local_60 + 1)" (* "*") (cast_expression "(undefined1 *)(local_60 + 1)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_60 + 1)" (( "(") (binary_expression "local_60 + 1" (identifier "local_60") (+ "+") (number_literal "1")) () ")")))) (= "=") (number_literal "1")) (; ";")) (expression_statement "bVar1 = *(byte *)(local_60 + 9);" (assignment_expression "bVar1 = *(byte *)(local_60 + 9)" (identifier "bVar1") (= "=") (pointer_expression "*(byte *)(local_60 + 9)" (* "*") (cast_expression "(byte *)(local_60 + 9)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_60 + 9)" (( "(") (binary_expression "local_60 + 9" (identifier "local_60") (+ "+") (number_literal "9")) () ")"))))) (; ";")) (expression_statement "uVar2 = *(ushort *)(local_60 + 0x18);" (assignment_expression "uVar2 = *(ushort *)(local_60 + 0x18)" (identifier "uVar2") (= "=") (pointer_expression "*(ushort *)(local_60 + 0x18)" (* "*") (cast_expression "(ushort *)(local_60 + 0x18)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_60 + 0x18)" (( "(") (binary_expression "local_60 + 0x18" (identifier "local_60") (+ "+") (number_literal "0x18")) () ")"))))) (; ";")) (if_statement "if (uVar2 != 0) {\n      iVar5 = 0;\n      do {\n        local_64 = 0;\n        uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2));\n        puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50));\n        if (*(char *)(local_60 + 8) == '\0') {\n          uVar3 = *puVar4;\n          local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n          if (local_64 != 0) goto LAB_0014d896;\n        }\n        local_64 = FUN_0014b3c0(local_60,puVar4,local_58);\n        if (local_64 != 0) goto LAB_0014d896;\n        iVar5 = iVar5 + 1;\n        uVar2 = *(ushort *)(local_60 + 0x18);\n      } while (iVar5 < (int)(uint)uVar2);\n    }" (if "if") (parenthesized_expression "(uVar2 != 0)" (( "(") (binary_expression "uVar2 != 0" (identifier "uVar2") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      iVar5 = 0;\n      do {\n        local_64 = 0;\n        uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2));\n        puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50));\n        if (*(char *)(local_60 + 8) == '\0') {\n          uVar3 = *puVar4;\n          local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n          if (local_64 != 0) goto LAB_0014d896;\n        }\n        local_64 = FUN_0014b3c0(local_60,puVar4,local_58);\n        if (local_64 != 0) goto LAB_0014d896;\n        iVar5 = iVar5 + 1;\n        uVar2 = *(ushort *)(local_60 + 0x18);\n      } while (iVar5 < (int)(uint)uVar2);\n    }" ({ "{") (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" (identifier "iVar5") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n        local_64 = 0;\n        uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2));\n        puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50));\n        if (*(char *)(local_60 + 8) == '\0') {\n          uVar3 = *puVar4;\n          local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n          if (local_64 != 0) goto LAB_0014d896;\n        }\n        local_64 = FUN_0014b3c0(local_60,puVar4,local_58);\n        if (local_64 != 0) goto LAB_0014d896;\n        iVar5 = iVar5 + 1;\n        uVar2 = *(ushort *)(local_60 + 0x18);\n      } while (iVar5 < (int)(uint)uVar2);" (do "do") (compound_statement "{\n        local_64 = 0;\n        uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2));\n        puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50));\n        if (*(char *)(local_60 + 8) == '\0') {\n          uVar3 = *puVar4;\n          local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n          if (local_64 != 0) goto LAB_0014d896;\n        }\n        local_64 = FUN_0014b3c0(local_60,puVar4,local_58);\n        if (local_64 != 0) goto LAB_0014d896;\n        iVar5 = iVar5 + 1;\n        uVar2 = *(ushort *)(local_60 + 0x18);\n      }" ({ "{") (expression_statement "local_64 = 0;" (assignment_expression "local_64 = 0" (identifier "local_64") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2));" (assignment_expression "uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2))" (identifier "uVar2") (= "=") (pointer_expression "*(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2))" (* "*") (cast_expression "(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2))" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2))" (( "(") (binary_expression "*(long *)(local_60 + 0x60) + (long)(iVar5 * 2)" (pointer_expression "*(long *)(local_60 + 0x60)" (* "*") (cast_expression "(long *)(local_60 + 0x60)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_60 + 0x60)" (( "(") (binary_expression "local_60 + 0x60" (identifier "local_60") (+ "+") (number_literal "0x60")) () ")")))) (+ "+") (cast_expression "(long)(iVar5 * 2)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "(iVar5 * 2)" (( "(") (binary_expression "iVar5 * 2" (identifier "iVar5") (* "*") (number_literal "2")) () ")")))) () ")"))))) (; ";")) (expression_statement "puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50));" (assignment_expression "puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50))" (identifier "puVar4") (= "=") (cast_expression "(uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50))" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50))" (( "(") (binary_expression "(ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +\n                         *(long *)(local_60 + 0x50)" (call_expression "(ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a))" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a))" (( "(") (binary_expression "(uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)" (parenthesized_expression "(uVar2 << 8 | uVar2 >> 8)" (( "(") (binary_expression "uVar2 << 8 | uVar2 >> 8" (binary_expression "uVar2 << 8" (identifier "uVar2") (<< "<<") (number_literal "8")) (| "|") (binary_expression "uVar2 >> 8" (identifier "uVar2") (>> ">>") (number_literal "8"))) () ")")) (& "&") (pointer_expression "*(ushort *)(local_60 + 0x1a)" (* "*") (cast_expression "(ushort *)(local_60 + 0x1a)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_60 + 0x1a)" (( "(") (binary_expression "local_60 + 0x1a" (identifier "local_60") (+ "+") (number_literal "0x1a")) () ")"))))) () ")"))) (+ "+") (pointer_expression "*(long *)(local_60 + 0x50)" (* "*") (cast_expression "(long *)(local_60 + 0x50)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_60 + 0x50)" (( "(") (binary_expression "local_60 + 0x50" (identifier "local_60") (+ "+") (number_literal "0x50")) () ")"))))) () ")")))) (; ";")) (if_statement "if (*(char *)(local_60 + 8) == '\0') {\n          uVar3 = *puVar4;\n          local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n          if (local_64 != 0) goto LAB_0014d896;\n        }" (if "if") (parenthesized_expression "(*(char *)(local_60 + 8) == '\0')" (( "(") (binary_expression "*(char *)(local_60 + 8) == '\0'" (pointer_expression "*(char *)(local_60 + 8)" (* "*") (cast_expression "(char *)(local_60 + 8)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_60 + 8)" (( "(") (binary_expression "local_60 + 8" (identifier "local_60") (+ "+") (number_literal "8")) () ")")))) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n          uVar3 = *puVar4;\n          local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n          if (local_64 != 0) goto LAB_0014d896;\n        }" ({ "{") (expression_statement "uVar3 = *puVar4;" (assignment_expression "uVar3 = *puVar4" (identifier "uVar3") (= "=") (pointer_expression "*puVar4" (* "*") (identifier "puVar4"))) (; ";")) (expression_statement "local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);" (assignment_expression "local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4)" (identifier "local_64") (= "=") (call_expression "FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4)" (identifier "FUN_0014d7d9") (argument_list "(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4)" (( "(") (identifier "param_1") (, ",") (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                          (uVar3 & 0xff00) << 8" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8" (binary_expression "uVar3 >> 0x18" (identifier "uVar3") (>> ">>") (number_literal "0x18")) (| "|") (binary_expression "(uVar3 & 0xff0000) >> 8" (parenthesized_expression "(uVar3 & 0xff0000)" (( "(") (binary_expression "uVar3 & 0xff0000" (identifier "uVar3") (& "&") (number_literal "0xff0000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar3 & 0xff00) << 8" (parenthesized_expression "(uVar3 & 0xff00)" (( "(") (binary_expression "uVar3 & 0xff00" (identifier "uVar3") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "uVar3 << 0x18" (identifier "uVar3") (<< "<<") (number_literal "0x18"))) (, ",") (number_literal "1") (, ",") (identifier "param_4") () ")")))) (; ";")) (if_statement "if (local_64 != 0) goto LAB_0014d896;" (if "if") (parenthesized_expression "(local_64 != 0)" (( "(") (binary_expression "local_64 != 0" (identifier "local_64") (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_0014d896;" (goto "goto") (statement_identifier "LAB_0014d896") (; ";"))) (} "}"))) (expression_statement "local_64 = FUN_0014b3c0(local_60,puVar4,local_58);" (assignment_expression "local_64 = FUN_0014b3c0(local_60,puVar4,local_58)" (identifier "local_64") (= "=") (call_expression "FUN_0014b3c0(local_60,puVar4,local_58)" (identifier "FUN_0014b3c0") (argument_list "(local_60,puVar4,local_58)" (( "(") (identifier "local_60") (, ",") (identifier "puVar4") (, ",") (identifier "local_58") () ")")))) (; ";")) (if_statement "if (local_64 != 0) goto LAB_0014d896;" (if "if") (parenthesized_expression "(local_64 != 0)" (( "(") (binary_expression "local_64 != 0" (identifier "local_64") (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_0014d896;" (goto "goto") (statement_identifier "LAB_0014d896") (; ";"))) (expression_statement "iVar5 = iVar5 + 1;" (assignment_expression "iVar5 = iVar5 + 1" (identifier "iVar5") (= "=") (binary_expression "iVar5 + 1" (identifier "iVar5") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar2 = *(ushort *)(local_60 + 0x18);" (assignment_expression "uVar2 = *(ushort *)(local_60 + 0x18)" (identifier "uVar2") (= "=") (pointer_expression "*(ushort *)(local_60 + 0x18)" (* "*") (cast_expression "(ushort *)(local_60 + 0x18)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_60 + 0x18)" (( "(") (binary_expression "local_60 + 0x18" (identifier "local_60") (+ "+") (number_literal "0x18")) () ")"))))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar5 < (int)(uint)uVar2)" (( "(") (binary_expression "iVar5 < (int)(uint)uVar2" (identifier "iVar5") (< "<") (cast_expression "(int)(uint)uVar2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (cast_expression "(uint)uVar2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "uVar2")))) () ")")) (; ";")) (} "}"))) (if_statement "if (*(char *)(local_60 + 8) == '\0') {\n      uVar3 = *(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1);\n      local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n      if (local_64 != 0) goto LAB_0014d896;\n    }\n    else if (param_4 != (int *)0x0) {\n      *param_4 = *param_4 + (uint)uVar2;\n    }" (if "if") (parenthesized_expression "(*(char *)(local_60 + 8) == '\0')" (( "(") (binary_expression "*(char *)(local_60 + 8) == '\0'" (pointer_expression "*(char *)(local_60 + 8)" (* "*") (cast_expression "(char *)(local_60 + 8)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_60 + 8)" (( "(") (binary_expression "local_60 + 8" (identifier "local_60") (+ "+") (number_literal "8")) () ")")))) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n      uVar3 = *(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1);\n      local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);\n      if (local_64 != 0) goto LAB_0014d896;\n    }" ({ "{") (expression_statement "uVar3 = *(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1);" (assignment_expression "uVar3 = *(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1)" (identifier "uVar3") (= "=") (pointer_expression "*(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1)" (* "*") (cast_expression "(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1)" (( "(") (binary_expression "*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1" (binary_expression "*(long *)(local_60 + 0x50) + 8" (pointer_expression "*(long *)(local_60 + 0x50)" (* "*") (cast_expression "(long *)(local_60 + 0x50)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_60 + 0x50)" (( "(") (binary_expression "local_60 + 0x50" (identifier "local_60") (+ "+") (number_literal "0x50")) () ")")))) (+ "+") (number_literal "8")) (+ "+") (cast_expression "(ulong)bVar1" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar1"))) () ")"))))) (; ";")) (expression_statement "local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);" (assignment_expression "local_64 = FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4)" (identifier "local_64") (= "=") (call_expression "FUN_0014d7d9(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4)" (identifier "FUN_0014d7d9") (argument_list "(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4)" (( "(") (identifier "param_1") (, ",") (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |\n                                      (uVar3 & 0xff00) << 8" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8" (binary_expression "uVar3 >> 0x18" (identifier "uVar3") (>> ">>") (number_literal "0x18")) (| "|") (binary_expression "(uVar3 & 0xff0000) >> 8" (parenthesized_expression "(uVar3 & 0xff0000)" (( "(") (binary_expression "uVar3 & 0xff0000" (identifier "uVar3") (& "&") (number_literal "0xff0000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar3 & 0xff00) << 8" (parenthesized_expression "(uVar3 & 0xff00)" (( "(") (binary_expression "uVar3 & 0xff00" (identifier "uVar3") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "uVar3 << 0x18" (identifier "uVar3") (<< "<<") (number_literal "0x18"))) (, ",") (number_literal "1") (, ",") (identifier "param_4") () ")")))) (; ";")) (if_statement "if (local_64 != 0) goto LAB_0014d896;" (if "if") (parenthesized_expression "(local_64 != 0)" (( "(") (binary_expression "local_64 != 0" (identifier "local_64") (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_0014d896;" (goto "goto") (statement_identifier "LAB_0014d896") (; ";"))) (} "}")) (else_clause "else if (param_4 != (int *)0x0) {\n      *param_4 = *param_4 + (uint)uVar2;\n    }" (else "else") (if_statement "if (param_4 != (int *)0x0) {\n      *param_4 = *param_4 + (uint)uVar2;\n    }" (if "if") (parenthesized_expression "(param_4 != (int *)0x0)" (( "(") (binary_expression "param_4 != (int *)0x0" (identifier "param_4") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      *param_4 = *param_4 + (uint)uVar2;\n    }" ({ "{") (expression_statement "*param_4 = *param_4 + (uint)uVar2;" (assignment_expression "*param_4 = *param_4 + (uint)uVar2" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (binary_expression "*param_4 + (uint)uVar2" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (+ "+") (cast_expression "(uint)uVar2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "uVar2")))) (; ";")) (} "}"))))) (if_statement "if (param_3 == 0) {\n      local_64 = FUN_00146893(*(undefined8 *)(local_60 + 0x70));\n      if (local_64 == 0) {\n        FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8);\n      }\n    }\n    else {\n      FUN_0014b567(local_60,&local_64);\n    }" (if "if") (parenthesized_expression "(param_3 == 0)" (( "(") (binary_expression "param_3 == 0" (identifier "param_3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      local_64 = FUN_00146893(*(undefined8 *)(local_60 + 0x70));\n      if (local_64 == 0) {\n        FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8);\n      }\n    }" ({ "{") (expression_statement "local_64 = FUN_00146893(*(undefined8 *)(local_60 + 0x70));" (assignment_expression "local_64 = FUN_00146893(*(undefined8 *)(local_60 + 0x70))" (identifier "local_64") (= "=") (call_expression "FUN_00146893(*(undefined8 *)(local_60 + 0x70))" (identifier "FUN_00146893") (argument_list "(*(undefined8 *)(local_60 + 0x70))" (( "(") (pointer_expression "*(undefined8 *)(local_60 + 0x70)" (* "*") (cast_expression "(undefined8 *)(local_60 + 0x70)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_60 + 0x70)" (( "(") (binary_expression "local_60 + 0x70" (identifier "local_60") (+ "+") (number_literal "0x70")) () ")")))) () ")")))) (; ";")) (if_statement "if (local_64 == 0) {\n        FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8);\n      }" (if "if") (parenthesized_expression "(local_64 == 0)" (( "(") (binary_expression "local_64 == 0" (identifier "local_64") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8);\n      }" ({ "{") (expression_statement "FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8);" (call_expression "FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8)" (identifier "FUN_00129e53") (argument_list "(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8)" (( "(") (identifier "local_60") (, ",") (binary_expression "*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8" (pointer_expression "*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1)" (* "*") (cast_expression "(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(local_60 + 0x50) + (ulong)bVar1)" (( "(") (binary_expression "*(long *)(local_60 + 0x50) + (ulong)bVar1" (pointer_expression "*(long *)(local_60 + 0x50)" (* "*") (cast_expression "(long *)(local_60 + 0x50)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_60 + 0x50)" (( "(") (binary_expression "local_60 + 0x50" (identifier "local_60") (+ "+") (number_literal "0x50")) () ")")))) (+ "+") (cast_expression "(ulong)bVar1" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar1"))) () ")")))) (| "|") (number_literal "8")) () ")"))) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n      FUN_0014b567(local_60,&local_64);\n    }" (else "else") (compound_statement "{\n      FUN_0014b567(local_60,&local_64);\n    }" ({ "{") (expression_statement "FUN_0014b567(local_60,&local_64);" (call_expression "FUN_0014b567(local_60,&local_64)" (identifier "FUN_0014b567") (argument_list "(local_60,&local_64)" (( "(") (identifier "local_60") (, ",") (pointer_expression "&local_64" (& "&") (identifier "local_64")) () ")"))) (; ";")) (} "}")))) (} "}")) (else_clause "else {\n    local_64 = FUN_00129d5f(0x12021);\n  }" (else "else") (compound_statement "{\n    local_64 = FUN_00129d5f(0x12021);\n  }" ({ "{") (expression_statement "local_64 = FUN_00129d5f(0x12021);" (assignment_expression "local_64 = FUN_00129d5f(0x12021)" (identifier "local_64") (= "=") (call_expression "FUN_00129d5f(0x12021)" (identifier "FUN_00129d5f") (argument_list "(0x12021)" (( "(") (number_literal "0x12021") () ")")))) (; ";")) (} "}")))) (labeled_statement "LAB_0014d896:\n  *(undefined1 *)(local_60 + 1) = 0;" (statement_identifier "LAB_0014d896") (: ":") (expression_statement "*(undefined1 *)(local_60 + 1) = 0;" (assignment_expression "*(undefined1 *)(local_60 + 1) = 0" (pointer_expression "*(undefined1 *)(local_60 + 1)" (* "*") (cast_expression "(undefined1 *)(local_60 + 1)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_60 + 1)" (( "(") (binary_expression "local_60 + 1" (identifier "local_60") (+ "+") (number_literal "1")) () ")")))) (= "=") (number_literal "0")) (; ";"))) (expression_statement "FUN_0010f151(local_60);" (call_expression "FUN_0010f151(local_60)" (identifier "FUN_0010f151") (argument_list "(local_60)" (( "(") (identifier "local_60") () ")"))) (; ";")) (expression_statement "iVar5 = local_64;" (assignment_expression "iVar5 = local_64" (identifier "iVar5") (= "=") (identifier "local_64")) (; ";")) (labeled_statement "LAB_0014d863:\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }" (statement_identifier "LAB_0014d863") (: ":") (if_statement "if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }" (if "if") (parenthesized_expression "(local_40 != *(long *)(in_FS_OFFSET + 0x28))" (( "(") (binary_expression "local_40 != *(long *)(in_FS_OFFSET + 0x28)" (identifier "local_40") (!= "!=") (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" (* "*") (cast_expression "(long *)(in_FS_OFFSET + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_FS_OFFSET + 0x28)" (( "(") (binary_expression "in_FS_OFFSET + 0x28" (identifier "in_FS_OFFSET") (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (compound_statement "{\n                    \n    __stack_chk_fail();\n  }" ({ "{") (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" (identifier "__stack_chk_fail") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))) (return_statement "return iVar5;" (return "return") (identifier "iVar5") (; ";")) (} "}")))

int function_1(type_1 *pBt,type_2 var_2,int var_13,int *var_12)

{
  type_3 bVar1;
  type_4 var_6;
  type_4 var_9;
  type_5 var_10;
  long var_18;
  type_6 *var_8;
  int var_7;
  long var_1;
  int var_5;
  type_7 *pPage;
  type_8 info;
  
  var_18 = *(long *)(var_1 + 0x28);
  if (pBt->nPage < var_2) {
    var_7 = var_3(0x1201c);
    goto LAB_0014d863;
  }
  var_5 = var_4(pBt,var_2,&pPage,(type_9 *)0x0,0);
  var_7 = var_5;
  if (var_5 != 0) goto LAB_0014d863;
  if (pPage->bBusy == '\0') {
    pPage->bBusy = '\x01';
    bVar1 = pPage->hdrOffset;
    var_6 = pPage->nCell;
    if (var_6 != 0) {
      var_7 = 0;
      do {
        var_5 = 0;
        var_9 = *(type_4 *)(pPage->aCellIdx + var_7 * 2);
        var_6 = pPage->maskPage;
        var_8 = pPage->aData;
        if (pPage->leaf == '\0') {
          var_10 = *(type_5 *)(var_8 + ((var_9 << 8 | var_9 >> 8) & var_6));
          var_5 = function_1(pBt,var_10 >> 0x18 | (var_10 & 0xff0000) >> 8 | (var_10 & 0xff00) << 8
                                     | var_10 << 0x18,1,var_12);
          if (var_5 != 0) goto LAB_0014d896;
        }
        var_5 = var_11(pPage,var_8 + ((var_9 << 8 | var_9 >> 8) & var_6),&info);
        if (var_5 != 0) goto LAB_0014d896;
        var_7 = var_7 + 1;
        var_6 = pPage->nCell;
      } while (var_7 < (int)(type_5)var_6);
    }
    if (pPage->leaf == '\0') {
      var_10 = *(type_5 *)(pPage->aData + (type_10)bVar1 + 8);
      var_5 = function_1(pBt,var_10 >> 0x18 | (var_10 & 0xff0000) >> 8 | (var_10 & 0xff00) << 8 |
                                 var_10 << 0x18,1,var_12);
      if (var_5 != 0) goto LAB_0014d896;
    }
    else if (var_12 != (int *)0x0) {
      *var_12 = *var_12 + (type_5)var_6;
    }
    if (var_13 == 0) {
      var_5 = var_14(pPage->pDbPage);
      if (var_5 == 0) {
        var_15(pPage,(type_5)(pPage->aData[bVar1] | 8));
      }
    }
    else {
      var_16(pPage,&var_5);
    }
  }
  else {
    var_5 = var_3(0x12021);
  }
LAB_0014d896:
  pPage->bBusy = '\0';
  var_17(pPage);
  var_7 = var_5;
LAB_0014d863:
  if (var_18 != *(long *)(var_1 + 0x28)) {
                    /* WARNING: Subroutine does not return */
    var_19();
  }
  return var_7;
}


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

int MASKED(long param_1,undefined8 param_2,int param_3,int *param_4)

{
  byte bVar1;
  ushort uVar2;
  uint uVar3;
  uint *puVar4;
  int iVar5;
  long in_FS_OFFSET;
  int local_64;
  long local_60;
  undefined1 local_58 [24];
  long local_40;
  
  local_40 = *(long *)(in_FS_OFFSET + 0x28);
  if (*(uint *)(param_1 + 0x40) < (uint)param_2) {
    iVar5 = FUN_00129d5f(0x1201c);
    goto LAB_0014d863;
  }
  local_64 = FUN_0012b326(param_1,param_2,&local_60,0,0);
  iVar5 = local_64;
  if (local_64 != 0) goto LAB_0014d863;
  if (*(char *)(local_60 + 1) == '\0') {
    *(undefined1 *)(local_60 + 1) = 1;
    bVar1 = *(byte *)(local_60 + 9);
    uVar2 = *(ushort *)(local_60 + 0x18);
    if (uVar2 != 0) {
      iVar5 = 0;
      do {
        local_64 = 0;
        uVar2 = *(ushort *)(*(long *)(local_60 + 0x60) + (long)(iVar5 * 2));
        puVar4 = (uint *)((ulong)((uVar2 << 8 | uVar2 >> 8) & *(ushort *)(local_60 + 0x1a)) +
                         *(long *)(local_60 + 0x50));
        if (*(char *)(local_60 + 8) == '\0') {
          uVar3 = *puVar4;
          local_64 = MASKED(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |
                                          (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);
          if (local_64 != 0) goto LAB_0014d896;
        }
        local_64 = FUN_0014b3c0(local_60,puVar4,local_58);
        if (local_64 != 0) goto LAB_0014d896;
        iVar5 = iVar5 + 1;
        uVar2 = *(ushort *)(local_60 + 0x18);
      } while (iVar5 < (int)(uint)uVar2);
    }
    if (*(char *)(local_60 + 8) == '\0') {
      uVar3 = *(uint *)(*(long *)(local_60 + 0x50) + 8 + (ulong)bVar1);
      local_64 = MASKED(param_1,uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 |
                                      (uVar3 & 0xff00) << 8 | uVar3 << 0x18,1,param_4);
      if (local_64 != 0) goto LAB_0014d896;
    }
    else if (param_4 != (int *)0x0) {
      *param_4 = *param_4 + (uint)uVar2;
    }
    if (param_3 == 0) {
      local_64 = FUN_00146893(*(undefined8 *)(local_60 + 0x70));
      if (local_64 == 0) {
        FUN_00129e53(local_60,*(byte *)(*(long *)(local_60 + 0x50) + (ulong)bVar1) | 8);
      }
    }
    else {
      FUN_0014b567(local_60,&local_64);
    }
  }
  else {
    local_64 = FUN_00129d5f(0x12021);
  }
LAB_0014d896:
  *(undefined1 *)(local_60 + 1) = 0;
  FUN_0010f151(local_60);
  iVar5 = local_64;
LAB_0014d863:
  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return iVar5;
}

