
void fts5StructureWrite(Fts5Index *p,Fts5Structure *pStruct)

{
  int *pRc;
  uint uVar1;
  long lVar2;
  int iVar3;
  long lVar4;
  long lVar5;
  Fts5StructureLevel *pFVar6;
  long in_FS_OFFSET;
  Fts5Buffer buf;
  
  pRc = &p->rc;
  lVar2 = *(long *)(in_FS_OFFSET + 0x28);
  buf.p = (u8 *)0x0;
  buf.n = 0;
  buf.nSpace = 0;
  uVar1 = p->pConfig->iCookie;
  iVar3 = sqlite3Fts5BufferSize(pRc,&buf,(int)&buf + 0xc,(Fts5Buffer *)0x1f);
  if (iVar3 == 0) {
    if ((int)uVar1 < 0) {
      uVar1 = 0;
    }
    *(uint *)buf.p = uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 << 0x18
    ;
    buf.n = 4;
    iVar3 = sqlite3Fts5PutVarint(buf.p + 4,(long)pStruct->nLevel);
    iVar3 = iVar3 + buf.n;
    buf.n = iVar3;
    iVar3 = sqlite3Fts5PutVarint(buf.p + iVar3,(long)pStruct->nSegment);
    iVar3 = iVar3 + buf.n;
    buf.n = iVar3;
    iVar3 = sqlite3Fts5PutVarint(buf.p + iVar3,pStruct->nWriteCounter);
    buf.n = buf.n + iVar3;
  }
  iVar3 = 0;
  pFVar6 = pStruct->aLevel;
  if (0 < pStruct->nLevel) {
    do {
      sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->nMerge);
      sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->nSeg);
      if (0 < pFVar6->nSeg) {
        lVar4 = 0;
        do {
          lVar5 = lVar4 + 1;
          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].iSegid);
          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].pgnoFirst);
          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].pgnoLast);
          lVar4 = lVar5;
        } while ((int)lVar5 < pFVar6->nSeg);
      }
      iVar3 = iVar3 + 1;
      pFVar6 = pFVar6 + 1;
    } while (iVar3 < pStruct->nLevel);
  }
  fts5DataWrite(p,10,buf.p,buf.n);
  sqlite3Fts5BufferFree(&buf);
  if (lVar2 != *(long *)(in_FS_OFFSET + 0x28)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return;
}



void FUN_001bfff0(long *param_1,long param_2)

{
  long lVar1;
  uint uVar2;
  int iVar3;
  long lVar4;
  long lVar5;
  int *piVar6;
  long in_FS_OFFSET;
  undefined1 local_58 [16];
  long local_40;
  
  lVar1 = (long)param_1 + 0x34;
  local_40 = *(long *)(in_FS_OFFSET + 0x28);
  local_58 = (undefined1  [16])0x0;
  uVar2 = *(uint *)(*param_1 + 0x78);
  iVar3 = FUN_0015aff0(lVar1,local_58,local_58 + 0xc,0x1f);
  if (iVar3 == 0) {
    if ((int)uVar2 < 0) {
      uVar2 = 0;
    }
    *(uint *)local_58._0_8_ =
         uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 << 0x18;
    local_58._8_4_ = 4;
    iVar3 = FUN_0012bc70((uint *)(local_58._0_8_ + 4),(long)*(int *)(param_2 + 0x14));
    iVar3 = iVar3 + local_58._8_4_;
    local_58._8_4_ = iVar3;
    iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,(long)*(int *)(param_2 + 0x10));
    iVar3 = iVar3 + local_58._8_4_;
    local_58._8_4_ = iVar3;
    iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,*(undefined8 *)(param_2 + 8));
    local_58._8_4_ = local_58._8_4_ + iVar3;
  }
  iVar3 = 0;
  piVar6 = (int *)(param_2 + 0x18);
  if (0 < *(int *)(param_2 + 0x14)) {
    do {
      FUN_0015be80(lVar1,local_58,(long)*piVar6);
      FUN_0015be80(lVar1,local_58,(long)piVar6[1]);
      if (0 < piVar6[1]) {
        lVar4 = 0;
        do {
          lVar5 = lVar4 + 1;
          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));
          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));
          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));
          lVar4 = lVar5;
        } while ((int)lVar5 < piVar6[1]);
      }
      iVar3 = iVar3 + 1;
      piVar6 = piVar6 + 4;
    } while (iVar3 < *(int *)(param_2 + 0x14));
  }
  FUN_001bf990(param_1,10,local_58._0_8_,local_58._8_4_);
  FUN_0011b430(local_58);
  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return;
}


PUSH R15
PXOR XMM0,XMM0
MOV ECX,0x1f
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
LEA RBP,[RDI + 0x34]
PUSH RBX
SUB RSP,0x38
MOV qword ptr [RSP + 0x8],RDI
LEA RBX,[RSP + 0x10]
MOV qword ptr [RSP],RSI
LEA RDX,[RBX + 0xc]
MOV RSI,RBX
MOV RAX,qword ptr FS:[0x28]
MOV qword ptr [RSP + 0x28],RAX
XOR EAX,EAX
MOV RAX,qword ptr [RDI]
MOV RDI,RBP
MOVAPS xmmword ptr [RSP + 0x10],XMM0
MOV R12D,dword ptr [RAX + 0x78]
CALL 0x0015aff0
TEST EAX,EAX
JZ 0x001c0136
MOV RAX,qword ptr [RSP]
XOR R13D,R13D
LEA R15,[RAX + 0x18]
MOV EAX,dword ptr [RAX + 0x14]
TEST EAX,EAX
JLE 0x001c00f7
NOP word ptr [RAX + RAX*0x1]
MOVSXD RDX,dword ptr [R15]
MOV RSI,RBX
MOV RDI,RBP
CALL 0x0015be80
MOVSXD RDX,dword ptr [R15 + 0x4]
MOV RSI,RBX
MOV RDI,RBP
CALL 0x0015be80
MOV EDX,dword ptr [R15 + 0x4]
TEST EDX,EDX
JLE 0x001c00e1
XOR R14D,R14D
MOV RSI,qword ptr [R15 + 0x8]
LEA RDX,[R14 + R14*0x2]
MOV RDI,RBP
ADD R14,0x1
LEA R12,[RDX*0x4]
MOVSXD RDX,dword ptr [RSI + RDX*0x4]
MOV RSI,RBX
CALL 0x0015be80
MOV RDX,qword ptr [R15 + 0x8]
MOV RSI,RBX
MOV RDI,RBP
MOVSXD RDX,dword ptr [RDX + R12*0x1 + 0x4]
CALL 0x0015be80
MOV RDX,qword ptr [R15 + 0x8]
MOV RSI,RBX
MOV RDI,RBP
MOVSXD RDX,dword ptr [RDX + R12*0x1 + 0x8]
CALL 0x0015be80
CMP dword ptr [R15 + 0x4],R14D
JG 0x001c0090
MOV RAX,qword ptr [RSP]
ADD R13D,0x1
ADD R15,0x10
CMP R13D,dword ptr [RAX + 0x14]
JL 0x001c0068
MOV ECX,dword ptr [RSP + 0x18]
MOV RDX,qword ptr [RSP + 0x10]
MOV ESI,0xa
MOV RDI,qword ptr [RSP + 0x8]
CALL 0x001bf990
MOV RDI,RBX
CALL 0x0011b430
MOV RAX,qword ptr [RSP + 0x28]
XOR RAX,qword ptr FS:[0x28]
JNZ 0x001c01a5
ADD RSP,0x38
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
TEST R12D,R12D
MOV R14,qword ptr [RSP]
CMOVS R12D,EAX
MOV RAX,qword ptr [RSP + 0x10]
BSWAP R12D
MOV dword ptr [RAX],R12D
MOV RAX,qword ptr [RSP + 0x10]
MOVSXD RSI,dword ptr [R14 + 0x14]
MOV dword ptr [RSP + 0x18],0x4
LEA RDI,[RAX + 0x4]
CALL 0x0012bc70
ADD EAX,dword ptr [RSP + 0x18]
MOVSXD RSI,dword ptr [R14 + 0x10]
MOV dword ptr [RSP + 0x18],EAX
CDQE
ADD RAX,qword ptr [RSP + 0x10]
MOV RDI,RAX
CALL 0x0012bc70
ADD EAX,dword ptr [RSP + 0x18]
MOV RSI,qword ptr [R14 + 0x8]
MOV dword ptr [RSP + 0x18],EAX
CDQE
ADD RAX,qword ptr [RSP + 0x10]
MOV RDI,RAX
CALL 0x0012bc70
ADD dword ptr [RSP + 0x18],EAX
JMP 0x001c004c
CALL 0x0010a140
(translation_unit "void FUN_001bfff0(long *param_1,long param_2)\n\n{\n  long lVar1;\n  uint uVar2;\n  int iVar3;\n  long lVar4;\n  long lVar5;\n  int *piVar6;\n  long in_FS_OFFSET;\n  undefined1 local_58 [16];\n  long local_40;\n  \n  lVar1 = (long)param_1 + 0x34;\n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  local_58 = (undefined1  [16])0x0;\n  uVar2 = *(uint *)(*param_1 + 0x78);\n  iVar3 = FUN_0015aff0(lVar1,local_58,local_58 + 0xc,0x1f);\n  if (iVar3 == 0) {\n    if ((int)uVar2 < 0) {\n      uVar2 = 0;\n    }\n    *(uint *)local_58._0_8_ =\n         uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 << 0x18;\n    local_58._8_4_ = 4;\n    iVar3 = FUN_0012bc70((uint *)(local_58._0_8_ + 4),(long)*(int *)(param_2 + 0x14));\n    iVar3 = iVar3 + local_58._8_4_;\n    local_58._8_4_ = iVar3;\n    iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,(long)*(int *)(param_2 + 0x10));\n    iVar3 = iVar3 + local_58._8_4_;\n    local_58._8_4_ = iVar3;\n    iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,*(undefined8 *)(param_2 + 8));\n    local_58._8_4_ = local_58._8_4_ + iVar3;\n  }\n  iVar3 = 0;\n  piVar6 = (int *)(param_2 + 0x18);\n  if (0 < *(int *)(param_2 + 0x14)) {\n    do {\n      FUN_0015be80(lVar1,local_58,(long)*piVar6);\n      FUN_0015be80(lVar1,local_58,(long)piVar6[1]);\n      if (0 < piVar6[1]) {\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));\n          lVar4 = lVar5;\n        } while ((int)lVar5 < piVar6[1]);\n      }\n      iVar3 = iVar3 + 1;\n      piVar6 = piVar6 + 4;\n    } while (iVar3 < *(int *)(param_2 + 0x14));\n  }\n  FUN_001bf990(param_1,10,local_58._0_8_,local_58._8_4_);\n  FUN_0011b430(local_58);\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  return;\n}\n\n" (function_definition "void FUN_001bfff0(long *param_1,long param_2)\n\n{\n  long lVar1;\n  uint uVar2;\n  int iVar3;\n  long lVar4;\n  long lVar5;\n  int *piVar6;\n  long in_FS_OFFSET;\n  undefined1 local_58 [16];\n  long local_40;\n  \n  lVar1 = (long)param_1 + 0x34;\n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  local_58 = (undefined1  [16])0x0;\n  uVar2 = *(uint *)(*param_1 + 0x78);\n  iVar3 = FUN_0015aff0(lVar1,local_58,local_58 + 0xc,0x1f);\n  if (iVar3 == 0) {\n    if ((int)uVar2 < 0) {\n      uVar2 = 0;\n    }\n    *(uint *)local_58._0_8_ =\n         uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 << 0x18;\n    local_58._8_4_ = 4;\n    iVar3 = FUN_0012bc70((uint *)(local_58._0_8_ + 4),(long)*(int *)(param_2 + 0x14));\n    iVar3 = iVar3 + local_58._8_4_;\n    local_58._8_4_ = iVar3;\n    iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,(long)*(int *)(param_2 + 0x10));\n    iVar3 = iVar3 + local_58._8_4_;\n    local_58._8_4_ = iVar3;\n    iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,*(undefined8 *)(param_2 + 8));\n    local_58._8_4_ = local_58._8_4_ + iVar3;\n  }\n  iVar3 = 0;\n  piVar6 = (int *)(param_2 + 0x18);\n  if (0 < *(int *)(param_2 + 0x14)) {\n    do {\n      FUN_0015be80(lVar1,local_58,(long)*piVar6);\n      FUN_0015be80(lVar1,local_58,(long)piVar6[1]);\n      if (0 < piVar6[1]) {\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));\n          lVar4 = lVar5;\n        } while ((int)lVar5 < piVar6[1]);\n      }\n      iVar3 = iVar3 + 1;\n      piVar6 = piVar6 + 4;\n    } while (iVar3 < *(int *)(param_2 + 0x14));\n  }\n  FUN_001bf990(param_1,10,local_58._0_8_,local_58._8_4_);\n  FUN_0011b430(local_58);\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  return;\n}" primitive_type (function_declarator "FUN_001bfff0(long *param_1,long param_2)" identifier (parameter_list "(long *param_1,long param_2)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  long lVar1;\n  uint uVar2;\n  int iVar3;\n  long lVar4;\n  long lVar5;\n  int *piVar6;\n  long in_FS_OFFSET;\n  undefined1 local_58 [16];\n  long local_40;\n  \n  lVar1 = (long)param_1 + 0x34;\n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  local_58 = (undefined1  [16])0x0;\n  uVar2 = *(uint *)(*param_1 + 0x78);\n  iVar3 = FUN_0015aff0(lVar1,local_58,local_58 + 0xc,0x1f);\n  if (iVar3 == 0) {\n    if ((int)uVar2 < 0) {\n      uVar2 = 0;\n    }\n    *(uint *)local_58._0_8_ =\n         uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 << 0x18;\n    local_58._8_4_ = 4;\n    iVar3 = FUN_0012bc70((uint *)(local_58._0_8_ + 4),(long)*(int *)(param_2 + 0x14));\n    iVar3 = iVar3 + local_58._8_4_;\n    local_58._8_4_ = iVar3;\n    iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,(long)*(int *)(param_2 + 0x10));\n    iVar3 = iVar3 + local_58._8_4_;\n    local_58._8_4_ = iVar3;\n    iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,*(undefined8 *)(param_2 + 8));\n    local_58._8_4_ = local_58._8_4_ + iVar3;\n  }\n  iVar3 = 0;\n  piVar6 = (int *)(param_2 + 0x18);\n  if (0 < *(int *)(param_2 + 0x14)) {\n    do {\n      FUN_0015be80(lVar1,local_58,(long)*piVar6);\n      FUN_0015be80(lVar1,local_58,(long)piVar6[1]);\n      if (0 < piVar6[1]) {\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));\n          lVar4 = lVar5;\n        } while ((int)lVar5 < piVar6[1]);\n      }\n      iVar3 = iVar3 + 1;\n      piVar6 = piVar6 + 4;\n    } while (iVar3 < *(int *)(param_2 + 0x14));\n  }\n  FUN_001bf990(param_1,10,local_58._0_8_,local_58._8_4_);\n  FUN_0011b430(local_58);\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  return;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "int *piVar6;" primitive_type (pointer_declarator "*piVar6" * identifier) ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 local_58 [16];" type_identifier (array_declarator "local_58 [16]" identifier [ number_literal ]) ;) (declaration "long local_40;" (sized_type_specifier "long" long) identifier ;) (expression_statement "lVar1 = (long)param_1 + 0x34;" (assignment_expression "lVar1 = (long)param_1 + 0x34" identifier = (binary_expression "(long)param_1 + 0x34" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal)) ;) (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) ))))) ;) (expression_statement "local_58 = (undefined1  [16])0x0;" (assignment_expression "local_58 = (undefined1  [16])0x0" identifier = (cast_expression "(undefined1  [16])0x0" ( (type_descriptor "undefined1  [16]" type_identifier (abstract_array_declarator "[16]" [ number_literal ])) ) number_literal)) ;) (expression_statement "uVar2 = *(uint *)(*param_1 + 0x78);" (assignment_expression "uVar2 = *(uint *)(*param_1 + 0x78)" identifier = (pointer_expression "*(uint *)(*param_1 + 0x78)" * (cast_expression "(uint *)(*param_1 + 0x78)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x78)" ( (binary_expression "*param_1 + 0x78" (pointer_expression "*param_1" * identifier) + number_literal) ))))) ;) (expression_statement "iVar3 = FUN_0015aff0(lVar1,local_58,local_58 + 0xc,0x1f);" (assignment_expression "iVar3 = FUN_0015aff0(lVar1,local_58,local_58 + 0xc,0x1f)" identifier = (call_expression "FUN_0015aff0(lVar1,local_58,local_58 + 0xc,0x1f)" identifier (argument_list "(lVar1,local_58,local_58 + 0xc,0x1f)" ( identifier , identifier , (binary_expression "local_58 + 0xc" identifier + number_literal) , number_literal )))) ;) (if_statement "if (iVar3 == 0) {\n    if ((int)uVar2 < 0) {\n      uVar2 = 0;\n    }\n    *(uint *)local_58._0_8_ =\n         uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 << 0x18;\n    local_58._8_4_ = 4;\n    iVar3 = FUN_0012bc70((uint *)(local_58._0_8_ + 4),(long)*(int *)(param_2 + 0x14));\n    iVar3 = iVar3 + local_58._8_4_;\n    local_58._8_4_ = iVar3;\n    iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,(long)*(int *)(param_2 + 0x10));\n    iVar3 = iVar3 + local_58._8_4_;\n    local_58._8_4_ = iVar3;\n    iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,*(undefined8 *)(param_2 + 8));\n    local_58._8_4_ = local_58._8_4_ + iVar3;\n  }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n    if ((int)uVar2 < 0) {\n      uVar2 = 0;\n    }\n    *(uint *)local_58._0_8_ =\n         uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 << 0x18;\n    local_58._8_4_ = 4;\n    iVar3 = FUN_0012bc70((uint *)(local_58._0_8_ + 4),(long)*(int *)(param_2 + 0x14));\n    iVar3 = iVar3 + local_58._8_4_;\n    local_58._8_4_ = iVar3;\n    iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,(long)*(int *)(param_2 + 0x10));\n    iVar3 = iVar3 + local_58._8_4_;\n    local_58._8_4_ = iVar3;\n    iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,*(undefined8 *)(param_2 + 8));\n    local_58._8_4_ = local_58._8_4_ + iVar3;\n  }" { (if_statement "if ((int)uVar2 < 0) {\n      uVar2 = 0;\n    }" if (parenthesized_expression "((int)uVar2 < 0)" ( (binary_expression "(int)uVar2 < 0" (cast_expression "(int)uVar2" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n      uVar2 = 0;\n    }" { (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" identifier = number_literal) ;) })) (expression_statement "*(uint *)local_58._0_8_ =\n         uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 << 0x18;" (assignment_expression "*(uint *)local_58._0_8_ =\n         uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 << 0x18" (pointer_expression "*(uint *)local_58._0_8_" * (cast_expression "(uint *)local_58._0_8_" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "local_58._0_8_" identifier . field_identifier))) = (binary_expression "uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 << 0x18" (binary_expression "uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8" (binary_expression "uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8" (binary_expression "uVar2 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar2 & 0xff0000) >> 8" (parenthesized_expression "(uVar2 & 0xff0000)" ( (binary_expression "uVar2 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar2 & 0xff00) << 8" (parenthesized_expression "(uVar2 & 0xff00)" ( (binary_expression "uVar2 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar2 << 0x18" identifier << number_literal))) ;) (expression_statement "local_58._8_4_ = 4;" (assignment_expression "local_58._8_4_ = 4" (field_expression "local_58._8_4_" identifier . field_identifier) = number_literal) ;) (expression_statement "iVar3 = FUN_0012bc70((uint *)(local_58._0_8_ + 4),(long)*(int *)(param_2 + 0x14));" (assignment_expression "iVar3 = FUN_0012bc70((uint *)(local_58._0_8_ + 4),(long)*(int *)(param_2 + 0x14))" identifier = (call_expression "FUN_0012bc70((uint *)(local_58._0_8_ + 4),(long)*(int *)(param_2 + 0x14))" identifier (argument_list "((uint *)(local_58._0_8_ + 4),(long)*(int *)(param_2 + 0x14))" ( (cast_expression "(uint *)(local_58._0_8_ + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_58._0_8_ + 4)" ( (binary_expression "local_58._0_8_ + 4" (field_expression "local_58._0_8_" identifier . field_identifier) + number_literal) ))) , (cast_expression "(long)*(int *)(param_2 + 0x14)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(param_2 + 0x14)" * (cast_expression "(int *)(param_2 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x14)" ( (binary_expression "param_2 + 0x14" identifier + number_literal) ))))) )))) ;) (expression_statement "iVar3 = iVar3 + local_58._8_4_;" (assignment_expression "iVar3 = iVar3 + local_58._8_4_" identifier = (binary_expression "iVar3 + local_58._8_4_" identifier + (field_expression "local_58._8_4_" identifier . field_identifier))) ;) (expression_statement "local_58._8_4_ = iVar3;" (assignment_expression "local_58._8_4_ = iVar3" (field_expression "local_58._8_4_" identifier . field_identifier) = identifier) ;) (expression_statement "iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,(long)*(int *)(param_2 + 0x10));" (assignment_expression "iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,(long)*(int *)(param_2 + 0x10))" identifier = (call_expression "FUN_0012bc70((long)iVar3 + local_58._0_8_,(long)*(int *)(param_2 + 0x10))" identifier (argument_list "((long)iVar3 + local_58._0_8_,(long)*(int *)(param_2 + 0x10))" ( (binary_expression "(long)iVar3 + local_58._0_8_" (cast_expression "(long)iVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (field_expression "local_58._0_8_" identifier . field_identifier)) , (cast_expression "(long)*(int *)(param_2 + 0x10)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(param_2 + 0x10)" * (cast_expression "(int *)(param_2 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) ))))) )))) ;) (expression_statement "iVar3 = iVar3 + local_58._8_4_;" (assignment_expression "iVar3 = iVar3 + local_58._8_4_" identifier = (binary_expression "iVar3 + local_58._8_4_" identifier + (field_expression "local_58._8_4_" identifier . field_identifier))) ;) (expression_statement "local_58._8_4_ = iVar3;" (assignment_expression "local_58._8_4_ = iVar3" (field_expression "local_58._8_4_" identifier . field_identifier) = identifier) ;) (expression_statement "iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,*(undefined8 *)(param_2 + 8));" (assignment_expression "iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,*(undefined8 *)(param_2 + 8))" identifier = (call_expression "FUN_0012bc70((long)iVar3 + local_58._0_8_,*(undefined8 *)(param_2 + 8))" identifier (argument_list "((long)iVar3 + local_58._0_8_,*(undefined8 *)(param_2 + 8))" ( (binary_expression "(long)iVar3 + local_58._0_8_" (cast_expression "(long)iVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (field_expression "local_58._0_8_" identifier . field_identifier)) , (pointer_expression "*(undefined8 *)(param_2 + 8)" * (cast_expression "(undefined8 *)(param_2 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) )))) )))) ;) (expression_statement "local_58._8_4_ = local_58._8_4_ + iVar3;" (assignment_expression "local_58._8_4_ = local_58._8_4_ + iVar3" (field_expression "local_58._8_4_" identifier . field_identifier) = (binary_expression "local_58._8_4_ + iVar3" (field_expression "local_58._8_4_" identifier . field_identifier) + identifier)) ;) })) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (expression_statement "piVar6 = (int *)(param_2 + 0x18);" (assignment_expression "piVar6 = (int *)(param_2 + 0x18)" identifier = (cast_expression "(int *)(param_2 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x18)" ( (binary_expression "param_2 + 0x18" identifier + number_literal) )))) ;) (if_statement "if (0 < *(int *)(param_2 + 0x14)) {\n    do {\n      FUN_0015be80(lVar1,local_58,(long)*piVar6);\n      FUN_0015be80(lVar1,local_58,(long)piVar6[1]);\n      if (0 < piVar6[1]) {\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));\n          lVar4 = lVar5;\n        } while ((int)lVar5 < piVar6[1]);\n      }\n      iVar3 = iVar3 + 1;\n      piVar6 = piVar6 + 4;\n    } while (iVar3 < *(int *)(param_2 + 0x14));\n  }" if (parenthesized_expression "(0 < *(int *)(param_2 + 0x14))" ( (binary_expression "0 < *(int *)(param_2 + 0x14)" number_literal < (pointer_expression "*(int *)(param_2 + 0x14)" * (cast_expression "(int *)(param_2 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x14)" ( (binary_expression "param_2 + 0x14" identifier + number_literal) ))))) )) (compound_statement "{\n    do {\n      FUN_0015be80(lVar1,local_58,(long)*piVar6);\n      FUN_0015be80(lVar1,local_58,(long)piVar6[1]);\n      if (0 < piVar6[1]) {\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));\n          lVar4 = lVar5;\n        } while ((int)lVar5 < piVar6[1]);\n      }\n      iVar3 = iVar3 + 1;\n      piVar6 = piVar6 + 4;\n    } while (iVar3 < *(int *)(param_2 + 0x14));\n  }" { (do_statement "do {\n      FUN_0015be80(lVar1,local_58,(long)*piVar6);\n      FUN_0015be80(lVar1,local_58,(long)piVar6[1]);\n      if (0 < piVar6[1]) {\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));\n          lVar4 = lVar5;\n        } while ((int)lVar5 < piVar6[1]);\n      }\n      iVar3 = iVar3 + 1;\n      piVar6 = piVar6 + 4;\n    } while (iVar3 < *(int *)(param_2 + 0x14));" do (compound_statement "{\n      FUN_0015be80(lVar1,local_58,(long)*piVar6);\n      FUN_0015be80(lVar1,local_58,(long)piVar6[1]);\n      if (0 < piVar6[1]) {\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));\n          lVar4 = lVar5;\n        } while ((int)lVar5 < piVar6[1]);\n      }\n      iVar3 = iVar3 + 1;\n      piVar6 = piVar6 + 4;\n    }" { (expression_statement "FUN_0015be80(lVar1,local_58,(long)*piVar6);" (call_expression "FUN_0015be80(lVar1,local_58,(long)*piVar6)" identifier (argument_list "(lVar1,local_58,(long)*piVar6)" ( identifier , identifier , (cast_expression "(long)*piVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*piVar6" * identifier)) ))) ;) (expression_statement "FUN_0015be80(lVar1,local_58,(long)piVar6[1]);" (call_expression "FUN_0015be80(lVar1,local_58,(long)piVar6[1])" identifier (argument_list "(lVar1,local_58,(long)piVar6[1])" ( identifier , identifier , (cast_expression "(long)piVar6[1]" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (subscript_expression "piVar6[1]" identifier [ number_literal ])) ))) ;) (if_statement "if (0 < piVar6[1]) {\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));\n          lVar4 = lVar5;\n        } while ((int)lVar5 < piVar6[1]);\n      }" if (parenthesized_expression "(0 < piVar6[1])" ( (binary_expression "0 < piVar6[1]" number_literal < (subscript_expression "piVar6[1]" identifier [ number_literal ])) )) (compound_statement "{\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));\n          lVar4 = lVar5;\n        } while ((int)lVar5 < piVar6[1]);\n      }" { (expression_statement "lVar4 = 0;" (assignment_expression "lVar4 = 0" identifier = number_literal) ;) (do_statement "do {\n          lVar5 = lVar4 + 1;\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));\n          lVar4 = lVar5;\n        } while ((int)lVar5 < piVar6[1]);" do (compound_statement "{\n          lVar5 = lVar4 + 1;\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));\n          lVar4 = lVar5;\n        }" { (expression_statement "lVar5 = lVar4 + 1;" (assignment_expression "lVar5 = lVar4 + 1" identifier = (binary_expression "lVar4 + 1" identifier + number_literal)) ;) (expression_statement "FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));" (call_expression "FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc))" identifier (argument_list "(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc))" ( identifier , identifier , (cast_expression "(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc)" * (cast_expression "(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(piVar6 + 2) + lVar4 * 0xc)" ( (binary_expression "*(long *)(piVar6 + 2) + lVar4 * 0xc" (pointer_expression "*(long *)(piVar6 + 2)" * (cast_expression "(long *)(piVar6 + 2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar6 + 2)" ( (binary_expression "piVar6 + 2" identifier + number_literal) )))) + (binary_expression "lVar4 * 0xc" identifier * number_literal)) ))))) ))) ;) (expression_statement "FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));" (call_expression "FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc))" identifier (argument_list "(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc))" ( identifier , identifier , (cast_expression "(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc)" * (cast_expression "(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc)" ( (binary_expression "*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc" (binary_expression "*(long *)(piVar6 + 2) + 4" (pointer_expression "*(long *)(piVar6 + 2)" * (cast_expression "(long *)(piVar6 + 2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar6 + 2)" ( (binary_expression "piVar6 + 2" identifier + number_literal) )))) + number_literal) + (binary_expression "lVar4 * 0xc" identifier * number_literal)) ))))) ))) ;) (expression_statement "FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));" (call_expression "FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc))" identifier (argument_list "(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc))" ( identifier , identifier , (cast_expression "(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc)" * (cast_expression "(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc)" ( (binary_expression "*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc" (binary_expression "*(long *)(piVar6 + 2) + 8" (pointer_expression "*(long *)(piVar6 + 2)" * (cast_expression "(long *)(piVar6 + 2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar6 + 2)" ( (binary_expression "piVar6 + 2" identifier + number_literal) )))) + number_literal) + (binary_expression "lVar4 * 0xc" identifier * number_literal)) ))))) ))) ;) (expression_statement "lVar4 = lVar5;" (assignment_expression "lVar4 = lVar5" identifier = identifier) ;) }) while (parenthesized_expression "((int)lVar5 < piVar6[1])" ( (binary_expression "(int)lVar5 < piVar6[1]" (cast_expression "(int)lVar5" ( (type_descriptor "int" primitive_type) ) identifier) < (subscript_expression "piVar6[1]" identifier [ number_literal ])) )) ;) })) (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (expression_statement "piVar6 = piVar6 + 4;" (assignment_expression "piVar6 = piVar6 + 4" identifier = (binary_expression "piVar6 + 4" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar3 < *(int *)(param_2 + 0x14))" ( (binary_expression "iVar3 < *(int *)(param_2 + 0x14)" identifier < (pointer_expression "*(int *)(param_2 + 0x14)" * (cast_expression "(int *)(param_2 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x14)" ( (binary_expression "param_2 + 0x14" identifier + number_literal) ))))) )) ;) })) (expression_statement "FUN_001bf990(param_1,10,local_58._0_8_,local_58._8_4_);" (call_expression "FUN_001bf990(param_1,10,local_58._0_8_,local_58._8_4_)" identifier (argument_list "(param_1,10,local_58._0_8_,local_58._8_4_)" ( identifier , number_literal , (field_expression "local_58._0_8_" identifier . field_identifier) , (field_expression "local_58._8_4_" identifier . field_identifier) ))) ;) (expression_statement "FUN_0011b430(local_58);" (call_expression "FUN_0011b430(local_58)" identifier (argument_list "(local_58)" ( 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;" return ;) })))
(translation_unit "void fts5StructureWrite(Fts5Index *p,Fts5Structure *pStruct)\n\n{\n  int *pRc;\n  uint uVar1;\n  long lVar2;\n  int iVar3;\n  long lVar4;\n  long lVar5;\n  Fts5StructureLevel *pFVar6;\n  long in_FS_OFFSET;\n  Fts5Buffer buf;\n  \n  pRc = &p->rc;\n  lVar2 = *(long *)(in_FS_OFFSET + 0x28);\n  buf.p = (u8 *)0x0;\n  buf.n = 0;\n  buf.nSpace = 0;\n  uVar1 = p->pConfig->iCookie;\n  iVar3 = sqlite3Fts5BufferSize(pRc,&buf,(int)&buf + 0xc,(Fts5Buffer *)0x1f);\n  if (iVar3 == 0) {\n    if ((int)uVar1 < 0) {\n      uVar1 = 0;\n    }\n    *(uint *)buf.p = uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 << 0x18\n    ;\n    buf.n = 4;\n    iVar3 = sqlite3Fts5PutVarint(buf.p + 4,(long)pStruct->nLevel);\n    iVar3 = iVar3 + buf.n;\n    buf.n = iVar3;\n    iVar3 = sqlite3Fts5PutVarint(buf.p + iVar3,(long)pStruct->nSegment);\n    iVar3 = iVar3 + buf.n;\n    buf.n = iVar3;\n    iVar3 = sqlite3Fts5PutVarint(buf.p + iVar3,pStruct->nWriteCounter);\n    buf.n = buf.n + iVar3;\n  }\n  iVar3 = 0;\n  pFVar6 = pStruct->aLevel;\n  if (0 < pStruct->nLevel) {\n    do {\n      sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->nMerge);\n      sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->nSeg);\n      if (0 < pFVar6->nSeg) {\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].iSegid);\n          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].pgnoFirst);\n          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].pgnoLast);\n          lVar4 = lVar5;\n        } while ((int)lVar5 < pFVar6->nSeg);\n      }\n      iVar3 = iVar3 + 1;\n      pFVar6 = pFVar6 + 1;\n    } while (iVar3 < pStruct->nLevel);\n  }\n  fts5DataWrite(p,10,buf.p,buf.n);\n  sqlite3Fts5BufferFree(&buf);\n  if (lVar2 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  return;\n}\n\n" (function_definition "void fts5StructureWrite(Fts5Index *p,Fts5Structure *pStruct)\n\n{\n  int *pRc;\n  uint uVar1;\n  long lVar2;\n  int iVar3;\n  long lVar4;\n  long lVar5;\n  Fts5StructureLevel *pFVar6;\n  long in_FS_OFFSET;\n  Fts5Buffer buf;\n  \n  pRc = &p->rc;\n  lVar2 = *(long *)(in_FS_OFFSET + 0x28);\n  buf.p = (u8 *)0x0;\n  buf.n = 0;\n  buf.nSpace = 0;\n  uVar1 = p->pConfig->iCookie;\n  iVar3 = sqlite3Fts5BufferSize(pRc,&buf,(int)&buf + 0xc,(Fts5Buffer *)0x1f);\n  if (iVar3 == 0) {\n    if ((int)uVar1 < 0) {\n      uVar1 = 0;\n    }\n    *(uint *)buf.p = uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 << 0x18\n    ;\n    buf.n = 4;\n    iVar3 = sqlite3Fts5PutVarint(buf.p + 4,(long)pStruct->nLevel);\n    iVar3 = iVar3 + buf.n;\n    buf.n = iVar3;\n    iVar3 = sqlite3Fts5PutVarint(buf.p + iVar3,(long)pStruct->nSegment);\n    iVar3 = iVar3 + buf.n;\n    buf.n = iVar3;\n    iVar3 = sqlite3Fts5PutVarint(buf.p + iVar3,pStruct->nWriteCounter);\n    buf.n = buf.n + iVar3;\n  }\n  iVar3 = 0;\n  pFVar6 = pStruct->aLevel;\n  if (0 < pStruct->nLevel) {\n    do {\n      sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->nMerge);\n      sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->nSeg);\n      if (0 < pFVar6->nSeg) {\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].iSegid);\n          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].pgnoFirst);\n          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].pgnoLast);\n          lVar4 = lVar5;\n        } while ((int)lVar5 < pFVar6->nSeg);\n      }\n      iVar3 = iVar3 + 1;\n      pFVar6 = pFVar6 + 1;\n    } while (iVar3 < pStruct->nLevel);\n  }\n  fts5DataWrite(p,10,buf.p,buf.n);\n  sqlite3Fts5BufferFree(&buf);\n  if (lVar2 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  return;\n}" primitive_type (function_declarator "fts5StructureWrite(Fts5Index *p,Fts5Structure *pStruct)" identifier (parameter_list "(Fts5Index *p,Fts5Structure *pStruct)" ( (parameter_declaration "Fts5Index *p" type_identifier (pointer_declarator "*p" * identifier)) , (parameter_declaration "Fts5Structure *pStruct" type_identifier (pointer_declarator "*pStruct" * identifier)) ))) (compound_statement "{\n  int *pRc;\n  uint uVar1;\n  long lVar2;\n  int iVar3;\n  long lVar4;\n  long lVar5;\n  Fts5StructureLevel *pFVar6;\n  long in_FS_OFFSET;\n  Fts5Buffer buf;\n  \n  pRc = &p->rc;\n  lVar2 = *(long *)(in_FS_OFFSET + 0x28);\n  buf.p = (u8 *)0x0;\n  buf.n = 0;\n  buf.nSpace = 0;\n  uVar1 = p->pConfig->iCookie;\n  iVar3 = sqlite3Fts5BufferSize(pRc,&buf,(int)&buf + 0xc,(Fts5Buffer *)0x1f);\n  if (iVar3 == 0) {\n    if ((int)uVar1 < 0) {\n      uVar1 = 0;\n    }\n    *(uint *)buf.p = uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 << 0x18\n    ;\n    buf.n = 4;\n    iVar3 = sqlite3Fts5PutVarint(buf.p + 4,(long)pStruct->nLevel);\n    iVar3 = iVar3 + buf.n;\n    buf.n = iVar3;\n    iVar3 = sqlite3Fts5PutVarint(buf.p + iVar3,(long)pStruct->nSegment);\n    iVar3 = iVar3 + buf.n;\n    buf.n = iVar3;\n    iVar3 = sqlite3Fts5PutVarint(buf.p + iVar3,pStruct->nWriteCounter);\n    buf.n = buf.n + iVar3;\n  }\n  iVar3 = 0;\n  pFVar6 = pStruct->aLevel;\n  if (0 < pStruct->nLevel) {\n    do {\n      sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->nMerge);\n      sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->nSeg);\n      if (0 < pFVar6->nSeg) {\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].iSegid);\n          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].pgnoFirst);\n          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].pgnoLast);\n          lVar4 = lVar5;\n        } while ((int)lVar5 < pFVar6->nSeg);\n      }\n      iVar3 = iVar3 + 1;\n      pFVar6 = pFVar6 + 1;\n    } while (iVar3 < pStruct->nLevel);\n  }\n  fts5DataWrite(p,10,buf.p,buf.n);\n  sqlite3Fts5BufferFree(&buf);\n  if (lVar2 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  return;\n}" { (declaration "int *pRc;" primitive_type (pointer_declarator "*pRc" * identifier) ;) (declaration "uint uVar1;" type_identifier identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "Fts5StructureLevel *pFVar6;" type_identifier (pointer_declarator "*pFVar6" * identifier) ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "Fts5Buffer buf;" type_identifier identifier ;) (expression_statement "pRc = &p->rc;" (assignment_expression "pRc = &p->rc" identifier = (pointer_expression "&p->rc" & (field_expression "p->rc" identifier -> field_identifier))) ;) (expression_statement "lVar2 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "lVar2 = *(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) ))))) ;) (expression_statement "buf.p = (u8 *)0x0;" (assignment_expression "buf.p = (u8 *)0x0" (field_expression "buf.p" identifier . field_identifier) = (cast_expression "(u8 *)0x0" ( (type_descriptor "u8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "buf.n = 0;" (assignment_expression "buf.n = 0" (field_expression "buf.n" identifier . field_identifier) = number_literal) ;) (expression_statement "buf.nSpace = 0;" (assignment_expression "buf.nSpace = 0" (field_expression "buf.nSpace" identifier . field_identifier) = number_literal) ;) (expression_statement "uVar1 = p->pConfig->iCookie;" (assignment_expression "uVar1 = p->pConfig->iCookie" identifier = (field_expression "p->pConfig->iCookie" (field_expression "p->pConfig" identifier -> field_identifier) -> field_identifier)) ;) (expression_statement "iVar3 = sqlite3Fts5BufferSize(pRc,&buf,(int)&buf + 0xc,(Fts5Buffer *)0x1f);" (assignment_expression "iVar3 = sqlite3Fts5BufferSize(pRc,&buf,(int)&buf + 0xc,(Fts5Buffer *)0x1f)" identifier = (call_expression "sqlite3Fts5BufferSize(pRc,&buf,(int)&buf + 0xc,(Fts5Buffer *)0x1f)" identifier (argument_list "(pRc,&buf,(int)&buf + 0xc,(Fts5Buffer *)0x1f)" ( identifier , (pointer_expression "&buf" & identifier) , (binary_expression "(int)&buf + 0xc" (cast_expression "(int)&buf" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&buf" & identifier)) + number_literal) , (cast_expression "(Fts5Buffer *)0x1f" ( (type_descriptor "Fts5Buffer *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) )))) ;) (if_statement "if (iVar3 == 0) {\n    if ((int)uVar1 < 0) {\n      uVar1 = 0;\n    }\n    *(uint *)buf.p = uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 << 0x18\n    ;\n    buf.n = 4;\n    iVar3 = sqlite3Fts5PutVarint(buf.p + 4,(long)pStruct->nLevel);\n    iVar3 = iVar3 + buf.n;\n    buf.n = iVar3;\n    iVar3 = sqlite3Fts5PutVarint(buf.p + iVar3,(long)pStruct->nSegment);\n    iVar3 = iVar3 + buf.n;\n    buf.n = iVar3;\n    iVar3 = sqlite3Fts5PutVarint(buf.p + iVar3,pStruct->nWriteCounter);\n    buf.n = buf.n + iVar3;\n  }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n    if ((int)uVar1 < 0) {\n      uVar1 = 0;\n    }\n    *(uint *)buf.p = uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 << 0x18\n    ;\n    buf.n = 4;\n    iVar3 = sqlite3Fts5PutVarint(buf.p + 4,(long)pStruct->nLevel);\n    iVar3 = iVar3 + buf.n;\n    buf.n = iVar3;\n    iVar3 = sqlite3Fts5PutVarint(buf.p + iVar3,(long)pStruct->nSegment);\n    iVar3 = iVar3 + buf.n;\n    buf.n = iVar3;\n    iVar3 = sqlite3Fts5PutVarint(buf.p + iVar3,pStruct->nWriteCounter);\n    buf.n = buf.n + iVar3;\n  }" { (if_statement "if ((int)uVar1 < 0) {\n      uVar1 = 0;\n    }" if (parenthesized_expression "((int)uVar1 < 0)" ( (binary_expression "(int)uVar1 < 0" (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n      uVar1 = 0;\n    }" { (expression_statement "uVar1 = 0;" (assignment_expression "uVar1 = 0" identifier = number_literal) ;) })) (expression_statement "*(uint *)buf.p = uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 << 0x18\n    ;" (assignment_expression "*(uint *)buf.p = uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 << 0x18" (pointer_expression "*(uint *)buf.p" * (cast_expression "(uint *)buf.p" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "buf.p" identifier . field_identifier))) = (binary_expression "uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 << 0x18" (binary_expression "uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8" (binary_expression "uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8" (binary_expression "uVar1 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar1 & 0xff0000) >> 8" (parenthesized_expression "(uVar1 & 0xff0000)" ( (binary_expression "uVar1 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar1 & 0xff00) << 8" (parenthesized_expression "(uVar1 & 0xff00)" ( (binary_expression "uVar1 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar1 << 0x18" identifier << number_literal))) ;) (expression_statement "buf.n = 4;" (assignment_expression "buf.n = 4" (field_expression "buf.n" identifier . field_identifier) = number_literal) ;) (expression_statement "iVar3 = sqlite3Fts5PutVarint(buf.p + 4,(long)pStruct->nLevel);" (assignment_expression "iVar3 = sqlite3Fts5PutVarint(buf.p + 4,(long)pStruct->nLevel)" identifier = (call_expression "sqlite3Fts5PutVarint(buf.p + 4,(long)pStruct->nLevel)" identifier (argument_list "(buf.p + 4,(long)pStruct->nLevel)" ( (binary_expression "buf.p + 4" (field_expression "buf.p" identifier . field_identifier) + number_literal) , (cast_expression "(long)pStruct->nLevel" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "pStruct->nLevel" identifier -> field_identifier)) )))) ;) (expression_statement "iVar3 = iVar3 + buf.n;" (assignment_expression "iVar3 = iVar3 + buf.n" identifier = (binary_expression "iVar3 + buf.n" identifier + (field_expression "buf.n" identifier . field_identifier))) ;) (expression_statement "buf.n = iVar3;" (assignment_expression "buf.n = iVar3" (field_expression "buf.n" identifier . field_identifier) = identifier) ;) (expression_statement "iVar3 = sqlite3Fts5PutVarint(buf.p + iVar3,(long)pStruct->nSegment);" (assignment_expression "iVar3 = sqlite3Fts5PutVarint(buf.p + iVar3,(long)pStruct->nSegment)" identifier = (call_expression "sqlite3Fts5PutVarint(buf.p + iVar3,(long)pStruct->nSegment)" identifier (argument_list "(buf.p + iVar3,(long)pStruct->nSegment)" ( (binary_expression "buf.p + iVar3" (field_expression "buf.p" identifier . field_identifier) + identifier) , (cast_expression "(long)pStruct->nSegment" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "pStruct->nSegment" identifier -> field_identifier)) )))) ;) (expression_statement "iVar3 = iVar3 + buf.n;" (assignment_expression "iVar3 = iVar3 + buf.n" identifier = (binary_expression "iVar3 + buf.n" identifier + (field_expression "buf.n" identifier . field_identifier))) ;) (expression_statement "buf.n = iVar3;" (assignment_expression "buf.n = iVar3" (field_expression "buf.n" identifier . field_identifier) = identifier) ;) (expression_statement "iVar3 = sqlite3Fts5PutVarint(buf.p + iVar3,pStruct->nWriteCounter);" (assignment_expression "iVar3 = sqlite3Fts5PutVarint(buf.p + iVar3,pStruct->nWriteCounter)" identifier = (call_expression "sqlite3Fts5PutVarint(buf.p + iVar3,pStruct->nWriteCounter)" identifier (argument_list "(buf.p + iVar3,pStruct->nWriteCounter)" ( (binary_expression "buf.p + iVar3" (field_expression "buf.p" identifier . field_identifier) + identifier) , (field_expression "pStruct->nWriteCounter" identifier -> field_identifier) )))) ;) (expression_statement "buf.n = buf.n + iVar3;" (assignment_expression "buf.n = buf.n + iVar3" (field_expression "buf.n" identifier . field_identifier) = (binary_expression "buf.n + iVar3" (field_expression "buf.n" identifier . field_identifier) + identifier)) ;) })) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (expression_statement "pFVar6 = pStruct->aLevel;" (assignment_expression "pFVar6 = pStruct->aLevel" identifier = (field_expression "pStruct->aLevel" identifier -> field_identifier)) ;) (if_statement "if (0 < pStruct->nLevel) {\n    do {\n      sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->nMerge);\n      sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->nSeg);\n      if (0 < pFVar6->nSeg) {\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].iSegid);\n          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].pgnoFirst);\n          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].pgnoLast);\n          lVar4 = lVar5;\n        } while ((int)lVar5 < pFVar6->nSeg);\n      }\n      iVar3 = iVar3 + 1;\n      pFVar6 = pFVar6 + 1;\n    } while (iVar3 < pStruct->nLevel);\n  }" if (parenthesized_expression "(0 < pStruct->nLevel)" ( (binary_expression "0 < pStruct->nLevel" number_literal < (field_expression "pStruct->nLevel" identifier -> field_identifier)) )) (compound_statement "{\n    do {\n      sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->nMerge);\n      sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->nSeg);\n      if (0 < pFVar6->nSeg) {\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].iSegid);\n          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].pgnoFirst);\n          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].pgnoLast);\n          lVar4 = lVar5;\n        } while ((int)lVar5 < pFVar6->nSeg);\n      }\n      iVar3 = iVar3 + 1;\n      pFVar6 = pFVar6 + 1;\n    } while (iVar3 < pStruct->nLevel);\n  }" { (do_statement "do {\n      sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->nMerge);\n      sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->nSeg);\n      if (0 < pFVar6->nSeg) {\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].iSegid);\n          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].pgnoFirst);\n          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].pgnoLast);\n          lVar4 = lVar5;\n        } while ((int)lVar5 < pFVar6->nSeg);\n      }\n      iVar3 = iVar3 + 1;\n      pFVar6 = pFVar6 + 1;\n    } while (iVar3 < pStruct->nLevel);" do (compound_statement "{\n      sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->nMerge);\n      sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->nSeg);\n      if (0 < pFVar6->nSeg) {\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].iSegid);\n          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].pgnoFirst);\n          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].pgnoLast);\n          lVar4 = lVar5;\n        } while ((int)lVar5 < pFVar6->nSeg);\n      }\n      iVar3 = iVar3 + 1;\n      pFVar6 = pFVar6 + 1;\n    }" { (expression_statement "sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->nMerge);" (call_expression "sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->nMerge)" identifier (argument_list "(pRc,&buf,(long)pFVar6->nMerge)" ( identifier , (pointer_expression "&buf" & identifier) , (cast_expression "(long)pFVar6->nMerge" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "pFVar6->nMerge" identifier -> field_identifier)) ))) ;) (expression_statement "sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->nSeg);" (call_expression "sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->nSeg)" identifier (argument_list "(pRc,&buf,(long)pFVar6->nSeg)" ( identifier , (pointer_expression "&buf" & identifier) , (cast_expression "(long)pFVar6->nSeg" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "pFVar6->nSeg" identifier -> field_identifier)) ))) ;) (if_statement "if (0 < pFVar6->nSeg) {\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].iSegid);\n          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].pgnoFirst);\n          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].pgnoLast);\n          lVar4 = lVar5;\n        } while ((int)lVar5 < pFVar6->nSeg);\n      }" if (parenthesized_expression "(0 < pFVar6->nSeg)" ( (binary_expression "0 < pFVar6->nSeg" number_literal < (field_expression "pFVar6->nSeg" identifier -> field_identifier)) )) (compound_statement "{\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].iSegid);\n          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].pgnoFirst);\n          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].pgnoLast);\n          lVar4 = lVar5;\n        } while ((int)lVar5 < pFVar6->nSeg);\n      }" { (expression_statement "lVar4 = 0;" (assignment_expression "lVar4 = 0" identifier = number_literal) ;) (do_statement "do {\n          lVar5 = lVar4 + 1;\n          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].iSegid);\n          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].pgnoFirst);\n          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].pgnoLast);\n          lVar4 = lVar5;\n        } while ((int)lVar5 < pFVar6->nSeg);" do (compound_statement "{\n          lVar5 = lVar4 + 1;\n          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].iSegid);\n          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].pgnoFirst);\n          sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].pgnoLast);\n          lVar4 = lVar5;\n        }" { (expression_statement "lVar5 = lVar4 + 1;" (assignment_expression "lVar5 = lVar4 + 1" identifier = (binary_expression "lVar4 + 1" identifier + number_literal)) ;) (expression_statement "sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].iSegid);" (call_expression "sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].iSegid)" identifier (argument_list "(pRc,&buf,(long)pFVar6->aSeg[lVar4].iSegid)" ( identifier , (pointer_expression "&buf" & identifier) , (cast_expression "(long)pFVar6->aSeg[lVar4].iSegid" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "pFVar6->aSeg[lVar4].iSegid" (subscript_expression "pFVar6->aSeg[lVar4]" (field_expression "pFVar6->aSeg" identifier -> field_identifier) [ identifier ]) . field_identifier)) ))) ;) (expression_statement "sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].pgnoFirst);" (call_expression "sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].pgnoFirst)" identifier (argument_list "(pRc,&buf,(long)pFVar6->aSeg[lVar4].pgnoFirst)" ( identifier , (pointer_expression "&buf" & identifier) , (cast_expression "(long)pFVar6->aSeg[lVar4].pgnoFirst" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "pFVar6->aSeg[lVar4].pgnoFirst" (subscript_expression "pFVar6->aSeg[lVar4]" (field_expression "pFVar6->aSeg" identifier -> field_identifier) [ identifier ]) . field_identifier)) ))) ;) (expression_statement "sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].pgnoLast);" (call_expression "sqlite3Fts5BufferAppendVarint(pRc,&buf,(long)pFVar6->aSeg[lVar4].pgnoLast)" identifier (argument_list "(pRc,&buf,(long)pFVar6->aSeg[lVar4].pgnoLast)" ( identifier , (pointer_expression "&buf" & identifier) , (cast_expression "(long)pFVar6->aSeg[lVar4].pgnoLast" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "pFVar6->aSeg[lVar4].pgnoLast" (subscript_expression "pFVar6->aSeg[lVar4]" (field_expression "pFVar6->aSeg" identifier -> field_identifier) [ identifier ]) . field_identifier)) ))) ;) (expression_statement "lVar4 = lVar5;" (assignment_expression "lVar4 = lVar5" identifier = identifier) ;) }) while (parenthesized_expression "((int)lVar5 < pFVar6->nSeg)" ( (binary_expression "(int)lVar5 < pFVar6->nSeg" (cast_expression "(int)lVar5" ( (type_descriptor "int" primitive_type) ) identifier) < (field_expression "pFVar6->nSeg" identifier -> field_identifier)) )) ;) })) (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (expression_statement "pFVar6 = pFVar6 + 1;" (assignment_expression "pFVar6 = pFVar6 + 1" identifier = (binary_expression "pFVar6 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar3 < pStruct->nLevel)" ( (binary_expression "iVar3 < pStruct->nLevel" identifier < (field_expression "pStruct->nLevel" identifier -> field_identifier)) )) ;) })) (expression_statement "fts5DataWrite(p,10,buf.p,buf.n);" (call_expression "fts5DataWrite(p,10,buf.p,buf.n)" identifier (argument_list "(p,10,buf.p,buf.n)" ( identifier , number_literal , (field_expression "buf.p" identifier . field_identifier) , (field_expression "buf.n" identifier . field_identifier) ))) ;) (expression_statement "sqlite3Fts5BufferFree(&buf);" (call_expression "sqlite3Fts5BufferFree(&buf)" identifier (argument_list "(&buf)" ( (pointer_expression "&buf" & identifier) ))) ;) (if_statement "if (lVar2 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }" if (parenthesized_expression "(lVar2 != *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "lVar2 != *(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;" return ;) })))
(translation_unit "void FUN_001bfff0(long *param_1,long param_2)\n\n{\n  long lVar1;\n  uint uVar2;\n  int iVar3;\n  long lVar4;\n  long lVar5;\n  int *piVar6;\n  long in_FS_OFFSET;\n  undefined1 local_58 [16];\n  long local_40;\n  \n  lVar1 = (long)param_1 + 0x34;\n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  local_58 = (undefined1  [16])0x0;\n  uVar2 = *(uint *)(*param_1 + 0x78);\n  iVar3 = FUN_0015aff0(lVar1,local_58,local_58 + 0xc,0x1f);\n  if (iVar3 == 0) {\n    if ((int)uVar2 < 0) {\n      uVar2 = 0;\n    }\n    *(uint *)local_58._0_8_ =\n         uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 << 0x18;\n    local_58._8_4_ = 4;\n    iVar3 = FUN_0012bc70((uint *)(local_58._0_8_ + 4),(long)*(int *)(param_2 + 0x14));\n    iVar3 = iVar3 + local_58._8_4_;\n    local_58._8_4_ = iVar3;\n    iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,(long)*(int *)(param_2 + 0x10));\n    iVar3 = iVar3 + local_58._8_4_;\n    local_58._8_4_ = iVar3;\n    iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,*(undefined8 *)(param_2 + 8));\n    local_58._8_4_ = local_58._8_4_ + iVar3;\n  }\n  iVar3 = 0;\n  piVar6 = (int *)(param_2 + 0x18);\n  if (0 < *(int *)(param_2 + 0x14)) {\n    do {\n      FUN_0015be80(lVar1,local_58,(long)*piVar6);\n      FUN_0015be80(lVar1,local_58,(long)piVar6[1]);\n      if (0 < piVar6[1]) {\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));\n          lVar4 = lVar5;\n        } while ((int)lVar5 < piVar6[1]);\n      }\n      iVar3 = iVar3 + 1;\n      piVar6 = piVar6 + 4;\n    } while (iVar3 < *(int *)(param_2 + 0x14));\n  }\n  FUN_001bf990(param_1,10,local_58._0_8_,local_58._8_4_);\n  FUN_0011b430(local_58);\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }\n  return;\n}\n\n" (function_definition "void FUN_001bfff0(long *param_1,long param_2)\n\n{\n  long lVar1;\n  uint uVar2;\n  int iVar3;\n  long lVar4;\n  long lVar5;\n  int *piVar6;\n  long in_FS_OFFSET;\n  undefined1 local_58 [16];\n  long local_40;\n  \n  lVar1 = (long)param_1 + 0x34;\n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  local_58 = (undefined1  [16])0x0;\n  uVar2 = *(uint *)(*param_1 + 0x78);\n  iVar3 = FUN_0015aff0(lVar1,local_58,local_58 + 0xc,0x1f);\n  if (iVar3 == 0) {\n    if ((int)uVar2 < 0) {\n      uVar2 = 0;\n    }\n    *(uint *)local_58._0_8_ =\n         uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 << 0x18;\n    local_58._8_4_ = 4;\n    iVar3 = FUN_0012bc70((uint *)(local_58._0_8_ + 4),(long)*(int *)(param_2 + 0x14));\n    iVar3 = iVar3 + local_58._8_4_;\n    local_58._8_4_ = iVar3;\n    iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,(long)*(int *)(param_2 + 0x10));\n    iVar3 = iVar3 + local_58._8_4_;\n    local_58._8_4_ = iVar3;\n    iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,*(undefined8 *)(param_2 + 8));\n    local_58._8_4_ = local_58._8_4_ + iVar3;\n  }\n  iVar3 = 0;\n  piVar6 = (int *)(param_2 + 0x18);\n  if (0 < *(int *)(param_2 + 0x14)) {\n    do {\n      FUN_0015be80(lVar1,local_58,(long)*piVar6);\n      FUN_0015be80(lVar1,local_58,(long)piVar6[1]);\n      if (0 < piVar6[1]) {\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));\n          lVar4 = lVar5;\n        } while ((int)lVar5 < piVar6[1]);\n      }\n      iVar3 = iVar3 + 1;\n      piVar6 = piVar6 + 4;\n    } while (iVar3 < *(int *)(param_2 + 0x14));\n  }\n  FUN_001bf990(param_1,10,local_58._0_8_,local_58._8_4_);\n  FUN_0011b430(local_58);\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }\n  return;\n}" primitive_type (function_declarator "FUN_001bfff0(long *param_1,long param_2)" identifier (parameter_list "(long *param_1,long param_2)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  long lVar1;\n  uint uVar2;\n  int iVar3;\n  long lVar4;\n  long lVar5;\n  int *piVar6;\n  long in_FS_OFFSET;\n  undefined1 local_58 [16];\n  long local_40;\n  \n  lVar1 = (long)param_1 + 0x34;\n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  local_58 = (undefined1  [16])0x0;\n  uVar2 = *(uint *)(*param_1 + 0x78);\n  iVar3 = FUN_0015aff0(lVar1,local_58,local_58 + 0xc,0x1f);\n  if (iVar3 == 0) {\n    if ((int)uVar2 < 0) {\n      uVar2 = 0;\n    }\n    *(uint *)local_58._0_8_ =\n         uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 << 0x18;\n    local_58._8_4_ = 4;\n    iVar3 = FUN_0012bc70((uint *)(local_58._0_8_ + 4),(long)*(int *)(param_2 + 0x14));\n    iVar3 = iVar3 + local_58._8_4_;\n    local_58._8_4_ = iVar3;\n    iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,(long)*(int *)(param_2 + 0x10));\n    iVar3 = iVar3 + local_58._8_4_;\n    local_58._8_4_ = iVar3;\n    iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,*(undefined8 *)(param_2 + 8));\n    local_58._8_4_ = local_58._8_4_ + iVar3;\n  }\n  iVar3 = 0;\n  piVar6 = (int *)(param_2 + 0x18);\n  if (0 < *(int *)(param_2 + 0x14)) {\n    do {\n      FUN_0015be80(lVar1,local_58,(long)*piVar6);\n      FUN_0015be80(lVar1,local_58,(long)piVar6[1]);\n      if (0 < piVar6[1]) {\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));\n          lVar4 = lVar5;\n        } while ((int)lVar5 < piVar6[1]);\n      }\n      iVar3 = iVar3 + 1;\n      piVar6 = piVar6 + 4;\n    } while (iVar3 < *(int *)(param_2 + 0x14));\n  }\n  FUN_001bf990(param_1,10,local_58._0_8_,local_58._8_4_);\n  FUN_0011b430(local_58);\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }\n  return;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "int *piVar6;" primitive_type (pointer_declarator "*piVar6" * identifier) ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 local_58 [16];" type_identifier (array_declarator "local_58 [16]" identifier [ number_literal ]) ;) (declaration "long local_40;" (sized_type_specifier "long" long) identifier ;) (expression_statement "lVar1 = (long)param_1 + 0x34;" (assignment_expression "lVar1 = (long)param_1 + 0x34" identifier = (binary_expression "(long)param_1 + 0x34" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal)) ;) (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) ))))) ;) (expression_statement "local_58 = (undefined1  [16])0x0;" (assignment_expression "local_58 = (undefined1  [16])0x0" identifier = (cast_expression "(undefined1  [16])0x0" ( (type_descriptor "undefined1  [16]" type_identifier (abstract_array_declarator "[16]" [ number_literal ])) ) number_literal)) ;) (expression_statement "uVar2 = *(uint *)(*param_1 + 0x78);" (assignment_expression "uVar2 = *(uint *)(*param_1 + 0x78)" identifier = (pointer_expression "*(uint *)(*param_1 + 0x78)" * (cast_expression "(uint *)(*param_1 + 0x78)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x78)" ( (binary_expression "*param_1 + 0x78" (pointer_expression "*param_1" * identifier) + number_literal) ))))) ;) (expression_statement "iVar3 = FUN_0015aff0(lVar1,local_58,local_58 + 0xc,0x1f);" (assignment_expression "iVar3 = FUN_0015aff0(lVar1,local_58,local_58 + 0xc,0x1f)" identifier = (call_expression "FUN_0015aff0(lVar1,local_58,local_58 + 0xc,0x1f)" identifier (argument_list "(lVar1,local_58,local_58 + 0xc,0x1f)" ( identifier , identifier , (binary_expression "local_58 + 0xc" identifier + number_literal) , number_literal )))) ;) (if_statement "if (iVar3 == 0) {\n    if ((int)uVar2 < 0) {\n      uVar2 = 0;\n    }\n    *(uint *)local_58._0_8_ =\n         uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 << 0x18;\n    local_58._8_4_ = 4;\n    iVar3 = FUN_0012bc70((uint *)(local_58._0_8_ + 4),(long)*(int *)(param_2 + 0x14));\n    iVar3 = iVar3 + local_58._8_4_;\n    local_58._8_4_ = iVar3;\n    iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,(long)*(int *)(param_2 + 0x10));\n    iVar3 = iVar3 + local_58._8_4_;\n    local_58._8_4_ = iVar3;\n    iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,*(undefined8 *)(param_2 + 8));\n    local_58._8_4_ = local_58._8_4_ + iVar3;\n  }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n    if ((int)uVar2 < 0) {\n      uVar2 = 0;\n    }\n    *(uint *)local_58._0_8_ =\n         uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 << 0x18;\n    local_58._8_4_ = 4;\n    iVar3 = FUN_0012bc70((uint *)(local_58._0_8_ + 4),(long)*(int *)(param_2 + 0x14));\n    iVar3 = iVar3 + local_58._8_4_;\n    local_58._8_4_ = iVar3;\n    iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,(long)*(int *)(param_2 + 0x10));\n    iVar3 = iVar3 + local_58._8_4_;\n    local_58._8_4_ = iVar3;\n    iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,*(undefined8 *)(param_2 + 8));\n    local_58._8_4_ = local_58._8_4_ + iVar3;\n  }" { (if_statement "if ((int)uVar2 < 0) {\n      uVar2 = 0;\n    }" if (parenthesized_expression "((int)uVar2 < 0)" ( (binary_expression "(int)uVar2 < 0" (cast_expression "(int)uVar2" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n      uVar2 = 0;\n    }" { (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" identifier = number_literal) ;) })) (expression_statement "*(uint *)local_58._0_8_ =\n         uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 << 0x18;" (assignment_expression "*(uint *)local_58._0_8_ =\n         uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 << 0x18" (pointer_expression "*(uint *)local_58._0_8_" * (cast_expression "(uint *)local_58._0_8_" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "local_58._0_8_" identifier . field_identifier))) = (binary_expression "uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 << 0x18" (binary_expression "uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8" (binary_expression "uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8" (binary_expression "uVar2 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar2 & 0xff0000) >> 8" (parenthesized_expression "(uVar2 & 0xff0000)" ( (binary_expression "uVar2 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar2 & 0xff00) << 8" (parenthesized_expression "(uVar2 & 0xff00)" ( (binary_expression "uVar2 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar2 << 0x18" identifier << number_literal))) ;) (expression_statement "local_58._8_4_ = 4;" (assignment_expression "local_58._8_4_ = 4" (field_expression "local_58._8_4_" identifier . field_identifier) = number_literal) ;) (expression_statement "iVar3 = FUN_0012bc70((uint *)(local_58._0_8_ + 4),(long)*(int *)(param_2 + 0x14));" (assignment_expression "iVar3 = FUN_0012bc70((uint *)(local_58._0_8_ + 4),(long)*(int *)(param_2 + 0x14))" identifier = (call_expression "FUN_0012bc70((uint *)(local_58._0_8_ + 4),(long)*(int *)(param_2 + 0x14))" identifier (argument_list "((uint *)(local_58._0_8_ + 4),(long)*(int *)(param_2 + 0x14))" ( (cast_expression "(uint *)(local_58._0_8_ + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_58._0_8_ + 4)" ( (binary_expression "local_58._0_8_ + 4" (field_expression "local_58._0_8_" identifier . field_identifier) + number_literal) ))) , (cast_expression "(long)*(int *)(param_2 + 0x14)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(param_2 + 0x14)" * (cast_expression "(int *)(param_2 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x14)" ( (binary_expression "param_2 + 0x14" identifier + number_literal) ))))) )))) ;) (expression_statement "iVar3 = iVar3 + local_58._8_4_;" (assignment_expression "iVar3 = iVar3 + local_58._8_4_" identifier = (binary_expression "iVar3 + local_58._8_4_" identifier + (field_expression "local_58._8_4_" identifier . field_identifier))) ;) (expression_statement "local_58._8_4_ = iVar3;" (assignment_expression "local_58._8_4_ = iVar3" (field_expression "local_58._8_4_" identifier . field_identifier) = identifier) ;) (expression_statement "iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,(long)*(int *)(param_2 + 0x10));" (assignment_expression "iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,(long)*(int *)(param_2 + 0x10))" identifier = (call_expression "FUN_0012bc70((long)iVar3 + local_58._0_8_,(long)*(int *)(param_2 + 0x10))" identifier (argument_list "((long)iVar3 + local_58._0_8_,(long)*(int *)(param_2 + 0x10))" ( (binary_expression "(long)iVar3 + local_58._0_8_" (cast_expression "(long)iVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (field_expression "local_58._0_8_" identifier . field_identifier)) , (cast_expression "(long)*(int *)(param_2 + 0x10)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(param_2 + 0x10)" * (cast_expression "(int *)(param_2 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) ))))) )))) ;) (expression_statement "iVar3 = iVar3 + local_58._8_4_;" (assignment_expression "iVar3 = iVar3 + local_58._8_4_" identifier = (binary_expression "iVar3 + local_58._8_4_" identifier + (field_expression "local_58._8_4_" identifier . field_identifier))) ;) (expression_statement "local_58._8_4_ = iVar3;" (assignment_expression "local_58._8_4_ = iVar3" (field_expression "local_58._8_4_" identifier . field_identifier) = identifier) ;) (expression_statement "iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,*(undefined8 *)(param_2 + 8));" (assignment_expression "iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,*(undefined8 *)(param_2 + 8))" identifier = (call_expression "FUN_0012bc70((long)iVar3 + local_58._0_8_,*(undefined8 *)(param_2 + 8))" identifier (argument_list "((long)iVar3 + local_58._0_8_,*(undefined8 *)(param_2 + 8))" ( (binary_expression "(long)iVar3 + local_58._0_8_" (cast_expression "(long)iVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (field_expression "local_58._0_8_" identifier . field_identifier)) , (pointer_expression "*(undefined8 *)(param_2 + 8)" * (cast_expression "(undefined8 *)(param_2 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) )))) )))) ;) (expression_statement "local_58._8_4_ = local_58._8_4_ + iVar3;" (assignment_expression "local_58._8_4_ = local_58._8_4_ + iVar3" (field_expression "local_58._8_4_" identifier . field_identifier) = (binary_expression "local_58._8_4_ + iVar3" (field_expression "local_58._8_4_" identifier . field_identifier) + identifier)) ;) })) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (expression_statement "piVar6 = (int *)(param_2 + 0x18);" (assignment_expression "piVar6 = (int *)(param_2 + 0x18)" identifier = (cast_expression "(int *)(param_2 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x18)" ( (binary_expression "param_2 + 0x18" identifier + number_literal) )))) ;) (if_statement "if (0 < *(int *)(param_2 + 0x14)) {\n    do {\n      FUN_0015be80(lVar1,local_58,(long)*piVar6);\n      FUN_0015be80(lVar1,local_58,(long)piVar6[1]);\n      if (0 < piVar6[1]) {\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));\n          lVar4 = lVar5;\n        } while ((int)lVar5 < piVar6[1]);\n      }\n      iVar3 = iVar3 + 1;\n      piVar6 = piVar6 + 4;\n    } while (iVar3 < *(int *)(param_2 + 0x14));\n  }" if (parenthesized_expression "(0 < *(int *)(param_2 + 0x14))" ( (binary_expression "0 < *(int *)(param_2 + 0x14)" number_literal < (pointer_expression "*(int *)(param_2 + 0x14)" * (cast_expression "(int *)(param_2 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x14)" ( (binary_expression "param_2 + 0x14" identifier + number_literal) ))))) )) (compound_statement "{\n    do {\n      FUN_0015be80(lVar1,local_58,(long)*piVar6);\n      FUN_0015be80(lVar1,local_58,(long)piVar6[1]);\n      if (0 < piVar6[1]) {\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));\n          lVar4 = lVar5;\n        } while ((int)lVar5 < piVar6[1]);\n      }\n      iVar3 = iVar3 + 1;\n      piVar6 = piVar6 + 4;\n    } while (iVar3 < *(int *)(param_2 + 0x14));\n  }" { (do_statement "do {\n      FUN_0015be80(lVar1,local_58,(long)*piVar6);\n      FUN_0015be80(lVar1,local_58,(long)piVar6[1]);\n      if (0 < piVar6[1]) {\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));\n          lVar4 = lVar5;\n        } while ((int)lVar5 < piVar6[1]);\n      }\n      iVar3 = iVar3 + 1;\n      piVar6 = piVar6 + 4;\n    } while (iVar3 < *(int *)(param_2 + 0x14));" do (compound_statement "{\n      FUN_0015be80(lVar1,local_58,(long)*piVar6);\n      FUN_0015be80(lVar1,local_58,(long)piVar6[1]);\n      if (0 < piVar6[1]) {\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));\n          lVar4 = lVar5;\n        } while ((int)lVar5 < piVar6[1]);\n      }\n      iVar3 = iVar3 + 1;\n      piVar6 = piVar6 + 4;\n    }" { (expression_statement "FUN_0015be80(lVar1,local_58,(long)*piVar6);" (call_expression "FUN_0015be80(lVar1,local_58,(long)*piVar6)" identifier (argument_list "(lVar1,local_58,(long)*piVar6)" ( identifier , identifier , (cast_expression "(long)*piVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*piVar6" * identifier)) ))) ;) (expression_statement "FUN_0015be80(lVar1,local_58,(long)piVar6[1]);" (call_expression "FUN_0015be80(lVar1,local_58,(long)piVar6[1])" identifier (argument_list "(lVar1,local_58,(long)piVar6[1])" ( identifier , identifier , (cast_expression "(long)piVar6[1]" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (subscript_expression "piVar6[1]" identifier [ number_literal ])) ))) ;) (if_statement "if (0 < piVar6[1]) {\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));\n          lVar4 = lVar5;\n        } while ((int)lVar5 < piVar6[1]);\n      }" if (parenthesized_expression "(0 < piVar6[1])" ( (binary_expression "0 < piVar6[1]" number_literal < (subscript_expression "piVar6[1]" identifier [ number_literal ])) )) (compound_statement "{\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));\n          lVar4 = lVar5;\n        } while ((int)lVar5 < piVar6[1]);\n      }" { (expression_statement "lVar4 = 0;" (assignment_expression "lVar4 = 0" identifier = number_literal) ;) (do_statement "do {\n          lVar5 = lVar4 + 1;\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));\n          lVar4 = lVar5;\n        } while ((int)lVar5 < piVar6[1]);" do (compound_statement "{\n          lVar5 = lVar4 + 1;\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));\n          lVar4 = lVar5;\n        }" { (expression_statement "lVar5 = lVar4 + 1;" (assignment_expression "lVar5 = lVar4 + 1" identifier = (binary_expression "lVar4 + 1" identifier + number_literal)) ;) (expression_statement "FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));" (call_expression "FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc))" identifier (argument_list "(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc))" ( identifier , identifier , (cast_expression "(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc)" * (cast_expression "(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(piVar6 + 2) + lVar4 * 0xc)" ( (binary_expression "*(long *)(piVar6 + 2) + lVar4 * 0xc" (pointer_expression "*(long *)(piVar6 + 2)" * (cast_expression "(long *)(piVar6 + 2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar6 + 2)" ( (binary_expression "piVar6 + 2" identifier + number_literal) )))) + (binary_expression "lVar4 * 0xc" identifier * number_literal)) ))))) ))) ;) (expression_statement "FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));" (call_expression "FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc))" identifier (argument_list "(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc))" ( identifier , identifier , (cast_expression "(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc)" * (cast_expression "(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc)" ( (binary_expression "*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc" (binary_expression "*(long *)(piVar6 + 2) + 4" (pointer_expression "*(long *)(piVar6 + 2)" * (cast_expression "(long *)(piVar6 + 2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar6 + 2)" ( (binary_expression "piVar6 + 2" identifier + number_literal) )))) + number_literal) + (binary_expression "lVar4 * 0xc" identifier * number_literal)) ))))) ))) ;) (expression_statement "FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));" (call_expression "FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc))" identifier (argument_list "(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc))" ( identifier , identifier , (cast_expression "(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc)" * (cast_expression "(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc)" ( (binary_expression "*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc" (binary_expression "*(long *)(piVar6 + 2) + 8" (pointer_expression "*(long *)(piVar6 + 2)" * (cast_expression "(long *)(piVar6 + 2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar6 + 2)" ( (binary_expression "piVar6 + 2" identifier + number_literal) )))) + number_literal) + (binary_expression "lVar4 * 0xc" identifier * number_literal)) ))))) ))) ;) (expression_statement "lVar4 = lVar5;" (assignment_expression "lVar4 = lVar5" identifier = identifier) ;) }) while (parenthesized_expression "((int)lVar5 < piVar6[1])" ( (binary_expression "(int)lVar5 < piVar6[1]" (cast_expression "(int)lVar5" ( (type_descriptor "int" primitive_type) ) identifier) < (subscript_expression "piVar6[1]" identifier [ number_literal ])) )) ;) })) (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (expression_statement "piVar6 = piVar6 + 4;" (assignment_expression "piVar6 = piVar6 + 4" identifier = (binary_expression "piVar6 + 4" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar3 < *(int *)(param_2 + 0x14))" ( (binary_expression "iVar3 < *(int *)(param_2 + 0x14)" identifier < (pointer_expression "*(int *)(param_2 + 0x14)" * (cast_expression "(int *)(param_2 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x14)" ( (binary_expression "param_2 + 0x14" identifier + number_literal) ))))) )) ;) })) (expression_statement "FUN_001bf990(param_1,10,local_58._0_8_,local_58._8_4_);" (call_expression "FUN_001bf990(param_1,10,local_58._0_8_,local_58._8_4_)" identifier (argument_list "(param_1,10,local_58._0_8_,local_58._8_4_)" ( identifier , number_literal , (field_expression "local_58._0_8_" identifier . field_identifier) , (field_expression "local_58._8_4_" identifier . field_identifier) ))) ;) (expression_statement "FUN_0011b430(local_58);" (call_expression "FUN_0011b430(local_58)" identifier (argument_list "(local_58)" ( 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;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration (sized_type_specifier long) IDENT) ))) (compound_statement { (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration (sized_type_specifier long) IDENT ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_array_declarator [ LIT ])) ) LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression IDENT + LIT) , LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (field_expression IDENT . field_identifier))) = (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))) ;) (expression_statement (assignment_expression (field_expression IDENT . field_identifier) = LIT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (field_expression IDENT . field_identifier) + LIT) ))) , (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (field_expression IDENT . field_identifier))) ;) (expression_statement (assignment_expression (field_expression IDENT . field_identifier) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (field_expression IDENT . field_identifier)) , (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (field_expression IDENT . field_identifier))) ;) (expression_statement (assignment_expression (field_expression IDENT . field_identifier) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (field_expression IDENT . field_identifier)) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )))) ;) (expression_statement (assignment_expression (field_expression IDENT . field_identifier) = (binary_expression (field_expression IDENT . field_identifier) + IDENT)) ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression * IDENT)) ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (subscript_expression IDENT [ LIT ])) ))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (subscript_expression IDENT [ LIT ])) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (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) )))) + (binary_expression IDENT * LIT)) ))))) ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (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) + (binary_expression IDENT * LIT)) ))))) ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (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) + (binary_expression IDENT * LIT)) ))))) ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (subscript_expression IDENT [ LIT ])) )) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT , (field_expression IDENT . field_identifier) , (field_expression IDENT . field_identifier) ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (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 ;) })))
(function_definition "void FUN_001bfff0(long *param_1,long param_2)\n\n{\n  long lVar1;\n  uint uVar2;\n  int iVar3;\n  long lVar4;\n  long lVar5;\n  int *piVar6;\n  long in_FS_OFFSET;\n  undefined1 local_58 [16];\n  long local_40;\n  \n  lVar1 = (long)param_1 + 0x34;\n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  local_58 = (undefined1  [16])0x0;\n  uVar2 = *(uint *)(*param_1 + 0x78);\n  iVar3 = FUN_0015aff0(lVar1,local_58,local_58 + 0xc,0x1f);\n  if (iVar3 == 0) {\n    if ((int)uVar2 < 0) {\n      uVar2 = 0;\n    }\n    *(uint *)local_58._0_8_ =\n         uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 << 0x18;\n    local_58._8_4_ = 4;\n    iVar3 = FUN_0012bc70((uint *)(local_58._0_8_ + 4),(long)*(int *)(param_2 + 0x14));\n    iVar3 = iVar3 + local_58._8_4_;\n    local_58._8_4_ = iVar3;\n    iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,(long)*(int *)(param_2 + 0x10));\n    iVar3 = iVar3 + local_58._8_4_;\n    local_58._8_4_ = iVar3;\n    iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,*(undefined8 *)(param_2 + 8));\n    local_58._8_4_ = local_58._8_4_ + iVar3;\n  }\n  iVar3 = 0;\n  piVar6 = (int *)(param_2 + 0x18);\n  if (0 < *(int *)(param_2 + 0x14)) {\n    do {\n      FUN_0015be80(lVar1,local_58,(long)*piVar6);\n      FUN_0015be80(lVar1,local_58,(long)piVar6[1]);\n      if (0 < piVar6[1]) {\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));\n          lVar4 = lVar5;\n        } while ((int)lVar5 < piVar6[1]);\n      }\n      iVar3 = iVar3 + 1;\n      piVar6 = piVar6 + 4;\n    } while (iVar3 < *(int *)(param_2 + 0x14));\n  }\n  FUN_001bf990(param_1,10,local_58._0_8_,local_58._8_4_);\n  FUN_0011b430(local_58);\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_001bfff0(long *param_1,long param_2)" (identifier "FUN_001bfff0") (parameter_list "(long *param_1,long param_2)" (( "(") (parameter_declaration "long *param_1" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "long param_2" (sized_type_specifier "long" (long "long")) (identifier "param_2")) () ")"))) (compound_statement "{\n  long lVar1;\n  uint uVar2;\n  int iVar3;\n  long lVar4;\n  long lVar5;\n  int *piVar6;\n  long in_FS_OFFSET;\n  undefined1 local_58 [16];\n  long local_40;\n  \n  lVar1 = (long)param_1 + 0x34;\n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  local_58 = (undefined1  [16])0x0;\n  uVar2 = *(uint *)(*param_1 + 0x78);\n  iVar3 = FUN_0015aff0(lVar1,local_58,local_58 + 0xc,0x1f);\n  if (iVar3 == 0) {\n    if ((int)uVar2 < 0) {\n      uVar2 = 0;\n    }\n    *(uint *)local_58._0_8_ =\n         uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 << 0x18;\n    local_58._8_4_ = 4;\n    iVar3 = FUN_0012bc70((uint *)(local_58._0_8_ + 4),(long)*(int *)(param_2 + 0x14));\n    iVar3 = iVar3 + local_58._8_4_;\n    local_58._8_4_ = iVar3;\n    iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,(long)*(int *)(param_2 + 0x10));\n    iVar3 = iVar3 + local_58._8_4_;\n    local_58._8_4_ = iVar3;\n    iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,*(undefined8 *)(param_2 + 8));\n    local_58._8_4_ = local_58._8_4_ + iVar3;\n  }\n  iVar3 = 0;\n  piVar6 = (int *)(param_2 + 0x18);\n  if (0 < *(int *)(param_2 + 0x14)) {\n    do {\n      FUN_0015be80(lVar1,local_58,(long)*piVar6);\n      FUN_0015be80(lVar1,local_58,(long)piVar6[1]);\n      if (0 < piVar6[1]) {\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));\n          lVar4 = lVar5;\n        } while ((int)lVar5 < piVar6[1]);\n      }\n      iVar3 = iVar3 + 1;\n      piVar6 = piVar6 + 4;\n    } while (iVar3 < *(int *)(param_2 + 0x14));\n  }\n  FUN_001bf990(param_1,10,local_58._0_8_,local_58._8_4_);\n  FUN_0011b430(local_58);\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }\n  return;\n}" ({ "{") (declaration "long lVar1;" (sized_type_specifier "long" (long "long")) (identifier "lVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "long lVar4;" (sized_type_specifier "long" (long "long")) (identifier "lVar4") (; ";")) (declaration "long lVar5;" (sized_type_specifier "long" (long "long")) (identifier "lVar5") (; ";")) (declaration "int *piVar6;" (primitive_type "int") (pointer_declarator "*piVar6" (* "*") (identifier "piVar6")) (; ";")) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" (long "long")) (identifier "in_FS_OFFSET") (; ";")) (declaration "undefined1 local_58 [16];" (type_identifier "undefined1") (array_declarator "local_58 [16]" (identifier "local_58") ([ "[") (number_literal "16") (] "]")) (; ";")) (declaration "long local_40;" (sized_type_specifier "long" (long "long")) (identifier "local_40") (; ";")) (expression_statement "lVar1 = (long)param_1 + 0x34;" (assignment_expression "lVar1 = (long)param_1 + 0x34" (identifier "lVar1") (= "=") (binary_expression "(long)param_1 + 0x34" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (number_literal "0x34"))) (; ";")) (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")) () ")"))))) (; ";")) (expression_statement "local_58 = (undefined1  [16])0x0;" (assignment_expression "local_58 = (undefined1  [16])0x0" (identifier "local_58") (= "=") (cast_expression "(undefined1  [16])0x0" (( "(") (type_descriptor "undefined1  [16]" (type_identifier "undefined1") (abstract_array_declarator "[16]" ([ "[") (number_literal "16") (] "]"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "uVar2 = *(uint *)(*param_1 + 0x78);" (assignment_expression "uVar2 = *(uint *)(*param_1 + 0x78)" (identifier "uVar2") (= "=") (pointer_expression "*(uint *)(*param_1 + 0x78)" (* "*") (cast_expression "(uint *)(*param_1 + 0x78)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + 0x78)" (( "(") (binary_expression "*param_1 + 0x78" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x78")) () ")"))))) (; ";")) (expression_statement "iVar3 = FUN_0015aff0(lVar1,local_58,local_58 + 0xc,0x1f);" (assignment_expression "iVar3 = FUN_0015aff0(lVar1,local_58,local_58 + 0xc,0x1f)" (identifier "iVar3") (= "=") (call_expression "FUN_0015aff0(lVar1,local_58,local_58 + 0xc,0x1f)" (identifier "FUN_0015aff0") (argument_list "(lVar1,local_58,local_58 + 0xc,0x1f)" (( "(") (identifier "lVar1") (, ",") (identifier "local_58") (, ",") (binary_expression "local_58 + 0xc" (identifier "local_58") (+ "+") (number_literal "0xc")) (, ",") (number_literal "0x1f") () ")")))) (; ";")) (if_statement "if (iVar3 == 0) {\n    if ((int)uVar2 < 0) {\n      uVar2 = 0;\n    }\n    *(uint *)local_58._0_8_ =\n         uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 << 0x18;\n    local_58._8_4_ = 4;\n    iVar3 = FUN_0012bc70((uint *)(local_58._0_8_ + 4),(long)*(int *)(param_2 + 0x14));\n    iVar3 = iVar3 + local_58._8_4_;\n    local_58._8_4_ = iVar3;\n    iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,(long)*(int *)(param_2 + 0x10));\n    iVar3 = iVar3 + local_58._8_4_;\n    local_58._8_4_ = iVar3;\n    iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,*(undefined8 *)(param_2 + 8));\n    local_58._8_4_ = local_58._8_4_ + iVar3;\n  }" (if "if") (parenthesized_expression "(iVar3 == 0)" (( "(") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    if ((int)uVar2 < 0) {\n      uVar2 = 0;\n    }\n    *(uint *)local_58._0_8_ =\n         uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 << 0x18;\n    local_58._8_4_ = 4;\n    iVar3 = FUN_0012bc70((uint *)(local_58._0_8_ + 4),(long)*(int *)(param_2 + 0x14));\n    iVar3 = iVar3 + local_58._8_4_;\n    local_58._8_4_ = iVar3;\n    iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,(long)*(int *)(param_2 + 0x10));\n    iVar3 = iVar3 + local_58._8_4_;\n    local_58._8_4_ = iVar3;\n    iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,*(undefined8 *)(param_2 + 8));\n    local_58._8_4_ = local_58._8_4_ + iVar3;\n  }" ({ "{") (if_statement "if ((int)uVar2 < 0) {\n      uVar2 = 0;\n    }" (if "if") (parenthesized_expression "((int)uVar2 < 0)" (( "(") (binary_expression "(int)uVar2 < 0" (cast_expression "(int)uVar2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar2")) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n      uVar2 = 0;\n    }" ({ "{") (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" (identifier "uVar2") (= "=") (number_literal "0")) (; ";")) (} "}"))) (expression_statement "*(uint *)local_58._0_8_ =\n         uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 << 0x18;" (assignment_expression "*(uint *)local_58._0_8_ =\n         uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 << 0x18" (pointer_expression "*(uint *)local_58._0_8_" (* "*") (cast_expression "(uint *)local_58._0_8_" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (field_expression "local_58._0_8_" (identifier "local_58") (. ".") (field_identifier "_0_8_")))) (= "=") (binary_expression "uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 << 0x18" (binary_expression "uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8" (binary_expression "uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8" (binary_expression "uVar2 >> 0x18" (identifier "uVar2") (>> ">>") (number_literal "0x18")) (| "|") (binary_expression "(uVar2 & 0xff0000) >> 8" (parenthesized_expression "(uVar2 & 0xff0000)" (( "(") (binary_expression "uVar2 & 0xff0000" (identifier "uVar2") (& "&") (number_literal "0xff0000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar2 & 0xff00) << 8" (parenthesized_expression "(uVar2 & 0xff00)" (( "(") (binary_expression "uVar2 & 0xff00" (identifier "uVar2") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "uVar2 << 0x18" (identifier "uVar2") (<< "<<") (number_literal "0x18")))) (; ";")) (expression_statement "local_58._8_4_ = 4;" (assignment_expression "local_58._8_4_ = 4" (field_expression "local_58._8_4_" (identifier "local_58") (. ".") (field_identifier "_8_4_")) (= "=") (number_literal "4")) (; ";")) (expression_statement "iVar3 = FUN_0012bc70((uint *)(local_58._0_8_ + 4),(long)*(int *)(param_2 + 0x14));" (assignment_expression "iVar3 = FUN_0012bc70((uint *)(local_58._0_8_ + 4),(long)*(int *)(param_2 + 0x14))" (identifier "iVar3") (= "=") (call_expression "FUN_0012bc70((uint *)(local_58._0_8_ + 4),(long)*(int *)(param_2 + 0x14))" (identifier "FUN_0012bc70") (argument_list "((uint *)(local_58._0_8_ + 4),(long)*(int *)(param_2 + 0x14))" (( "(") (cast_expression "(uint *)(local_58._0_8_ + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_58._0_8_ + 4)" (( "(") (binary_expression "local_58._0_8_ + 4" (field_expression "local_58._0_8_" (identifier "local_58") (. ".") (field_identifier "_0_8_")) (+ "+") (number_literal "4")) () ")"))) (, ",") (cast_expression "(long)*(int *)(param_2 + 0x14)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "*(int *)(param_2 + 0x14)" (* "*") (cast_expression "(int *)(param_2 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x14)" (( "(") (binary_expression "param_2 + 0x14" (identifier "param_2") (+ "+") (number_literal "0x14")) () ")"))))) () ")")))) (; ";")) (expression_statement "iVar3 = iVar3 + local_58._8_4_;" (assignment_expression "iVar3 = iVar3 + local_58._8_4_" (identifier "iVar3") (= "=") (binary_expression "iVar3 + local_58._8_4_" (identifier "iVar3") (+ "+") (field_expression "local_58._8_4_" (identifier "local_58") (. ".") (field_identifier "_8_4_")))) (; ";")) (expression_statement "local_58._8_4_ = iVar3;" (assignment_expression "local_58._8_4_ = iVar3" (field_expression "local_58._8_4_" (identifier "local_58") (. ".") (field_identifier "_8_4_")) (= "=") (identifier "iVar3")) (; ";")) (expression_statement "iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,(long)*(int *)(param_2 + 0x10));" (assignment_expression "iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,(long)*(int *)(param_2 + 0x10))" (identifier "iVar3") (= "=") (call_expression "FUN_0012bc70((long)iVar3 + local_58._0_8_,(long)*(int *)(param_2 + 0x10))" (identifier "FUN_0012bc70") (argument_list "((long)iVar3 + local_58._0_8_,(long)*(int *)(param_2 + 0x10))" (( "(") (binary_expression "(long)iVar3 + local_58._0_8_" (cast_expression "(long)iVar3" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "iVar3")) (+ "+") (field_expression "local_58._0_8_" (identifier "local_58") (. ".") (field_identifier "_0_8_"))) (, ",") (cast_expression "(long)*(int *)(param_2 + 0x10)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "*(int *)(param_2 + 0x10)" (* "*") (cast_expression "(int *)(param_2 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x10)" (( "(") (binary_expression "param_2 + 0x10" (identifier "param_2") (+ "+") (number_literal "0x10")) () ")"))))) () ")")))) (; ";")) (expression_statement "iVar3 = iVar3 + local_58._8_4_;" (assignment_expression "iVar3 = iVar3 + local_58._8_4_" (identifier "iVar3") (= "=") (binary_expression "iVar3 + local_58._8_4_" (identifier "iVar3") (+ "+") (field_expression "local_58._8_4_" (identifier "local_58") (. ".") (field_identifier "_8_4_")))) (; ";")) (expression_statement "local_58._8_4_ = iVar3;" (assignment_expression "local_58._8_4_ = iVar3" (field_expression "local_58._8_4_" (identifier "local_58") (. ".") (field_identifier "_8_4_")) (= "=") (identifier "iVar3")) (; ";")) (expression_statement "iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,*(undefined8 *)(param_2 + 8));" (assignment_expression "iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,*(undefined8 *)(param_2 + 8))" (identifier "iVar3") (= "=") (call_expression "FUN_0012bc70((long)iVar3 + local_58._0_8_,*(undefined8 *)(param_2 + 8))" (identifier "FUN_0012bc70") (argument_list "((long)iVar3 + local_58._0_8_,*(undefined8 *)(param_2 + 8))" (( "(") (binary_expression "(long)iVar3 + local_58._0_8_" (cast_expression "(long)iVar3" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "iVar3")) (+ "+") (field_expression "local_58._0_8_" (identifier "local_58") (. ".") (field_identifier "_0_8_"))) (, ",") (pointer_expression "*(undefined8 *)(param_2 + 8)" (* "*") (cast_expression "(undefined8 *)(param_2 + 8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 8)" (( "(") (binary_expression "param_2 + 8" (identifier "param_2") (+ "+") (number_literal "8")) () ")")))) () ")")))) (; ";")) (expression_statement "local_58._8_4_ = local_58._8_4_ + iVar3;" (assignment_expression "local_58._8_4_ = local_58._8_4_ + iVar3" (field_expression "local_58._8_4_" (identifier "local_58") (. ".") (field_identifier "_8_4_")) (= "=") (binary_expression "local_58._8_4_ + iVar3" (field_expression "local_58._8_4_" (identifier "local_58") (. ".") (field_identifier "_8_4_")) (+ "+") (identifier "iVar3"))) (; ";")) (} "}"))) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" (identifier "iVar3") (= "=") (number_literal "0")) (; ";")) (expression_statement "piVar6 = (int *)(param_2 + 0x18);" (assignment_expression "piVar6 = (int *)(param_2 + 0x18)" (identifier "piVar6") (= "=") (cast_expression "(int *)(param_2 + 0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x18)" (( "(") (binary_expression "param_2 + 0x18" (identifier "param_2") (+ "+") (number_literal "0x18")) () ")")))) (; ";")) (if_statement "if (0 < *(int *)(param_2 + 0x14)) {\n    do {\n      FUN_0015be80(lVar1,local_58,(long)*piVar6);\n      FUN_0015be80(lVar1,local_58,(long)piVar6[1]);\n      if (0 < piVar6[1]) {\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));\n          lVar4 = lVar5;\n        } while ((int)lVar5 < piVar6[1]);\n      }\n      iVar3 = iVar3 + 1;\n      piVar6 = piVar6 + 4;\n    } while (iVar3 < *(int *)(param_2 + 0x14));\n  }" (if "if") (parenthesized_expression "(0 < *(int *)(param_2 + 0x14))" (( "(") (binary_expression "0 < *(int *)(param_2 + 0x14)" (number_literal "0") (< "<") (pointer_expression "*(int *)(param_2 + 0x14)" (* "*") (cast_expression "(int *)(param_2 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x14)" (( "(") (binary_expression "param_2 + 0x14" (identifier "param_2") (+ "+") (number_literal "0x14")) () ")"))))) () ")")) (compound_statement "{\n    do {\n      FUN_0015be80(lVar1,local_58,(long)*piVar6);\n      FUN_0015be80(lVar1,local_58,(long)piVar6[1]);\n      if (0 < piVar6[1]) {\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));\n          lVar4 = lVar5;\n        } while ((int)lVar5 < piVar6[1]);\n      }\n      iVar3 = iVar3 + 1;\n      piVar6 = piVar6 + 4;\n    } while (iVar3 < *(int *)(param_2 + 0x14));\n  }" ({ "{") (do_statement "do {\n      FUN_0015be80(lVar1,local_58,(long)*piVar6);\n      FUN_0015be80(lVar1,local_58,(long)piVar6[1]);\n      if (0 < piVar6[1]) {\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));\n          lVar4 = lVar5;\n        } while ((int)lVar5 < piVar6[1]);\n      }\n      iVar3 = iVar3 + 1;\n      piVar6 = piVar6 + 4;\n    } while (iVar3 < *(int *)(param_2 + 0x14));" (do "do") (compound_statement "{\n      FUN_0015be80(lVar1,local_58,(long)*piVar6);\n      FUN_0015be80(lVar1,local_58,(long)piVar6[1]);\n      if (0 < piVar6[1]) {\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));\n          lVar4 = lVar5;\n        } while ((int)lVar5 < piVar6[1]);\n      }\n      iVar3 = iVar3 + 1;\n      piVar6 = piVar6 + 4;\n    }" ({ "{") (expression_statement "FUN_0015be80(lVar1,local_58,(long)*piVar6);" (call_expression "FUN_0015be80(lVar1,local_58,(long)*piVar6)" (identifier "FUN_0015be80") (argument_list "(lVar1,local_58,(long)*piVar6)" (( "(") (identifier "lVar1") (, ",") (identifier "local_58") (, ",") (cast_expression "(long)*piVar6" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "*piVar6" (* "*") (identifier "piVar6"))) () ")"))) (; ";")) (expression_statement "FUN_0015be80(lVar1,local_58,(long)piVar6[1]);" (call_expression "FUN_0015be80(lVar1,local_58,(long)piVar6[1])" (identifier "FUN_0015be80") (argument_list "(lVar1,local_58,(long)piVar6[1])" (( "(") (identifier "lVar1") (, ",") (identifier "local_58") (, ",") (cast_expression "(long)piVar6[1]" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (subscript_expression "piVar6[1]" (identifier "piVar6") ([ "[") (number_literal "1") (] "]"))) () ")"))) (; ";")) (if_statement "if (0 < piVar6[1]) {\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));\n          lVar4 = lVar5;\n        } while ((int)lVar5 < piVar6[1]);\n      }" (if "if") (parenthesized_expression "(0 < piVar6[1])" (( "(") (binary_expression "0 < piVar6[1]" (number_literal "0") (< "<") (subscript_expression "piVar6[1]" (identifier "piVar6") ([ "[") (number_literal "1") (] "]"))) () ")")) (compound_statement "{\n        lVar4 = 0;\n        do {\n          lVar5 = lVar4 + 1;\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));\n          lVar4 = lVar5;\n        } while ((int)lVar5 < piVar6[1]);\n      }" ({ "{") (expression_statement "lVar4 = 0;" (assignment_expression "lVar4 = 0" (identifier "lVar4") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n          lVar5 = lVar4 + 1;\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));\n          lVar4 = lVar5;\n        } while ((int)lVar5 < piVar6[1]);" (do "do") (compound_statement "{\n          lVar5 = lVar4 + 1;\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));\n          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));\n          lVar4 = lVar5;\n        }" ({ "{") (expression_statement "lVar5 = lVar4 + 1;" (assignment_expression "lVar5 = lVar4 + 1" (identifier "lVar5") (= "=") (binary_expression "lVar4 + 1" (identifier "lVar4") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));" (call_expression "FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc))" (identifier "FUN_0015be80") (argument_list "(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc))" (( "(") (identifier "lVar1") (, ",") (identifier "local_58") (, ",") (cast_expression "(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc)" (* "*") (cast_expression "(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(piVar6 + 2) + lVar4 * 0xc)" (( "(") (binary_expression "*(long *)(piVar6 + 2) + lVar4 * 0xc" (pointer_expression "*(long *)(piVar6 + 2)" (* "*") (cast_expression "(long *)(piVar6 + 2)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(piVar6 + 2)" (( "(") (binary_expression "piVar6 + 2" (identifier "piVar6") (+ "+") (number_literal "2")) () ")")))) (+ "+") (binary_expression "lVar4 * 0xc" (identifier "lVar4") (* "*") (number_literal "0xc"))) () ")"))))) () ")"))) (; ";")) (expression_statement "FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));" (call_expression "FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc))" (identifier "FUN_0015be80") (argument_list "(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc))" (( "(") (identifier "lVar1") (, ",") (identifier "local_58") (, ",") (cast_expression "(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc)" (* "*") (cast_expression "(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc)" (( "(") (binary_expression "*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc" (binary_expression "*(long *)(piVar6 + 2) + 4" (pointer_expression "*(long *)(piVar6 + 2)" (* "*") (cast_expression "(long *)(piVar6 + 2)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(piVar6 + 2)" (( "(") (binary_expression "piVar6 + 2" (identifier "piVar6") (+ "+") (number_literal "2")) () ")")))) (+ "+") (number_literal "4")) (+ "+") (binary_expression "lVar4 * 0xc" (identifier "lVar4") (* "*") (number_literal "0xc"))) () ")"))))) () ")"))) (; ";")) (expression_statement "FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));" (call_expression "FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc))" (identifier "FUN_0015be80") (argument_list "(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc))" (( "(") (identifier "lVar1") (, ",") (identifier "local_58") (, ",") (cast_expression "(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc)" (* "*") (cast_expression "(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc)" (( "(") (binary_expression "*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc" (binary_expression "*(long *)(piVar6 + 2) + 8" (pointer_expression "*(long *)(piVar6 + 2)" (* "*") (cast_expression "(long *)(piVar6 + 2)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(piVar6 + 2)" (( "(") (binary_expression "piVar6 + 2" (identifier "piVar6") (+ "+") (number_literal "2")) () ")")))) (+ "+") (number_literal "8")) (+ "+") (binary_expression "lVar4 * 0xc" (identifier "lVar4") (* "*") (number_literal "0xc"))) () ")"))))) () ")"))) (; ";")) (expression_statement "lVar4 = lVar5;" (assignment_expression "lVar4 = lVar5" (identifier "lVar4") (= "=") (identifier "lVar5")) (; ";")) (} "}")) (while "while") (parenthesized_expression "((int)lVar5 < piVar6[1])" (( "(") (binary_expression "(int)lVar5 < piVar6[1]" (cast_expression "(int)lVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "lVar5")) (< "<") (subscript_expression "piVar6[1]" (identifier "piVar6") ([ "[") (number_literal "1") (] "]"))) () ")")) (; ";")) (} "}"))) (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" (identifier "iVar3") (= "=") (binary_expression "iVar3 + 1" (identifier "iVar3") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "piVar6 = piVar6 + 4;" (assignment_expression "piVar6 = piVar6 + 4" (identifier "piVar6") (= "=") (binary_expression "piVar6 + 4" (identifier "piVar6") (+ "+") (number_literal "4"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar3 < *(int *)(param_2 + 0x14))" (( "(") (binary_expression "iVar3 < *(int *)(param_2 + 0x14)" (identifier "iVar3") (< "<") (pointer_expression "*(int *)(param_2 + 0x14)" (* "*") (cast_expression "(int *)(param_2 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x14)" (( "(") (binary_expression "param_2 + 0x14" (identifier "param_2") (+ "+") (number_literal "0x14")) () ")"))))) () ")")) (; ";")) (} "}"))) (expression_statement "FUN_001bf990(param_1,10,local_58._0_8_,local_58._8_4_);" (call_expression "FUN_001bf990(param_1,10,local_58._0_8_,local_58._8_4_)" (identifier "FUN_001bf990") (argument_list "(param_1,10,local_58._0_8_,local_58._8_4_)" (( "(") (identifier "param_1") (, ",") (number_literal "10") (, ",") (field_expression "local_58._0_8_" (identifier "local_58") (. ".") (field_identifier "_0_8_")) (, ",") (field_expression "local_58._8_4_" (identifier "local_58") (. ".") (field_identifier "_8_4_")) () ")"))) (; ";")) (expression_statement "FUN_0011b430(local_58);" (call_expression "FUN_0011b430(local_58)" (identifier "FUN_0011b430") (argument_list "(local_58)" (( "(") (identifier "local_58") () ")"))) (; ";")) (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;" (return "return") (; ";")) (} "}")))

void function_1(type_1 *p,type_2 *pStruct)

{
  int *pRc;
  type_3 var_4;
  long var_11;
  int var_3;
  long var_7;
  long lVar5;
  type_4 *var_8;
  long var_1;
  type_5 buf;
  
  pRc = &p->rc;
  var_11 = *(long *)(var_1 + 0x28);
  buf.p = (type_6 *)0x0;
  buf.n = 0;
  buf.nSpace = 0;
  var_4 = p->pConfig->iCookie;
  var_3 = var_2(pRc,&buf,(int)&buf + 0xc,(type_5 *)0x1f);
  if (var_3 == 0) {
    if ((int)var_4 < 0) {
      var_4 = 0;
    }
    *(type_3 *)buf.p = var_4 >> 0x18 | (var_4 & 0xff0000) >> 8 | (var_4 & 0xff00) << 8 | var_4 << 0x18
    ;
    buf.n = 4;
    var_3 = var_5(buf.p + 4,(long)pStruct->nLevel);
    var_3 = var_3 + buf.n;
    buf.n = var_3;
    var_3 = var_5(buf.p + var_3,(long)pStruct->nSegment);
    var_3 = var_3 + buf.n;
    buf.n = var_3;
    var_3 = var_5(buf.p + var_3,pStruct->nWriteCounter);
    buf.n = buf.n + var_3;
  }
  var_3 = 0;
  var_8 = pStruct->aLevel;
  if (0 < pStruct->nLevel) {
    do {
      var_6(pRc,&buf,(long)var_8->nMerge);
      var_6(pRc,&buf,(long)var_8->nSeg);
      if (0 < var_8->nSeg) {
        var_7 = 0;
        do {
          lVar5 = var_7 + 1;
          var_6(pRc,&buf,(long)var_8->aSeg[var_7].iSegid);
          var_6(pRc,&buf,(long)var_8->aSeg[var_7].pgnoFirst);
          var_6(pRc,&buf,(long)var_8->aSeg[var_7].pgnoLast);
          var_7 = lVar5;
        } while ((int)lVar5 < var_8->nSeg);
      }
      var_3 = var_3 + 1;
      var_8 = var_8 + 1;
    } while (var_3 < pStruct->nLevel);
  }
  var_9(p,10,buf.p,buf.n);
  var_10(&buf);
  if (var_11 != *(long *)(var_1 + 0x28)) {
                    /* WARNING: Subroutine does not return */
    var_12();
  }
  return;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (sized_type_specifier) declarator: (identifier)))) body: (compound_statement (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator 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: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal)))) (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))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_array_declarator size: (number_literal))) value: (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: (identifier)) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (binary_expression left: (identifier) right: (number_literal)) (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (field_expression argument: (identifier) field: (field_identifier)))) right: (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))))) (expression_statement (assignment_expression left: (field_expression argument: (identifier) field: (field_identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (field_expression argument: (identifier) field: (field_identifier)) right: (number_literal)))) (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (field_expression argument: (identifier) field: (field_identifier))))) (expression_statement (assignment_expression left: (field_expression argument: (identifier) field: (field_identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (field_expression argument: (identifier) field: (field_identifier))) (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (field_expression argument: (identifier) field: (field_identifier))))) (expression_statement (assignment_expression left: (field_expression argument: (identifier) field: (field_identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (field_expression argument: (identifier) field: (field_identifier))) (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: (field_expression argument: (identifier) field: (field_identifier)) right: (binary_expression left: (field_expression argument: (identifier) field: (field_identifier)) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (pointer_expression argument: (identifier)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (subscript_expression argument: (identifier) index: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (subscript_expression argument: (identifier) index: (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: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) 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: (binary_expression left: (identifier) right: (number_literal)))))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) 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: (binary_expression left: (identifier) right: (number_literal)))))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) 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: (binary_expression left: (identifier) right: (number_literal)))))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (subscript_expression argument: (identifier) index: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (field_expression argument: (identifier) field: (field_identifier)) (field_expression argument: (identifier) field: (field_identifier))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (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))))

void MASKED(long *param_1,long param_2)

{
  long lVar1;
  uint uVar2;
  int iVar3;
  long lVar4;
  long lVar5;
  int *piVar6;
  long in_FS_OFFSET;
  undefined1 local_58 [16];
  long local_40;
  
  lVar1 = (long)param_1 + 0x34;
  local_40 = *(long *)(in_FS_OFFSET + 0x28);
  local_58 = (undefined1  [16])0x0;
  uVar2 = *(uint *)(*param_1 + 0x78);
  iVar3 = FUN_0015aff0(lVar1,local_58,local_58 + 0xc,0x1f);
  if (iVar3 == 0) {
    if ((int)uVar2 < 0) {
      uVar2 = 0;
    }
    *(uint *)local_58._0_8_ =
         uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 << 0x18;
    local_58._8_4_ = 4;
    iVar3 = FUN_0012bc70((uint *)(local_58._0_8_ + 4),(long)*(int *)(param_2 + 0x14));
    iVar3 = iVar3 + local_58._8_4_;
    local_58._8_4_ = iVar3;
    iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,(long)*(int *)(param_2 + 0x10));
    iVar3 = iVar3 + local_58._8_4_;
    local_58._8_4_ = iVar3;
    iVar3 = FUN_0012bc70((long)iVar3 + local_58._0_8_,*(undefined8 *)(param_2 + 8));
    local_58._8_4_ = local_58._8_4_ + iVar3;
  }
  iVar3 = 0;
  piVar6 = (int *)(param_2 + 0x18);
  if (0 < *(int *)(param_2 + 0x14)) {
    do {
      FUN_0015be80(lVar1,local_58,(long)*piVar6);
      FUN_0015be80(lVar1,local_58,(long)piVar6[1]);
      if (0 < piVar6[1]) {
        lVar4 = 0;
        do {
          lVar5 = lVar4 + 1;
          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + lVar4 * 0xc));
          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 4 + lVar4 * 0xc));
          FUN_0015be80(lVar1,local_58,(long)*(int *)(*(long *)(piVar6 + 2) + 8 + lVar4 * 0xc));
          lVar4 = lVar5;
        } while ((int)lVar5 < piVar6[1]);
      }
      iVar3 = iVar3 + 1;
      piVar6 = piVar6 + 4;
    } while (iVar3 < *(int *)(param_2 + 0x14));
  }
  FUN_001bf990(param_1,10,local_58._0_8_,local_58._8_4_);
  FUN_0011b430(local_58);
  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return;
}

