
int __regparm3 rebuildPage(CellArray *pCArray,int iFirst,int nCell,MemPage *pPg)

{
  int iVar1;
  u8 *puVar2;
  char *pcVar3;
  u8 *puVar4;
  int iVar5;
  int iVar6;
  uint uVar7;
  char *__dest;
  u8 *__src;
  u16 extraout_CX;
  u8 *puVar8;
  u8 uVar9;
  uint uVar10;
  u8 uVar11;
  int iVar12;
  u8 *puVar13;
  u8 *puVar14;
  size_t local_64;
  int local_5c;
  int local_50;
  u8 *local_44;
  
  iVar6 = __x86_get_pc_thunk_di();
  iVar12 = nCell + iFirst;
  puVar2 = pPg->aData;
  local_64 = pPg->pBt->usableSize;
  puVar8 = puVar2 + local_64;
  uVar10 = (uint)pPg->hdrOffset;
  pcVar3 = pPg->pBt->pPager->pTmpSpace;
  puVar4 = pPg->aCellIdx;
  uVar7 = (uint)CONCAT11(puVar2[uVar10 + 5],puVar2[uVar10 + 6]);
  __dest = pcVar3;
  puVar13 = puVar2;
  if (uVar7 <= local_64) {
    local_64 = local_64 - uVar7;
    __dest = pcVar3 + uVar7;
    puVar13 = puVar2 + uVar7;
  }
  memcpy(__dest,puVar13,local_64);
  if (iFirst < *(int *)(iVar6 + 0x28)) {
    local_50 = 0;
  }
  else {
    local_50 = 0;
    do {
      local_50 = local_50 + 1;
      if (iFirst < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;
    } while (local_50 != 6);
  }
  local_44 = *(u8 **)(iVar6 + 0x10 + local_50 * 4);
  local_5c = iFirst * 4;
  iVar5 = iFirst * 2;
  puVar13 = puVar8;
  puVar14 = puVar4;
  do {
    __src = *(u8 **)(*(int *)(iVar6 + 8) + local_5c);
    uVar7 = (uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc));
    if ((__src < puVar2) || (puVar8 <= __src)) {
      if ((__src < local_44) && (local_44 < __src + uVar7)) {
        iVar6 = 0x11724;
        goto LAB_000395cd;
      }
    }
    else {
      if (puVar8 < __src + uVar7) {
        iVar6 = sqlite3CorruptError(0x1171f);
        return iVar6;
      }
      __src = (u8 *)(pcVar3 + ((int)__src - (int)puVar2));
    }
    puVar13 = puVar13 + -uVar7;
    uVar9 = (u8)((int)puVar13 - (int)puVar2);
    puVar14[1] = uVar9;
    uVar11 = (u8)((uint)((int)puVar13 - (int)puVar2) >> 8);
    *puVar14 = uVar11;
    if (puVar13 < puVar14 + 2) {
      iVar6 = 0x1172a;
LAB_000395cd:
      iVar6 = sqlite3CorruptError(iVar6);
      return iVar6;
    }
    iFirst = iFirst + 1;
    memcpy(puVar13,__src,uVar7);
    if (iVar12 <= iFirst) {
      pPg->nOverflow = '\0';
      pPg->nCell = extraout_CX;
      puVar2[uVar10 + 1] = '\0';
      puVar2[uVar10 + 2] = '\0';
      puVar2[uVar10 + 3] = *(u8 *)((int)&pPg->nCell + 1);
      puVar2[uVar10 + 4] = (u8)pPg->nCell;
      puVar2[uVar10 + 5] = uVar11;
      puVar2[uVar10 + 6] = uVar9;
      puVar2[uVar10 + 7] = '\0';
      return 0;
    }
    iVar1 = iVar6 + local_50 * 4;
    if (*(int *)(iVar1 + 0x28) <= iFirst) {
      local_44 = *(u8 **)(iVar1 + 0x14);
      local_50 = local_50 + 1;
    }
    local_5c = local_5c + 4;
    puVar14 = puVar14 + 2;
  } while( true );
}



undefined4 __regparm3 FUN_000393d0(undefined4 param_1,int param_2,int param_3,int param_4)

{
  int iVar1;
  undefined1 *puVar2;
  void *pvVar3;
  undefined1 *puVar4;
  int iVar5;
  int iVar6;
  uint uVar7;
  void *__dest;
  undefined1 *__src;
  undefined4 uVar8;
  undefined2 extraout_CX;
  undefined1 *puVar9;
  undefined1 uVar10;
  uint uVar11;
  undefined1 uVar12;
  undefined1 *puVar13;
  undefined1 *puVar14;
  size_t local_64;
  int local_5c;
  int local_50;
  undefined1 *local_44;
  
  iVar6 = FUN_000a94ff();
  param_3 = param_3 + param_2;
  puVar2 = *(undefined1 **)(param_4 + 0x38);
  local_64 = (*(int **)(param_4 + 0x34))[10];
  puVar9 = puVar2 + local_64;
  uVar11 = (uint)*(byte *)(param_4 + 9);
  pvVar3 = *(void **)(**(int **)(param_4 + 0x34) + 0xcc);
  puVar4 = *(undefined1 **)(param_4 + 0x40);
  uVar7 = (uint)CONCAT11(puVar2[uVar11 + 5],puVar2[uVar11 + 6]);
  __dest = pvVar3;
  puVar13 = puVar2;
  if (uVar7 <= local_64) {
    local_64 = local_64 - uVar7;
    __dest = (void *)(uVar7 + (int)pvVar3);
    puVar13 = puVar2 + uVar7;
  }
  memcpy(__dest,puVar13,local_64);
  if (param_2 < *(int *)(iVar6 + 0x28)) {
    local_50 = 0;
  }
  else {
    local_50 = 0;
    do {
      local_50 = local_50 + 1;
      if (param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;
    } while (local_50 != 6);
  }
  local_44 = *(undefined1 **)(iVar6 + 0x10 + local_50 * 4);
  local_5c = param_2 * 4;
  iVar5 = param_2 * 2;
  puVar13 = puVar9;
  puVar14 = puVar4;
  while( true ) {
    __src = *(undefined1 **)(*(int *)(iVar6 + 8) + local_5c);
    uVar7 = (uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc));
    if ((__src < puVar2) || (puVar9 <= __src)) {
      if ((__src < local_44) && (local_44 < __src + uVar7)) break;
    }
    else {
      if (puVar9 < __src + uVar7) {
        uVar8 = FUN_000383f0();
        return uVar8;
      }
      __src = (undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3);
    }
    puVar13 = puVar13 + -uVar7;
    uVar10 = (undefined1)((int)puVar13 - (int)puVar2);
    puVar14[1] = uVar10;
    uVar12 = (undefined1)((uint)((int)puVar13 - (int)puVar2) >> 8);
    *puVar14 = uVar12;
    if (puVar13 < puVar14 + 2) break;
    param_2 = param_2 + 1;
    memcpy(puVar13,__src,uVar7);
    if (param_3 <= param_2) {
      *(undefined1 *)(param_4 + 0xc) = 0;
      *(undefined2 *)(param_4 + 0x18) = extraout_CX;
      puVar2[uVar11 + 1] = 0;
      puVar2[uVar11 + 2] = 0;
      puVar2[uVar11 + 3] = *(undefined1 *)(param_4 + 0x19);
      puVar2[uVar11 + 4] = (char)*(undefined2 *)(param_4 + 0x18);
      puVar2[uVar11 + 5] = uVar12;
      puVar2[uVar11 + 6] = uVar10;
      puVar2[uVar11 + 7] = 0;
      return 0;
    }
    iVar1 = iVar6 + local_50 * 4;
    if (*(int *)(iVar1 + 0x28) <= param_2) {
      local_44 = *(undefined1 **)(iVar1 + 0x14);
      local_50 = local_50 + 1;
    }
    local_5c = local_5c + 4;
    puVar14 = puVar14 + 2;
  }
  uVar8 = FUN_000383f0();
  return uVar8;
}


PUSH EBP
PUSH EDI
MOV EBP,EDX
PUSH ESI
PUSH EBX
MOV EBX,ECX
CALL 0x000a94ff
ADD EDI,0xa4c23
SUB ESP,0x5c
ADD EBX,EBP
MOV ESI,dword ptr [ESP + 0x70]
MOV dword ptr [ESP + 0x20],EDI
MOV EDI,EAX
MOV dword ptr [ESP + 0x48],ECX
MOV dword ptr [ESP + 0x2c],EBX
MOV EAX,dword ptr [ESI + 0x34]
MOV EDX,dword ptr [ESI + 0x38]
MOV dword ptr [ESP + 0x4c],ESI
MOV ECX,dword ptr [EAX + 0x28]
MOV EAX,dword ptr [EAX]
MOV dword ptr [ESP + 0xc],EDX
MOV dword ptr [ESP + 0x8],ECX
ADD ECX,EDX
MOV EDX,ESI
MOVZX EDX,byte ptr [EDX + 0x9]
MOV EBX,dword ptr [EAX + 0xcc]
MOV EAX,dword ptr [ESP + 0xc]
MOV ESI,dword ptr [ESI + 0x40]
MOV dword ptr [ESP + 0x38],EBX
LEA EBX,[EAX + EDX*0x1 + 0x5]
MOV dword ptr [ESP + 0x40],EDX
LEA EDX,[EAX + EDX*0x1 + 0x6]
MOVZX EAX,byte ptr [EBX]
MOV dword ptr [ESP + 0x3c],EDX
MOV dword ptr [ESP + 0x44],EBX
MOV EBX,dword ptr [ESP + 0x3c]
MOV EDX,EAX
MOVZX EAX,byte ptr [EBX]
SHL EDX,0x8
OR EAX,EDX
MOV EDX,dword ptr [ESP + 0x8]
CMP EDX,EAX
JC 0x000395b8
SUB EDX,EAX
MOV dword ptr [ESP + 0x8],EDX
MOV EDX,dword ptr [ESP + 0xc]
ADD EDX,EAX
ADD EAX,dword ptr [ESP + 0x38]
MOV dword ptr [ESP + 0x10],ECX
SUB ESP,0x4
PUSH dword ptr [ESP + 0xc]
PUSH EDX
PUSH EAX
MOV EBX,dword ptr [ESP + 0x30]
CALL 0x00016490
ADD ESP,0x10
CMP EBP,dword ptr [EDI + 0x28]
MOV ECX,dword ptr [ESP + 0x10]
JL 0x00039649
XOR EAX,EAX
ADD EAX,0x1
CMP dword ptr [EDI + EAX*0x4 + 0x28],EBP
JG 0x000394a1
CMP EAX,0x6
JNZ 0x00039493
MOV dword ptr [ESP + 0x1c],EAX
MOV EAX,dword ptr [ESP + 0x1c]
MOV dword ptr [ESP + 0x34],ECX
MOV EAX,dword ptr [EDI + EAX*0x4 + 0x10]
MOV dword ptr [ESP + 0x28],EAX
LEA EAX,[EBP*0x4 + 0x0]
MOV dword ptr [ESP + 0x10],EAX
LEA EAX,[EBP + EBP*0x1]
SUB EAX,ESI
MOV dword ptr [ESP + 0x24],EAX
MOV EAX,EBP
MOV EBP,ECX
MOV ECX,EDI
MOV EDI,EAX
JMP 0x00039571
MOV EBX,dword ptr [ESP + 0x34]
CMP EAX,EBX
JNC 0x00039598
CMP EBX,EDX
JC 0x00039638
SUB EAX,dword ptr [ESP + 0xc]
ADD EAX,dword ptr [ESP + 0x38]
SUB EBP,dword ptr [ESP + 0x8]
ADD ESI,0x2
MOV EDX,EBP
SUB EDX,dword ptr [ESP + 0xc]
MOV EBX,EDX
MOV byte ptr [ESI + -0x1],DL
SAR EBX,0x8
MOV byte ptr [ESI + -0x2],BL
CMP EBP,ESI
MOV dword ptr [ESP + 0x30],EBX
JC 0x000395c8
MOV dword ptr [ESP + 0x14],EDX
MOV dword ptr [ESP + 0x18],ECX
SUB ESP,0x4
PUSH dword ptr [ESP + 0xc]
PUSH EAX
ADD EDI,0x1
PUSH EBP
MOV EBX,dword ptr [ESP + 0x30]
CALL 0x00016490
ADD ESP,0x10
MOV EDX,dword ptr [ESP + 0x14]
CMP dword ptr [ESP + 0x2c],EDI
JLE 0x000395e0
MOV EBX,dword ptr [ESP + 0x1c]
MOV ECX,dword ptr [ESP + 0x18]
LEA EAX,[ECX + EBX*0x4]
CMP dword ptr [EAX + 0x28],EDI
JG 0x0003956c
MOV EAX,dword ptr [EAX + 0x14]
ADD EBX,0x1
MOV dword ptr [ESP + 0x1c],EBX
MOV dword ptr [ESP + 0x28],EAX
ADD dword ptr [ESP + 0x10],0x4
MOV EBX,dword ptr [ESP + 0x10]
MOV EAX,dword ptr [ECX + 0x8]
MOV EDX,dword ptr [ECX + 0xc]
MOV EAX,dword ptr [EAX + EBX*0x1]
MOV EBX,dword ptr [ESP + 0x24]
ADD EDX,ESI
MOVZX EDX,word ptr [EDX + EBX*0x1]
MOV dword ptr [ESP + 0x8],EDX
ADD EDX,EAX
CMP EAX,dword ptr [ESP + 0xc]
JNC 0x000394e0
MOV EBX,dword ptr [ESP + 0x28]
CMP EAX,EBX
JNC 0x000394fc
CMP EBX,EDX
JNC 0x000394fc
MOV EAX,0x11724
JMP 0x000395cd
MOV EAX,dword ptr [ESP + 0x38]
MOV EDX,dword ptr [ESP + 0xc]
JMP 0x0003946b
MOV EAX,0x1172a
ADD ESP,0x5c
POP EBX
POP ESI
POP EDI
POP EBP
JMP 0x000383f0
MOVZX EDI,word ptr [ESP + 0x48]
MOV ESI,dword ptr [ESP + 0x4c]
MOV ECX,dword ptr [ESP + 0x40]
MOV byte ptr [ESI + 0xc],0x0
MOV word ptr [ESI + 0x18],DI
MOV EDI,dword ptr [ESP + 0xc]
MOV byte ptr [EDI + ECX*0x1 + 0x1],0x0
MOV byte ptr [EDI + ECX*0x1 + 0x2],0x0
MOVZX EAX,byte ptr [ESI + 0x19]
MOV byte ptr [EDI + ECX*0x1 + 0x3],AL
MOVZX EAX,word ptr [ESI + 0x18]
MOV ESI,dword ptr [ESP + 0x44]
MOV byte ptr [EDI + ECX*0x1 + 0x4],AL
MOVZX EAX,byte ptr [ESP + 0x30]
MOV byte ptr [ESI],AL
MOV EAX,dword ptr [ESP + 0x3c]
MOV byte ptr [EAX],DL
MOV byte ptr [EDI + ECX*0x1 + 0x7],0x0
ADD ESP,0x5c
POP EBX
XOR EAX,EAX
POP ESI
POP EDI
POP EBP
RET
ADD ESP,0x5c
MOV EAX,0x1171f
POP EBX
POP ESI
POP EDI
POP EBP
JMP 0x000383f0
MOV dword ptr [ESP + 0x1c],0x0
JMP 0x000394a5
(translation_unit "undefined4 __regparm3 FUN_000393d0(undefined4 param_1,int param_2,int param_3,int param_4)\n\n{\n  int iVar1;\n  undefined1 *puVar2;\n  void *pvVar3;\n  undefined1 *puVar4;\n  int iVar5;\n  int iVar6;\n  uint uVar7;\n  void *__dest;\n  undefined1 *__src;\n  undefined4 uVar8;\n  undefined2 extraout_CX;\n  undefined1 *puVar9;\n  undefined1 uVar10;\n  uint uVar11;\n  undefined1 uVar12;\n  undefined1 *puVar13;\n  undefined1 *puVar14;\n  size_t local_64;\n  int local_5c;\n  int local_50;\n  undefined1 *local_44;\n  \n  iVar6 = FUN_000a94ff();\n  param_3 = param_3 + param_2;\n  puVar2 = *(undefined1 **)(param_4 + 0x38);\n  local_64 = (*(int **)(param_4 + 0x34))[10];\n  puVar9 = puVar2 + local_64;\n  uVar11 = (uint)*(byte *)(param_4 + 9);\n  pvVar3 = *(void **)(**(int **)(param_4 + 0x34) + 0xcc);\n  puVar4 = *(undefined1 **)(param_4 + 0x40);\n  uVar7 = (uint)CONCAT11(puVar2[uVar11 + 5],puVar2[uVar11 + 6]);\n  __dest = pvVar3;\n  puVar13 = puVar2;\n  if (uVar7 <= local_64) {\n    local_64 = local_64 - uVar7;\n    __dest = (void *)(uVar7 + (int)pvVar3);\n    puVar13 = puVar2 + uVar7;\n  }\n  memcpy(__dest,puVar13,local_64);\n  if (param_2 < *(int *)(iVar6 + 0x28)) {\n    local_50 = 0;\n  }\n  else {\n    local_50 = 0;\n    do {\n      local_50 = local_50 + 1;\n      if (param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;\n    } while (local_50 != 6);\n  }\n  local_44 = *(undefined1 **)(iVar6 + 0x10 + local_50 * 4);\n  local_5c = param_2 * 4;\n  iVar5 = param_2 * 2;\n  puVar13 = puVar9;\n  puVar14 = puVar4;\n  while( true ) {\n    __src = *(undefined1 **)(*(int *)(iVar6 + 8) + local_5c);\n    uVar7 = (uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc));\n    if ((__src < puVar2) || (puVar9 <= __src)) {\n      if ((__src < local_44) && (local_44 < __src + uVar7)) break;\n    }\n    else {\n      if (puVar9 < __src + uVar7) {\n        uVar8 = FUN_000383f0();\n        return uVar8;\n      }\n      __src = (undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3);\n    }\n    puVar13 = puVar13 + -uVar7;\n    uVar10 = (undefined1)((int)puVar13 - (int)puVar2);\n    puVar14[1] = uVar10;\n    uVar12 = (undefined1)((uint)((int)puVar13 - (int)puVar2) >> 8);\n    *puVar14 = uVar12;\n    if (puVar13 < puVar14 + 2) break;\n    param_2 = param_2 + 1;\n    memcpy(puVar13,__src,uVar7);\n    if (param_3 <= param_2) {\n      *(undefined1 *)(param_4 + 0xc) = 0;\n      *(undefined2 *)(param_4 + 0x18) = extraout_CX;\n      puVar2[uVar11 + 1] = 0;\n      puVar2[uVar11 + 2] = 0;\n      puVar2[uVar11 + 3] = *(undefined1 *)(param_4 + 0x19);\n      puVar2[uVar11 + 4] = (char)*(undefined2 *)(param_4 + 0x18);\n      puVar2[uVar11 + 5] = uVar12;\n      puVar2[uVar11 + 6] = uVar10;\n      puVar2[uVar11 + 7] = 0;\n      return 0;\n    }\n    iVar1 = iVar6 + local_50 * 4;\n    if (*(int *)(iVar1 + 0x28) <= param_2) {\n      local_44 = *(undefined1 **)(iVar1 + 0x14);\n      local_50 = local_50 + 1;\n    }\n    local_5c = local_5c + 4;\n    puVar14 = puVar14 + 2;\n  }\n  uVar8 = FUN_000383f0();\n  return uVar8;\n}\n\n" (function_definition "undefined4 __regparm3 FUN_000393d0(undefined4 param_1,int param_2,int param_3,int param_4)\n\n{\n  int iVar1;\n  undefined1 *puVar2;\n  void *pvVar3;\n  undefined1 *puVar4;\n  int iVar5;\n  int iVar6;\n  uint uVar7;\n  void *__dest;\n  undefined1 *__src;\n  undefined4 uVar8;\n  undefined2 extraout_CX;\n  undefined1 *puVar9;\n  undefined1 uVar10;\n  uint uVar11;\n  undefined1 uVar12;\n  undefined1 *puVar13;\n  undefined1 *puVar14;\n  size_t local_64;\n  int local_5c;\n  int local_50;\n  undefined1 *local_44;\n  \n  iVar6 = FUN_000a94ff();\n  param_3 = param_3 + param_2;\n  puVar2 = *(undefined1 **)(param_4 + 0x38);\n  local_64 = (*(int **)(param_4 + 0x34))[10];\n  puVar9 = puVar2 + local_64;\n  uVar11 = (uint)*(byte *)(param_4 + 9);\n  pvVar3 = *(void **)(**(int **)(param_4 + 0x34) + 0xcc);\n  puVar4 = *(undefined1 **)(param_4 + 0x40);\n  uVar7 = (uint)CONCAT11(puVar2[uVar11 + 5],puVar2[uVar11 + 6]);\n  __dest = pvVar3;\n  puVar13 = puVar2;\n  if (uVar7 <= local_64) {\n    local_64 = local_64 - uVar7;\n    __dest = (void *)(uVar7 + (int)pvVar3);\n    puVar13 = puVar2 + uVar7;\n  }\n  memcpy(__dest,puVar13,local_64);\n  if (param_2 < *(int *)(iVar6 + 0x28)) {\n    local_50 = 0;\n  }\n  else {\n    local_50 = 0;\n    do {\n      local_50 = local_50 + 1;\n      if (param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;\n    } while (local_50 != 6);\n  }\n  local_44 = *(undefined1 **)(iVar6 + 0x10 + local_50 * 4);\n  local_5c = param_2 * 4;\n  iVar5 = param_2 * 2;\n  puVar13 = puVar9;\n  puVar14 = puVar4;\n  while( true ) {\n    __src = *(undefined1 **)(*(int *)(iVar6 + 8) + local_5c);\n    uVar7 = (uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc));\n    if ((__src < puVar2) || (puVar9 <= __src)) {\n      if ((__src < local_44) && (local_44 < __src + uVar7)) break;\n    }\n    else {\n      if (puVar9 < __src + uVar7) {\n        uVar8 = FUN_000383f0();\n        return uVar8;\n      }\n      __src = (undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3);\n    }\n    puVar13 = puVar13 + -uVar7;\n    uVar10 = (undefined1)((int)puVar13 - (int)puVar2);\n    puVar14[1] = uVar10;\n    uVar12 = (undefined1)((uint)((int)puVar13 - (int)puVar2) >> 8);\n    *puVar14 = uVar12;\n    if (puVar13 < puVar14 + 2) break;\n    param_2 = param_2 + 1;\n    memcpy(puVar13,__src,uVar7);\n    if (param_3 <= param_2) {\n      *(undefined1 *)(param_4 + 0xc) = 0;\n      *(undefined2 *)(param_4 + 0x18) = extraout_CX;\n      puVar2[uVar11 + 1] = 0;\n      puVar2[uVar11 + 2] = 0;\n      puVar2[uVar11 + 3] = *(undefined1 *)(param_4 + 0x19);\n      puVar2[uVar11 + 4] = (char)*(undefined2 *)(param_4 + 0x18);\n      puVar2[uVar11 + 5] = uVar12;\n      puVar2[uVar11 + 6] = uVar10;\n      puVar2[uVar11 + 7] = 0;\n      return 0;\n    }\n    iVar1 = iVar6 + local_50 * 4;\n    if (*(int *)(iVar1 + 0x28) <= param_2) {\n      local_44 = *(undefined1 **)(iVar1 + 0x14);\n      local_50 = local_50 + 1;\n    }\n    local_5c = local_5c + 4;\n    puVar14 = puVar14 + 2;\n  }\n  uVar8 = FUN_000383f0();\n  return uVar8;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "FUN_000393d0(undefined4 param_1,int param_2,int param_3,int param_4)" identifier (parameter_list "(undefined4 param_1,int param_2,int param_3,int param_4)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int param_4" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  undefined1 *puVar2;\n  void *pvVar3;\n  undefined1 *puVar4;\n  int iVar5;\n  int iVar6;\n  uint uVar7;\n  void *__dest;\n  undefined1 *__src;\n  undefined4 uVar8;\n  undefined2 extraout_CX;\n  undefined1 *puVar9;\n  undefined1 uVar10;\n  uint uVar11;\n  undefined1 uVar12;\n  undefined1 *puVar13;\n  undefined1 *puVar14;\n  size_t local_64;\n  int local_5c;\n  int local_50;\n  undefined1 *local_44;\n  \n  iVar6 = FUN_000a94ff();\n  param_3 = param_3 + param_2;\n  puVar2 = *(undefined1 **)(param_4 + 0x38);\n  local_64 = (*(int **)(param_4 + 0x34))[10];\n  puVar9 = puVar2 + local_64;\n  uVar11 = (uint)*(byte *)(param_4 + 9);\n  pvVar3 = *(void **)(**(int **)(param_4 + 0x34) + 0xcc);\n  puVar4 = *(undefined1 **)(param_4 + 0x40);\n  uVar7 = (uint)CONCAT11(puVar2[uVar11 + 5],puVar2[uVar11 + 6]);\n  __dest = pvVar3;\n  puVar13 = puVar2;\n  if (uVar7 <= local_64) {\n    local_64 = local_64 - uVar7;\n    __dest = (void *)(uVar7 + (int)pvVar3);\n    puVar13 = puVar2 + uVar7;\n  }\n  memcpy(__dest,puVar13,local_64);\n  if (param_2 < *(int *)(iVar6 + 0x28)) {\n    local_50 = 0;\n  }\n  else {\n    local_50 = 0;\n    do {\n      local_50 = local_50 + 1;\n      if (param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;\n    } while (local_50 != 6);\n  }\n  local_44 = *(undefined1 **)(iVar6 + 0x10 + local_50 * 4);\n  local_5c = param_2 * 4;\n  iVar5 = param_2 * 2;\n  puVar13 = puVar9;\n  puVar14 = puVar4;\n  while( true ) {\n    __src = *(undefined1 **)(*(int *)(iVar6 + 8) + local_5c);\n    uVar7 = (uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc));\n    if ((__src < puVar2) || (puVar9 <= __src)) {\n      if ((__src < local_44) && (local_44 < __src + uVar7)) break;\n    }\n    else {\n      if (puVar9 < __src + uVar7) {\n        uVar8 = FUN_000383f0();\n        return uVar8;\n      }\n      __src = (undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3);\n    }\n    puVar13 = puVar13 + -uVar7;\n    uVar10 = (undefined1)((int)puVar13 - (int)puVar2);\n    puVar14[1] = uVar10;\n    uVar12 = (undefined1)((uint)((int)puVar13 - (int)puVar2) >> 8);\n    *puVar14 = uVar12;\n    if (puVar13 < puVar14 + 2) break;\n    param_2 = param_2 + 1;\n    memcpy(puVar13,__src,uVar7);\n    if (param_3 <= param_2) {\n      *(undefined1 *)(param_4 + 0xc) = 0;\n      *(undefined2 *)(param_4 + 0x18) = extraout_CX;\n      puVar2[uVar11 + 1] = 0;\n      puVar2[uVar11 + 2] = 0;\n      puVar2[uVar11 + 3] = *(undefined1 *)(param_4 + 0x19);\n      puVar2[uVar11 + 4] = (char)*(undefined2 *)(param_4 + 0x18);\n      puVar2[uVar11 + 5] = uVar12;\n      puVar2[uVar11 + 6] = uVar10;\n      puVar2[uVar11 + 7] = 0;\n      return 0;\n    }\n    iVar1 = iVar6 + local_50 * 4;\n    if (*(int *)(iVar1 + 0x28) <= param_2) {\n      local_44 = *(undefined1 **)(iVar1 + 0x14);\n      local_50 = local_50 + 1;\n    }\n    local_5c = local_5c + 4;\n    puVar14 = puVar14 + 2;\n  }\n  uVar8 = FUN_000383f0();\n  return uVar8;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "undefined1 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "void *pvVar3;" primitive_type (pointer_declarator "*pvVar3" * identifier) ;) (declaration "undefined1 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "void *__dest;" primitive_type (pointer_declarator "*__dest" * identifier) ;) (declaration "undefined1 *__src;" type_identifier (pointer_declarator "*__src" * identifier) ;) (declaration "undefined4 uVar8;" type_identifier identifier ;) (declaration "undefined2 extraout_CX;" type_identifier identifier ;) (declaration "undefined1 *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "undefined1 uVar10;" type_identifier identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "undefined1 uVar12;" type_identifier identifier ;) (declaration "undefined1 *puVar13;" type_identifier (pointer_declarator "*puVar13" * identifier) ;) (declaration "undefined1 *puVar14;" type_identifier (pointer_declarator "*puVar14" * identifier) ;) (declaration "size_t local_64;" primitive_type identifier ;) (declaration "int local_5c;" primitive_type identifier ;) (declaration "int local_50;" primitive_type identifier ;) (declaration "undefined1 *local_44;" type_identifier (pointer_declarator "*local_44" * identifier) ;) (expression_statement "iVar6 = FUN_000a94ff();" (assignment_expression "iVar6 = FUN_000a94ff()" identifier = (call_expression "FUN_000a94ff()" identifier (argument_list "()" ( )))) ;) (expression_statement "param_3 = param_3 + param_2;" (assignment_expression "param_3 = param_3 + param_2" identifier = (binary_expression "param_3 + param_2" identifier + identifier)) ;) (expression_statement "puVar2 = *(undefined1 **)(param_4 + 0x38);" (assignment_expression "puVar2 = *(undefined1 **)(param_4 + 0x38)" identifier = (pointer_expression "*(undefined1 **)(param_4 + 0x38)" * (cast_expression "(undefined1 **)(param_4 + 0x38)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_4 + 0x38)" ( (binary_expression "param_4 + 0x38" identifier + number_literal) ))))) ;) (expression_statement "local_64 = (*(int **)(param_4 + 0x34))[10];" (assignment_expression "local_64 = (*(int **)(param_4 + 0x34))[10]" identifier = (subscript_expression "(*(int **)(param_4 + 0x34))[10]" (parenthesized_expression "(*(int **)(param_4 + 0x34))" ( (pointer_expression "*(int **)(param_4 + 0x34)" * (cast_expression "(int **)(param_4 + 0x34)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_4 + 0x34)" ( (binary_expression "param_4 + 0x34" identifier + number_literal) )))) )) [ number_literal ])) ;) (expression_statement "puVar9 = puVar2 + local_64;" (assignment_expression "puVar9 = puVar2 + local_64" identifier = (binary_expression "puVar2 + local_64" identifier + identifier)) ;) (expression_statement "uVar11 = (uint)*(byte *)(param_4 + 9);" (assignment_expression "uVar11 = (uint)*(byte *)(param_4 + 9)" identifier = (binary_expression "(uint)*(byte *)(param_4 + 9)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(byte *)(param_4 + 9)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 9)" ( (binary_expression "param_4 + 9" identifier + number_literal) ))))) ;) (expression_statement "pvVar3 = *(void **)(**(int **)(param_4 + 0x34) + 0xcc);" (assignment_expression "pvVar3 = *(void **)(**(int **)(param_4 + 0x34) + 0xcc)" identifier = (pointer_expression "*(void **)(**(int **)(param_4 + 0x34) + 0xcc)" * (cast_expression "(void **)(**(int **)(param_4 + 0x34) + 0xcc)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(**(int **)(param_4 + 0x34) + 0xcc)" ( (binary_expression "**(int **)(param_4 + 0x34) + 0xcc" (pointer_expression "**(int **)(param_4 + 0x34)" * (pointer_expression "*(int **)(param_4 + 0x34)" * (cast_expression "(int **)(param_4 + 0x34)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_4 + 0x34)" ( (binary_expression "param_4 + 0x34" identifier + number_literal) ))))) + number_literal) ))))) ;) (expression_statement "puVar4 = *(undefined1 **)(param_4 + 0x40);" (assignment_expression "puVar4 = *(undefined1 **)(param_4 + 0x40)" identifier = (pointer_expression "*(undefined1 **)(param_4 + 0x40)" * (cast_expression "(undefined1 **)(param_4 + 0x40)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_4 + 0x40)" ( (binary_expression "param_4 + 0x40" identifier + number_literal) ))))) ;) (expression_statement "uVar7 = (uint)CONCAT11(puVar2[uVar11 + 5],puVar2[uVar11 + 6]);" (assignment_expression "uVar7 = (uint)CONCAT11(puVar2[uVar11 + 5],puVar2[uVar11 + 6])" identifier = (cast_expression "(uint)CONCAT11(puVar2[uVar11 + 5],puVar2[uVar11 + 6])" ( (type_descriptor "uint" type_identifier) ) (call_expression "CONCAT11(puVar2[uVar11 + 5],puVar2[uVar11 + 6])" identifier (argument_list "(puVar2[uVar11 + 5],puVar2[uVar11 + 6])" ( (subscript_expression "puVar2[uVar11 + 5]" identifier [ (binary_expression "uVar11 + 5" identifier + number_literal) ]) , (subscript_expression "puVar2[uVar11 + 6]" identifier [ (binary_expression "uVar11 + 6" identifier + number_literal) ]) ))))) ;) (expression_statement "__dest = pvVar3;" (assignment_expression "__dest = pvVar3" identifier = identifier) ;) (expression_statement "puVar13 = puVar2;" (assignment_expression "puVar13 = puVar2" identifier = identifier) ;) (if_statement "if (uVar7 <= local_64) {\n    local_64 = local_64 - uVar7;\n    __dest = (void *)(uVar7 + (int)pvVar3);\n    puVar13 = puVar2 + uVar7;\n  }" if (parenthesized_expression "(uVar7 <= local_64)" ( (binary_expression "uVar7 <= local_64" identifier <= identifier) )) (compound_statement "{\n    local_64 = local_64 - uVar7;\n    __dest = (void *)(uVar7 + (int)pvVar3);\n    puVar13 = puVar2 + uVar7;\n  }" { (expression_statement "local_64 = local_64 - uVar7;" (assignment_expression "local_64 = local_64 - uVar7" identifier = (binary_expression "local_64 - uVar7" identifier - identifier)) ;) (expression_statement "__dest = (void *)(uVar7 + (int)pvVar3);" (assignment_expression "__dest = (void *)(uVar7 + (int)pvVar3)" identifier = (cast_expression "(void *)(uVar7 + (int)pvVar3)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar7 + (int)pvVar3)" ( (binary_expression "uVar7 + (int)pvVar3" identifier + (cast_expression "(int)pvVar3" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) (expression_statement "puVar13 = puVar2 + uVar7;" (assignment_expression "puVar13 = puVar2 + uVar7" identifier = (binary_expression "puVar2 + uVar7" identifier + identifier)) ;) })) (expression_statement "memcpy(__dest,puVar13,local_64);" (call_expression "memcpy(__dest,puVar13,local_64)" identifier (argument_list "(__dest,puVar13,local_64)" ( identifier , identifier , identifier ))) ;) (if_statement "if (param_2 < *(int *)(iVar6 + 0x28)) {\n    local_50 = 0;\n  }\n  else {\n    local_50 = 0;\n    do {\n      local_50 = local_50 + 1;\n      if (param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;\n    } while (local_50 != 6);\n  }" if (parenthesized_expression "(param_2 < *(int *)(iVar6 + 0x28))" ( (binary_expression "param_2 < *(int *)(iVar6 + 0x28)" identifier < (pointer_expression "*(int *)(iVar6 + 0x28)" * (cast_expression "(int *)(iVar6 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 0x28)" ( (binary_expression "iVar6 + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n    local_50 = 0;\n  }" { (expression_statement "local_50 = 0;" (assignment_expression "local_50 = 0" identifier = number_literal) ;) }) (else_clause "else {\n    local_50 = 0;\n    do {\n      local_50 = local_50 + 1;\n      if (param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;\n    } while (local_50 != 6);\n  }" else (compound_statement "{\n    local_50 = 0;\n    do {\n      local_50 = local_50 + 1;\n      if (param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;\n    } while (local_50 != 6);\n  }" { (expression_statement "local_50 = 0;" (assignment_expression "local_50 = 0" identifier = number_literal) ;) (do_statement "do {\n      local_50 = local_50 + 1;\n      if (param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;\n    } while (local_50 != 6);" do (compound_statement "{\n      local_50 = local_50 + 1;\n      if (param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;\n    }" { (expression_statement "local_50 = local_50 + 1;" (assignment_expression "local_50 = local_50 + 1" identifier = (binary_expression "local_50 + 1" identifier + number_literal)) ;) (if_statement "if (param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;" if (parenthesized_expression "(param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4))" ( (binary_expression "param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4)" identifier < (pointer_expression "*(int *)(iVar6 + 0x28 + local_50 * 4)" * (cast_expression "(int *)(iVar6 + 0x28 + local_50 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 0x28 + local_50 * 4)" ( (binary_expression "iVar6 + 0x28 + local_50 * 4" (binary_expression "iVar6 + 0x28" identifier + number_literal) + (binary_expression "local_50 * 4" identifier * number_literal)) ))))) )) (break_statement "break;" break ;)) }) while (parenthesized_expression "(local_50 != 6)" ( (binary_expression "local_50 != 6" identifier != number_literal) )) ;) }))) (expression_statement "local_44 = *(undefined1 **)(iVar6 + 0x10 + local_50 * 4);" (assignment_expression "local_44 = *(undefined1 **)(iVar6 + 0x10 + local_50 * 4)" identifier = (pointer_expression "*(undefined1 **)(iVar6 + 0x10 + local_50 * 4)" * (cast_expression "(undefined1 **)(iVar6 + 0x10 + local_50 * 4)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar6 + 0x10 + local_50 * 4)" ( (binary_expression "iVar6 + 0x10 + local_50 * 4" (binary_expression "iVar6 + 0x10" identifier + number_literal) + (binary_expression "local_50 * 4" identifier * number_literal)) ))))) ;) (expression_statement "local_5c = param_2 * 4;" (assignment_expression "local_5c = param_2 * 4" identifier = (binary_expression "param_2 * 4" identifier * number_literal)) ;) (expression_statement "iVar5 = param_2 * 2;" (assignment_expression "iVar5 = param_2 * 2" identifier = (binary_expression "param_2 * 2" identifier * number_literal)) ;) (expression_statement "puVar13 = puVar9;" (assignment_expression "puVar13 = puVar9" identifier = identifier) ;) (expression_statement "puVar14 = puVar4;" (assignment_expression "puVar14 = puVar4" identifier = identifier) ;) (while_statement "while( true ) {\n    __src = *(undefined1 **)(*(int *)(iVar6 + 8) + local_5c);\n    uVar7 = (uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc));\n    if ((__src < puVar2) || (puVar9 <= __src)) {\n      if ((__src < local_44) && (local_44 < __src + uVar7)) break;\n    }\n    else {\n      if (puVar9 < __src + uVar7) {\n        uVar8 = FUN_000383f0();\n        return uVar8;\n      }\n      __src = (undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3);\n    }\n    puVar13 = puVar13 + -uVar7;\n    uVar10 = (undefined1)((int)puVar13 - (int)puVar2);\n    puVar14[1] = uVar10;\n    uVar12 = (undefined1)((uint)((int)puVar13 - (int)puVar2) >> 8);\n    *puVar14 = uVar12;\n    if (puVar13 < puVar14 + 2) break;\n    param_2 = param_2 + 1;\n    memcpy(puVar13,__src,uVar7);\n    if (param_3 <= param_2) {\n      *(undefined1 *)(param_4 + 0xc) = 0;\n      *(undefined2 *)(param_4 + 0x18) = extraout_CX;\n      puVar2[uVar11 + 1] = 0;\n      puVar2[uVar11 + 2] = 0;\n      puVar2[uVar11 + 3] = *(undefined1 *)(param_4 + 0x19);\n      puVar2[uVar11 + 4] = (char)*(undefined2 *)(param_4 + 0x18);\n      puVar2[uVar11 + 5] = uVar12;\n      puVar2[uVar11 + 6] = uVar10;\n      puVar2[uVar11 + 7] = 0;\n      return 0;\n    }\n    iVar1 = iVar6 + local_50 * 4;\n    if (*(int *)(iVar1 + 0x28) <= param_2) {\n      local_44 = *(undefined1 **)(iVar1 + 0x14);\n      local_50 = local_50 + 1;\n    }\n    local_5c = local_5c + 4;\n    puVar14 = puVar14 + 2;\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    __src = *(undefined1 **)(*(int *)(iVar6 + 8) + local_5c);\n    uVar7 = (uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc));\n    if ((__src < puVar2) || (puVar9 <= __src)) {\n      if ((__src < local_44) && (local_44 < __src + uVar7)) break;\n    }\n    else {\n      if (puVar9 < __src + uVar7) {\n        uVar8 = FUN_000383f0();\n        return uVar8;\n      }\n      __src = (undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3);\n    }\n    puVar13 = puVar13 + -uVar7;\n    uVar10 = (undefined1)((int)puVar13 - (int)puVar2);\n    puVar14[1] = uVar10;\n    uVar12 = (undefined1)((uint)((int)puVar13 - (int)puVar2) >> 8);\n    *puVar14 = uVar12;\n    if (puVar13 < puVar14 + 2) break;\n    param_2 = param_2 + 1;\n    memcpy(puVar13,__src,uVar7);\n    if (param_3 <= param_2) {\n      *(undefined1 *)(param_4 + 0xc) = 0;\n      *(undefined2 *)(param_4 + 0x18) = extraout_CX;\n      puVar2[uVar11 + 1] = 0;\n      puVar2[uVar11 + 2] = 0;\n      puVar2[uVar11 + 3] = *(undefined1 *)(param_4 + 0x19);\n      puVar2[uVar11 + 4] = (char)*(undefined2 *)(param_4 + 0x18);\n      puVar2[uVar11 + 5] = uVar12;\n      puVar2[uVar11 + 6] = uVar10;\n      puVar2[uVar11 + 7] = 0;\n      return 0;\n    }\n    iVar1 = iVar6 + local_50 * 4;\n    if (*(int *)(iVar1 + 0x28) <= param_2) {\n      local_44 = *(undefined1 **)(iVar1 + 0x14);\n      local_50 = local_50 + 1;\n    }\n    local_5c = local_5c + 4;\n    puVar14 = puVar14 + 2;\n  }" { (expression_statement "__src = *(undefined1 **)(*(int *)(iVar6 + 8) + local_5c);" (assignment_expression "__src = *(undefined1 **)(*(int *)(iVar6 + 8) + local_5c)" identifier = (pointer_expression "*(undefined1 **)(*(int *)(iVar6 + 8) + local_5c)" * (cast_expression "(undefined1 **)(*(int *)(iVar6 + 8) + local_5c)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(iVar6 + 8) + local_5c)" ( (binary_expression "*(int *)(iVar6 + 8) + local_5c" (pointer_expression "*(int *)(iVar6 + 8)" * (cast_expression "(int *)(iVar6 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 8)" ( (binary_expression "iVar6 + 8" identifier + number_literal) )))) + identifier) ))))) ;) (expression_statement "uVar7 = (uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc));" (assignment_expression "uVar7 = (uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc))" identifier = (binary_expression "(uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc))" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc))" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc))" ( (binary_expression "puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc)" (binary_expression "puVar14 + (iVar5 - (int)puVar4)" identifier + (parenthesized_expression "(iVar5 - (int)puVar4)" ( (binary_expression "iVar5 - (int)puVar4" identifier - (cast_expression "(int)puVar4" ( (type_descriptor "int" primitive_type) ) identifier)) ))) + (pointer_expression "*(int *)(iVar6 + 0xc)" * (cast_expression "(int *)(iVar6 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 0xc)" ( (binary_expression "iVar6 + 0xc" identifier + number_literal) ))))) ))))) ;) (if_statement "if ((__src < puVar2) || (puVar9 <= __src)) {\n      if ((__src < local_44) && (local_44 < __src + uVar7)) break;\n    }\n    else {\n      if (puVar9 < __src + uVar7) {\n        uVar8 = FUN_000383f0();\n        return uVar8;\n      }\n      __src = (undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3);\n    }" if (parenthesized_expression "((__src < puVar2) || (puVar9 <= __src))" ( (binary_expression "(__src < puVar2) || (puVar9 <= __src)" (parenthesized_expression "(__src < puVar2)" ( (binary_expression "__src < puVar2" identifier < identifier) )) || (parenthesized_expression "(puVar9 <= __src)" ( (binary_expression "puVar9 <= __src" identifier <= identifier) ))) )) (compound_statement "{\n      if ((__src < local_44) && (local_44 < __src + uVar7)) break;\n    }" { (if_statement "if ((__src < local_44) && (local_44 < __src + uVar7)) break;" if (parenthesized_expression "((__src < local_44) && (local_44 < __src + uVar7))" ( (binary_expression "(__src < local_44) && (local_44 < __src + uVar7)" (parenthesized_expression "(__src < local_44)" ( (binary_expression "__src < local_44" identifier < identifier) )) && (parenthesized_expression "(local_44 < __src + uVar7)" ( (binary_expression "local_44 < __src + uVar7" identifier < (binary_expression "__src + uVar7" identifier + identifier)) ))) )) (break_statement "break;" break ;)) }) (else_clause "else {\n      if (puVar9 < __src + uVar7) {\n        uVar8 = FUN_000383f0();\n        return uVar8;\n      }\n      __src = (undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3);\n    }" else (compound_statement "{\n      if (puVar9 < __src + uVar7) {\n        uVar8 = FUN_000383f0();\n        return uVar8;\n      }\n      __src = (undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3);\n    }" { (if_statement "if (puVar9 < __src + uVar7) {\n        uVar8 = FUN_000383f0();\n        return uVar8;\n      }" if (parenthesized_expression "(puVar9 < __src + uVar7)" ( (binary_expression "puVar9 < __src + uVar7" identifier < (binary_expression "__src + uVar7" identifier + identifier)) )) (compound_statement "{\n        uVar8 = FUN_000383f0();\n        return uVar8;\n      }" { (expression_statement "uVar8 = FUN_000383f0();" (assignment_expression "uVar8 = FUN_000383f0()" identifier = (call_expression "FUN_000383f0()" identifier (argument_list "()" ( )))) ;) (return_statement "return uVar8;" return identifier ;) })) (expression_statement "__src = (undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3);" (assignment_expression "__src = (undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3)" identifier = (cast_expression "(undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(((int)__src - (int)puVar2) + (int)pvVar3)" ( (binary_expression "((int)__src - (int)puVar2) + (int)pvVar3" (parenthesized_expression "((int)__src - (int)puVar2)" ( (binary_expression "(int)__src - (int)puVar2" (cast_expression "(int)__src" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)puVar2" ( (type_descriptor "int" primitive_type) ) identifier)) )) + (cast_expression "(int)pvVar3" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) }))) (expression_statement "puVar13 = puVar13 + -uVar7;" (assignment_expression "puVar13 = puVar13 + -uVar7" identifier = (binary_expression "puVar13 + -uVar7" identifier + (unary_expression "-uVar7" - identifier))) ;) (expression_statement "uVar10 = (undefined1)((int)puVar13 - (int)puVar2);" (assignment_expression "uVar10 = (undefined1)((int)puVar13 - (int)puVar2)" identifier = (call_expression "(undefined1)((int)puVar13 - (int)puVar2)" (parenthesized_expression "(undefined1)" ( identifier )) (argument_list "((int)puVar13 - (int)puVar2)" ( (binary_expression "(int)puVar13 - (int)puVar2" (cast_expression "(int)puVar13" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)puVar2" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) (expression_statement "puVar14[1] = uVar10;" (assignment_expression "puVar14[1] = uVar10" (subscript_expression "puVar14[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar12 = (undefined1)((uint)((int)puVar13 - (int)puVar2) >> 8);" (assignment_expression "uVar12 = (undefined1)((uint)((int)puVar13 - (int)puVar2) >> 8)" identifier = (call_expression "(undefined1)((uint)((int)puVar13 - (int)puVar2) >> 8)" (parenthesized_expression "(undefined1)" ( identifier )) (argument_list "((uint)((int)puVar13 - (int)puVar2) >> 8)" ( (binary_expression "(uint)((int)puVar13 - (int)puVar2) >> 8" (call_expression "(uint)((int)puVar13 - (int)puVar2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((int)puVar13 - (int)puVar2)" ( (binary_expression "(int)puVar13 - (int)puVar2" (cast_expression "(int)puVar13" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)puVar2" ( (type_descriptor "int" primitive_type) ) identifier)) ))) >> number_literal) )))) ;) (expression_statement "*puVar14 = uVar12;" (assignment_expression "*puVar14 = uVar12" (pointer_expression "*puVar14" * identifier) = identifier) ;) (if_statement "if (puVar13 < puVar14 + 2) break;" if (parenthesized_expression "(puVar13 < puVar14 + 2)" ( (binary_expression "puVar13 < puVar14 + 2" identifier < (binary_expression "puVar14 + 2" identifier + number_literal)) )) (break_statement "break;" break ;)) (expression_statement "param_2 = param_2 + 1;" (assignment_expression "param_2 = param_2 + 1" identifier = (binary_expression "param_2 + 1" identifier + number_literal)) ;) (expression_statement "memcpy(puVar13,__src,uVar7);" (call_expression "memcpy(puVar13,__src,uVar7)" identifier (argument_list "(puVar13,__src,uVar7)" ( identifier , identifier , identifier ))) ;) (if_statement "if (param_3 <= param_2) {\n      *(undefined1 *)(param_4 + 0xc) = 0;\n      *(undefined2 *)(param_4 + 0x18) = extraout_CX;\n      puVar2[uVar11 + 1] = 0;\n      puVar2[uVar11 + 2] = 0;\n      puVar2[uVar11 + 3] = *(undefined1 *)(param_4 + 0x19);\n      puVar2[uVar11 + 4] = (char)*(undefined2 *)(param_4 + 0x18);\n      puVar2[uVar11 + 5] = uVar12;\n      puVar2[uVar11 + 6] = uVar10;\n      puVar2[uVar11 + 7] = 0;\n      return 0;\n    }" if (parenthesized_expression "(param_3 <= param_2)" ( (binary_expression "param_3 <= param_2" identifier <= identifier) )) (compound_statement "{\n      *(undefined1 *)(param_4 + 0xc) = 0;\n      *(undefined2 *)(param_4 + 0x18) = extraout_CX;\n      puVar2[uVar11 + 1] = 0;\n      puVar2[uVar11 + 2] = 0;\n      puVar2[uVar11 + 3] = *(undefined1 *)(param_4 + 0x19);\n      puVar2[uVar11 + 4] = (char)*(undefined2 *)(param_4 + 0x18);\n      puVar2[uVar11 + 5] = uVar12;\n      puVar2[uVar11 + 6] = uVar10;\n      puVar2[uVar11 + 7] = 0;\n      return 0;\n    }" { (expression_statement "*(undefined1 *)(param_4 + 0xc) = 0;" (assignment_expression "*(undefined1 *)(param_4 + 0xc) = 0" (pointer_expression "*(undefined1 *)(param_4 + 0xc)" * (cast_expression "(undefined1 *)(param_4 + 0xc)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0xc)" ( (binary_expression "param_4 + 0xc" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined2 *)(param_4 + 0x18) = extraout_CX;" (assignment_expression "*(undefined2 *)(param_4 + 0x18) = extraout_CX" (pointer_expression "*(undefined2 *)(param_4 + 0x18)" * (cast_expression "(undefined2 *)(param_4 + 0x18)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x18)" ( (binary_expression "param_4 + 0x18" identifier + number_literal) )))) = identifier) ;) (expression_statement "puVar2[uVar11 + 1] = 0;" (assignment_expression "puVar2[uVar11 + 1] = 0" (subscript_expression "puVar2[uVar11 + 1]" identifier [ (binary_expression "uVar11 + 1" identifier + number_literal) ]) = number_literal) ;) (expression_statement "puVar2[uVar11 + 2] = 0;" (assignment_expression "puVar2[uVar11 + 2] = 0" (subscript_expression "puVar2[uVar11 + 2]" identifier [ (binary_expression "uVar11 + 2" identifier + number_literal) ]) = number_literal) ;) (expression_statement "puVar2[uVar11 + 3] = *(undefined1 *)(param_4 + 0x19);" (assignment_expression "puVar2[uVar11 + 3] = *(undefined1 *)(param_4 + 0x19)" (subscript_expression "puVar2[uVar11 + 3]" identifier [ (binary_expression "uVar11 + 3" identifier + number_literal) ]) = (pointer_expression "*(undefined1 *)(param_4 + 0x19)" * (cast_expression "(undefined1 *)(param_4 + 0x19)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x19)" ( (binary_expression "param_4 + 0x19" identifier + number_literal) ))))) ;) (expression_statement "puVar2[uVar11 + 4] = (char)*(undefined2 *)(param_4 + 0x18);" (assignment_expression "puVar2[uVar11 + 4] = (char)*(undefined2 *)(param_4 + 0x18)" (subscript_expression "puVar2[uVar11 + 4]" identifier [ (binary_expression "uVar11 + 4" identifier + number_literal) ]) = (cast_expression "(char)*(undefined2 *)(param_4 + 0x18)" ( (type_descriptor "char" primitive_type) ) (pointer_expression "*(undefined2 *)(param_4 + 0x18)" * (cast_expression "(undefined2 *)(param_4 + 0x18)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x18)" ( (binary_expression "param_4 + 0x18" identifier + number_literal) )))))) ;) (expression_statement "puVar2[uVar11 + 5] = uVar12;" (assignment_expression "puVar2[uVar11 + 5] = uVar12" (subscript_expression "puVar2[uVar11 + 5]" identifier [ (binary_expression "uVar11 + 5" identifier + number_literal) ]) = identifier) ;) (expression_statement "puVar2[uVar11 + 6] = uVar10;" (assignment_expression "puVar2[uVar11 + 6] = uVar10" (subscript_expression "puVar2[uVar11 + 6]" identifier [ (binary_expression "uVar11 + 6" identifier + number_literal) ]) = identifier) ;) (expression_statement "puVar2[uVar11 + 7] = 0;" (assignment_expression "puVar2[uVar11 + 7] = 0" (subscript_expression "puVar2[uVar11 + 7]" identifier [ (binary_expression "uVar11 + 7" identifier + number_literal) ]) = number_literal) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar1 = iVar6 + local_50 * 4;" (assignment_expression "iVar1 = iVar6 + local_50 * 4" identifier = (binary_expression "iVar6 + local_50 * 4" identifier + (binary_expression "local_50 * 4" identifier * number_literal))) ;) (if_statement "if (*(int *)(iVar1 + 0x28) <= param_2) {\n      local_44 = *(undefined1 **)(iVar1 + 0x14);\n      local_50 = local_50 + 1;\n    }" if (parenthesized_expression "(*(int *)(iVar1 + 0x28) <= param_2)" ( (binary_expression "*(int *)(iVar1 + 0x28) <= param_2" (pointer_expression "*(int *)(iVar1 + 0x28)" * (cast_expression "(int *)(iVar1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0x28)" ( (binary_expression "iVar1 + 0x28" identifier + number_literal) )))) <= identifier) )) (compound_statement "{\n      local_44 = *(undefined1 **)(iVar1 + 0x14);\n      local_50 = local_50 + 1;\n    }" { (expression_statement "local_44 = *(undefined1 **)(iVar1 + 0x14);" (assignment_expression "local_44 = *(undefined1 **)(iVar1 + 0x14)" identifier = (pointer_expression "*(undefined1 **)(iVar1 + 0x14)" * (cast_expression "(undefined1 **)(iVar1 + 0x14)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar1 + 0x14)" ( (binary_expression "iVar1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "local_50 = local_50 + 1;" (assignment_expression "local_50 = local_50 + 1" identifier = (binary_expression "local_50 + 1" identifier + number_literal)) ;) })) (expression_statement "local_5c = local_5c + 4;" (assignment_expression "local_5c = local_5c + 4" identifier = (binary_expression "local_5c + 4" identifier + number_literal)) ;) (expression_statement "puVar14 = puVar14 + 2;" (assignment_expression "puVar14 = puVar14 + 2" identifier = (binary_expression "puVar14 + 2" identifier + number_literal)) ;) })) (expression_statement "uVar8 = FUN_000383f0();" (assignment_expression "uVar8 = FUN_000383f0()" identifier = (call_expression "FUN_000383f0()" identifier (argument_list "()" ( )))) ;) (return_statement "return uVar8;" return identifier ;) })))
(translation_unit "int __regparm3 rebuildPage(CellArray *pCArray,int iFirst,int nCell,MemPage *pPg)\n\n{\n  int iVar1;\n  u8 *puVar2;\n  char *pcVar3;\n  u8 *puVar4;\n  int iVar5;\n  int iVar6;\n  uint uVar7;\n  char *__dest;\n  u8 *__src;\n  u16 extraout_CX;\n  u8 *puVar8;\n  u8 uVar9;\n  uint uVar10;\n  u8 uVar11;\n  int iVar12;\n  u8 *puVar13;\n  u8 *puVar14;\n  size_t local_64;\n  int local_5c;\n  int local_50;\n  u8 *local_44;\n  \n  iVar6 = __x86_get_pc_thunk_di();\n  iVar12 = nCell + iFirst;\n  puVar2 = pPg->aData;\n  local_64 = pPg->pBt->usableSize;\n  puVar8 = puVar2 + local_64;\n  uVar10 = (uint)pPg->hdrOffset;\n  pcVar3 = pPg->pBt->pPager->pTmpSpace;\n  puVar4 = pPg->aCellIdx;\n  uVar7 = (uint)CONCAT11(puVar2[uVar10 + 5],puVar2[uVar10 + 6]);\n  __dest = pcVar3;\n  puVar13 = puVar2;\n  if (uVar7 <= local_64) {\n    local_64 = local_64 - uVar7;\n    __dest = pcVar3 + uVar7;\n    puVar13 = puVar2 + uVar7;\n  }\n  memcpy(__dest,puVar13,local_64);\n  if (iFirst < *(int *)(iVar6 + 0x28)) {\n    local_50 = 0;\n  }\n  else {\n    local_50 = 0;\n    do {\n      local_50 = local_50 + 1;\n      if (iFirst < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;\n    } while (local_50 != 6);\n  }\n  local_44 = *(u8 **)(iVar6 + 0x10 + local_50 * 4);\n  local_5c = iFirst * 4;\n  iVar5 = iFirst * 2;\n  puVar13 = puVar8;\n  puVar14 = puVar4;\n  do {\n    __src = *(u8 **)(*(int *)(iVar6 + 8) + local_5c);\n    uVar7 = (uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc));\n    if ((__src < puVar2) || (puVar8 <= __src)) {\n      if ((__src < local_44) && (local_44 < __src + uVar7)) {\n        iVar6 = 0x11724;\n        goto LAB_000395cd;\n      }\n    }\n    else {\n      if (puVar8 < __src + uVar7) {\n        iVar6 = sqlite3CorruptError(0x1171f);\n        return iVar6;\n      }\n      __src = (u8 *)(pcVar3 + ((int)__src - (int)puVar2));\n    }\n    puVar13 = puVar13 + -uVar7;\n    uVar9 = (u8)((int)puVar13 - (int)puVar2);\n    puVar14[1] = uVar9;\n    uVar11 = (u8)((uint)((int)puVar13 - (int)puVar2) >> 8);\n    *puVar14 = uVar11;\n    if (puVar13 < puVar14 + 2) {\n      iVar6 = 0x1172a;\nLAB_000395cd:\n      iVar6 = sqlite3CorruptError(iVar6);\n      return iVar6;\n    }\n    iFirst = iFirst + 1;\n    memcpy(puVar13,__src,uVar7);\n    if (iVar12 <= iFirst) {\n      pPg->nOverflow = '\0';\n      pPg->nCell = extraout_CX;\n      puVar2[uVar10 + 1] = '\0';\n      puVar2[uVar10 + 2] = '\0';\n      puVar2[uVar10 + 3] = *(u8 *)((int)&pPg->nCell + 1);\n      puVar2[uVar10 + 4] = (u8)pPg->nCell;\n      puVar2[uVar10 + 5] = uVar11;\n      puVar2[uVar10 + 6] = uVar9;\n      puVar2[uVar10 + 7] = '\0';\n      return 0;\n    }\n    iVar1 = iVar6 + local_50 * 4;\n    if (*(int *)(iVar1 + 0x28) <= iFirst) {\n      local_44 = *(u8 **)(iVar1 + 0x14);\n      local_50 = local_50 + 1;\n    }\n    local_5c = local_5c + 4;\n    puVar14 = puVar14 + 2;\n  } while( true );\n}\n\n" (function_definition "int __regparm3 rebuildPage(CellArray *pCArray,int iFirst,int nCell,MemPage *pPg)\n\n{\n  int iVar1;\n  u8 *puVar2;\n  char *pcVar3;\n  u8 *puVar4;\n  int iVar5;\n  int iVar6;\n  uint uVar7;\n  char *__dest;\n  u8 *__src;\n  u16 extraout_CX;\n  u8 *puVar8;\n  u8 uVar9;\n  uint uVar10;\n  u8 uVar11;\n  int iVar12;\n  u8 *puVar13;\n  u8 *puVar14;\n  size_t local_64;\n  int local_5c;\n  int local_50;\n  u8 *local_44;\n  \n  iVar6 = __x86_get_pc_thunk_di();\n  iVar12 = nCell + iFirst;\n  puVar2 = pPg->aData;\n  local_64 = pPg->pBt->usableSize;\n  puVar8 = puVar2 + local_64;\n  uVar10 = (uint)pPg->hdrOffset;\n  pcVar3 = pPg->pBt->pPager->pTmpSpace;\n  puVar4 = pPg->aCellIdx;\n  uVar7 = (uint)CONCAT11(puVar2[uVar10 + 5],puVar2[uVar10 + 6]);\n  __dest = pcVar3;\n  puVar13 = puVar2;\n  if (uVar7 <= local_64) {\n    local_64 = local_64 - uVar7;\n    __dest = pcVar3 + uVar7;\n    puVar13 = puVar2 + uVar7;\n  }\n  memcpy(__dest,puVar13,local_64);\n  if (iFirst < *(int *)(iVar6 + 0x28)) {\n    local_50 = 0;\n  }\n  else {\n    local_50 = 0;\n    do {\n      local_50 = local_50 + 1;\n      if (iFirst < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;\n    } while (local_50 != 6);\n  }\n  local_44 = *(u8 **)(iVar6 + 0x10 + local_50 * 4);\n  local_5c = iFirst * 4;\n  iVar5 = iFirst * 2;\n  puVar13 = puVar8;\n  puVar14 = puVar4;\n  do {\n    __src = *(u8 **)(*(int *)(iVar6 + 8) + local_5c);\n    uVar7 = (uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc));\n    if ((__src < puVar2) || (puVar8 <= __src)) {\n      if ((__src < local_44) && (local_44 < __src + uVar7)) {\n        iVar6 = 0x11724;\n        goto LAB_000395cd;\n      }\n    }\n    else {\n      if (puVar8 < __src + uVar7) {\n        iVar6 = sqlite3CorruptError(0x1171f);\n        return iVar6;\n      }\n      __src = (u8 *)(pcVar3 + ((int)__src - (int)puVar2));\n    }\n    puVar13 = puVar13 + -uVar7;\n    uVar9 = (u8)((int)puVar13 - (int)puVar2);\n    puVar14[1] = uVar9;\n    uVar11 = (u8)((uint)((int)puVar13 - (int)puVar2) >> 8);\n    *puVar14 = uVar11;\n    if (puVar13 < puVar14 + 2) {\n      iVar6 = 0x1172a;\nLAB_000395cd:\n      iVar6 = sqlite3CorruptError(iVar6);\n      return iVar6;\n    }\n    iFirst = iFirst + 1;\n    memcpy(puVar13,__src,uVar7);\n    if (iVar12 <= iFirst) {\n      pPg->nOverflow = '\0';\n      pPg->nCell = extraout_CX;\n      puVar2[uVar10 + 1] = '\0';\n      puVar2[uVar10 + 2] = '\0';\n      puVar2[uVar10 + 3] = *(u8 *)((int)&pPg->nCell + 1);\n      puVar2[uVar10 + 4] = (u8)pPg->nCell;\n      puVar2[uVar10 + 5] = uVar11;\n      puVar2[uVar10 + 6] = uVar9;\n      puVar2[uVar10 + 7] = '\0';\n      return 0;\n    }\n    iVar1 = iVar6 + local_50 * 4;\n    if (*(int *)(iVar1 + 0x28) <= iFirst) {\n      local_44 = *(u8 **)(iVar1 + 0x14);\n      local_50 = local_50 + 1;\n    }\n    local_5c = local_5c + 4;\n    puVar14 = puVar14 + 2;\n  } while( true );\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "rebuildPage(CellArray *pCArray,int iFirst,int nCell,MemPage *pPg)" identifier (parameter_list "(CellArray *pCArray,int iFirst,int nCell,MemPage *pPg)" ( (parameter_declaration "CellArray *pCArray" type_identifier (pointer_declarator "*pCArray" * identifier)) , (parameter_declaration "int iFirst" primitive_type identifier) , (parameter_declaration "int nCell" primitive_type identifier) , (parameter_declaration "MemPage *pPg" type_identifier (pointer_declarator "*pPg" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  u8 *puVar2;\n  char *pcVar3;\n  u8 *puVar4;\n  int iVar5;\n  int iVar6;\n  uint uVar7;\n  char *__dest;\n  u8 *__src;\n  u16 extraout_CX;\n  u8 *puVar8;\n  u8 uVar9;\n  uint uVar10;\n  u8 uVar11;\n  int iVar12;\n  u8 *puVar13;\n  u8 *puVar14;\n  size_t local_64;\n  int local_5c;\n  int local_50;\n  u8 *local_44;\n  \n  iVar6 = __x86_get_pc_thunk_di();\n  iVar12 = nCell + iFirst;\n  puVar2 = pPg->aData;\n  local_64 = pPg->pBt->usableSize;\n  puVar8 = puVar2 + local_64;\n  uVar10 = (uint)pPg->hdrOffset;\n  pcVar3 = pPg->pBt->pPager->pTmpSpace;\n  puVar4 = pPg->aCellIdx;\n  uVar7 = (uint)CONCAT11(puVar2[uVar10 + 5],puVar2[uVar10 + 6]);\n  __dest = pcVar3;\n  puVar13 = puVar2;\n  if (uVar7 <= local_64) {\n    local_64 = local_64 - uVar7;\n    __dest = pcVar3 + uVar7;\n    puVar13 = puVar2 + uVar7;\n  }\n  memcpy(__dest,puVar13,local_64);\n  if (iFirst < *(int *)(iVar6 + 0x28)) {\n    local_50 = 0;\n  }\n  else {\n    local_50 = 0;\n    do {\n      local_50 = local_50 + 1;\n      if (iFirst < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;\n    } while (local_50 != 6);\n  }\n  local_44 = *(u8 **)(iVar6 + 0x10 + local_50 * 4);\n  local_5c = iFirst * 4;\n  iVar5 = iFirst * 2;\n  puVar13 = puVar8;\n  puVar14 = puVar4;\n  do {\n    __src = *(u8 **)(*(int *)(iVar6 + 8) + local_5c);\n    uVar7 = (uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc));\n    if ((__src < puVar2) || (puVar8 <= __src)) {\n      if ((__src < local_44) && (local_44 < __src + uVar7)) {\n        iVar6 = 0x11724;\n        goto LAB_000395cd;\n      }\n    }\n    else {\n      if (puVar8 < __src + uVar7) {\n        iVar6 = sqlite3CorruptError(0x1171f);\n        return iVar6;\n      }\n      __src = (u8 *)(pcVar3 + ((int)__src - (int)puVar2));\n    }\n    puVar13 = puVar13 + -uVar7;\n    uVar9 = (u8)((int)puVar13 - (int)puVar2);\n    puVar14[1] = uVar9;\n    uVar11 = (u8)((uint)((int)puVar13 - (int)puVar2) >> 8);\n    *puVar14 = uVar11;\n    if (puVar13 < puVar14 + 2) {\n      iVar6 = 0x1172a;\nLAB_000395cd:\n      iVar6 = sqlite3CorruptError(iVar6);\n      return iVar6;\n    }\n    iFirst = iFirst + 1;\n    memcpy(puVar13,__src,uVar7);\n    if (iVar12 <= iFirst) {\n      pPg->nOverflow = '\0';\n      pPg->nCell = extraout_CX;\n      puVar2[uVar10 + 1] = '\0';\n      puVar2[uVar10 + 2] = '\0';\n      puVar2[uVar10 + 3] = *(u8 *)((int)&pPg->nCell + 1);\n      puVar2[uVar10 + 4] = (u8)pPg->nCell;\n      puVar2[uVar10 + 5] = uVar11;\n      puVar2[uVar10 + 6] = uVar9;\n      puVar2[uVar10 + 7] = '\0';\n      return 0;\n    }\n    iVar1 = iVar6 + local_50 * 4;\n    if (*(int *)(iVar1 + 0x28) <= iFirst) {\n      local_44 = *(u8 **)(iVar1 + 0x14);\n      local_50 = local_50 + 1;\n    }\n    local_5c = local_5c + 4;\n    puVar14 = puVar14 + 2;\n  } while( true );\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "u8 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "u8 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "char *__dest;" primitive_type (pointer_declarator "*__dest" * identifier) ;) (declaration "u8 *__src;" type_identifier (pointer_declarator "*__src" * identifier) ;) (declaration "u16 extraout_CX;" type_identifier identifier ;) (declaration "u8 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "u8 uVar9;" type_identifier identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "u8 uVar11;" type_identifier identifier ;) (declaration "int iVar12;" primitive_type identifier ;) (declaration "u8 *puVar13;" type_identifier (pointer_declarator "*puVar13" * identifier) ;) (declaration "u8 *puVar14;" type_identifier (pointer_declarator "*puVar14" * identifier) ;) (declaration "size_t local_64;" primitive_type identifier ;) (declaration "int local_5c;" primitive_type identifier ;) (declaration "int local_50;" primitive_type identifier ;) (declaration "u8 *local_44;" type_identifier (pointer_declarator "*local_44" * identifier) ;) (expression_statement "iVar6 = __x86_get_pc_thunk_di();" (assignment_expression "iVar6 = __x86_get_pc_thunk_di()" identifier = (call_expression "__x86_get_pc_thunk_di()" identifier (argument_list "()" ( )))) ;) (expression_statement "iVar12 = nCell + iFirst;" (assignment_expression "iVar12 = nCell + iFirst" identifier = (binary_expression "nCell + iFirst" identifier + identifier)) ;) (expression_statement "puVar2 = pPg->aData;" (assignment_expression "puVar2 = pPg->aData" identifier = (field_expression "pPg->aData" identifier -> field_identifier)) ;) (expression_statement "local_64 = pPg->pBt->usableSize;" (assignment_expression "local_64 = pPg->pBt->usableSize" identifier = (field_expression "pPg->pBt->usableSize" (field_expression "pPg->pBt" identifier -> field_identifier) -> field_identifier)) ;) (expression_statement "puVar8 = puVar2 + local_64;" (assignment_expression "puVar8 = puVar2 + local_64" identifier = (binary_expression "puVar2 + local_64" identifier + identifier)) ;) (expression_statement "uVar10 = (uint)pPg->hdrOffset;" (assignment_expression "uVar10 = (uint)pPg->hdrOffset" identifier = (cast_expression "(uint)pPg->hdrOffset" ( (type_descriptor "uint" type_identifier) ) (field_expression "pPg->hdrOffset" identifier -> field_identifier))) ;) (expression_statement "pcVar3 = pPg->pBt->pPager->pTmpSpace;" (assignment_expression "pcVar3 = pPg->pBt->pPager->pTmpSpace" identifier = (field_expression "pPg->pBt->pPager->pTmpSpace" (field_expression "pPg->pBt->pPager" (field_expression "pPg->pBt" identifier -> field_identifier) -> field_identifier) -> field_identifier)) ;) (expression_statement "puVar4 = pPg->aCellIdx;" (assignment_expression "puVar4 = pPg->aCellIdx" identifier = (field_expression "pPg->aCellIdx" identifier -> field_identifier)) ;) (expression_statement "uVar7 = (uint)CONCAT11(puVar2[uVar10 + 5],puVar2[uVar10 + 6]);" (assignment_expression "uVar7 = (uint)CONCAT11(puVar2[uVar10 + 5],puVar2[uVar10 + 6])" identifier = (cast_expression "(uint)CONCAT11(puVar2[uVar10 + 5],puVar2[uVar10 + 6])" ( (type_descriptor "uint" type_identifier) ) (call_expression "CONCAT11(puVar2[uVar10 + 5],puVar2[uVar10 + 6])" identifier (argument_list "(puVar2[uVar10 + 5],puVar2[uVar10 + 6])" ( (subscript_expression "puVar2[uVar10 + 5]" identifier [ (binary_expression "uVar10 + 5" identifier + number_literal) ]) , (subscript_expression "puVar2[uVar10 + 6]" identifier [ (binary_expression "uVar10 + 6" identifier + number_literal) ]) ))))) ;) (expression_statement "__dest = pcVar3;" (assignment_expression "__dest = pcVar3" identifier = identifier) ;) (expression_statement "puVar13 = puVar2;" (assignment_expression "puVar13 = puVar2" identifier = identifier) ;) (if_statement "if (uVar7 <= local_64) {\n    local_64 = local_64 - uVar7;\n    __dest = pcVar3 + uVar7;\n    puVar13 = puVar2 + uVar7;\n  }" if (parenthesized_expression "(uVar7 <= local_64)" ( (binary_expression "uVar7 <= local_64" identifier <= identifier) )) (compound_statement "{\n    local_64 = local_64 - uVar7;\n    __dest = pcVar3 + uVar7;\n    puVar13 = puVar2 + uVar7;\n  }" { (expression_statement "local_64 = local_64 - uVar7;" (assignment_expression "local_64 = local_64 - uVar7" identifier = (binary_expression "local_64 - uVar7" identifier - identifier)) ;) (expression_statement "__dest = pcVar3 + uVar7;" (assignment_expression "__dest = pcVar3 + uVar7" identifier = (binary_expression "pcVar3 + uVar7" identifier + identifier)) ;) (expression_statement "puVar13 = puVar2 + uVar7;" (assignment_expression "puVar13 = puVar2 + uVar7" identifier = (binary_expression "puVar2 + uVar7" identifier + identifier)) ;) })) (expression_statement "memcpy(__dest,puVar13,local_64);" (call_expression "memcpy(__dest,puVar13,local_64)" identifier (argument_list "(__dest,puVar13,local_64)" ( identifier , identifier , identifier ))) ;) (if_statement "if (iFirst < *(int *)(iVar6 + 0x28)) {\n    local_50 = 0;\n  }\n  else {\n    local_50 = 0;\n    do {\n      local_50 = local_50 + 1;\n      if (iFirst < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;\n    } while (local_50 != 6);\n  }" if (parenthesized_expression "(iFirst < *(int *)(iVar6 + 0x28))" ( (binary_expression "iFirst < *(int *)(iVar6 + 0x28)" identifier < (pointer_expression "*(int *)(iVar6 + 0x28)" * (cast_expression "(int *)(iVar6 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 0x28)" ( (binary_expression "iVar6 + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n    local_50 = 0;\n  }" { (expression_statement "local_50 = 0;" (assignment_expression "local_50 = 0" identifier = number_literal) ;) }) (else_clause "else {\n    local_50 = 0;\n    do {\n      local_50 = local_50 + 1;\n      if (iFirst < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;\n    } while (local_50 != 6);\n  }" else (compound_statement "{\n    local_50 = 0;\n    do {\n      local_50 = local_50 + 1;\n      if (iFirst < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;\n    } while (local_50 != 6);\n  }" { (expression_statement "local_50 = 0;" (assignment_expression "local_50 = 0" identifier = number_literal) ;) (do_statement "do {\n      local_50 = local_50 + 1;\n      if (iFirst < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;\n    } while (local_50 != 6);" do (compound_statement "{\n      local_50 = local_50 + 1;\n      if (iFirst < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;\n    }" { (expression_statement "local_50 = local_50 + 1;" (assignment_expression "local_50 = local_50 + 1" identifier = (binary_expression "local_50 + 1" identifier + number_literal)) ;) (if_statement "if (iFirst < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;" if (parenthesized_expression "(iFirst < *(int *)(iVar6 + 0x28 + local_50 * 4))" ( (binary_expression "iFirst < *(int *)(iVar6 + 0x28 + local_50 * 4)" identifier < (pointer_expression "*(int *)(iVar6 + 0x28 + local_50 * 4)" * (cast_expression "(int *)(iVar6 + 0x28 + local_50 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 0x28 + local_50 * 4)" ( (binary_expression "iVar6 + 0x28 + local_50 * 4" (binary_expression "iVar6 + 0x28" identifier + number_literal) + (binary_expression "local_50 * 4" identifier * number_literal)) ))))) )) (break_statement "break;" break ;)) }) while (parenthesized_expression "(local_50 != 6)" ( (binary_expression "local_50 != 6" identifier != number_literal) )) ;) }))) (expression_statement "local_44 = *(u8 **)(iVar6 + 0x10 + local_50 * 4);" (assignment_expression "local_44 = *(u8 **)(iVar6 + 0x10 + local_50 * 4)" identifier = (pointer_expression "*(u8 **)(iVar6 + 0x10 + local_50 * 4)" * (cast_expression "(u8 **)(iVar6 + 0x10 + local_50 * 4)" ( (type_descriptor "u8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar6 + 0x10 + local_50 * 4)" ( (binary_expression "iVar6 + 0x10 + local_50 * 4" (binary_expression "iVar6 + 0x10" identifier + number_literal) + (binary_expression "local_50 * 4" identifier * number_literal)) ))))) ;) (expression_statement "local_5c = iFirst * 4;" (assignment_expression "local_5c = iFirst * 4" identifier = (binary_expression "iFirst * 4" identifier * number_literal)) ;) (expression_statement "iVar5 = iFirst * 2;" (assignment_expression "iVar5 = iFirst * 2" identifier = (binary_expression "iFirst * 2" identifier * number_literal)) ;) (expression_statement "puVar13 = puVar8;" (assignment_expression "puVar13 = puVar8" identifier = identifier) ;) (expression_statement "puVar14 = puVar4;" (assignment_expression "puVar14 = puVar4" identifier = identifier) ;) (do_statement "do {\n    __src = *(u8 **)(*(int *)(iVar6 + 8) + local_5c);\n    uVar7 = (uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc));\n    if ((__src < puVar2) || (puVar8 <= __src)) {\n      if ((__src < local_44) && (local_44 < __src + uVar7)) {\n        iVar6 = 0x11724;\n        goto LAB_000395cd;\n      }\n    }\n    else {\n      if (puVar8 < __src + uVar7) {\n        iVar6 = sqlite3CorruptError(0x1171f);\n        return iVar6;\n      }\n      __src = (u8 *)(pcVar3 + ((int)__src - (int)puVar2));\n    }\n    puVar13 = puVar13 + -uVar7;\n    uVar9 = (u8)((int)puVar13 - (int)puVar2);\n    puVar14[1] = uVar9;\n    uVar11 = (u8)((uint)((int)puVar13 - (int)puVar2) >> 8);\n    *puVar14 = uVar11;\n    if (puVar13 < puVar14 + 2) {\n      iVar6 = 0x1172a;\nLAB_000395cd:\n      iVar6 = sqlite3CorruptError(iVar6);\n      return iVar6;\n    }\n    iFirst = iFirst + 1;\n    memcpy(puVar13,__src,uVar7);\n    if (iVar12 <= iFirst) {\n      pPg->nOverflow = '\0';\n      pPg->nCell = extraout_CX;\n      puVar2[uVar10 + 1] = '\0';\n      puVar2[uVar10 + 2] = '\0';\n      puVar2[uVar10 + 3] = *(u8 *)((int)&pPg->nCell + 1);\n      puVar2[uVar10 + 4] = (u8)pPg->nCell;\n      puVar2[uVar10 + 5] = uVar11;\n      puVar2[uVar10 + 6] = uVar9;\n      puVar2[uVar10 + 7] = '\0';\n      return 0;\n    }\n    iVar1 = iVar6 + local_50 * 4;\n    if (*(int *)(iVar1 + 0x28) <= iFirst) {\n      local_44 = *(u8 **)(iVar1 + 0x14);\n      local_50 = local_50 + 1;\n    }\n    local_5c = local_5c + 4;\n    puVar14 = puVar14 + 2;\n  } while( true );" do (compound_statement "{\n    __src = *(u8 **)(*(int *)(iVar6 + 8) + local_5c);\n    uVar7 = (uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc));\n    if ((__src < puVar2) || (puVar8 <= __src)) {\n      if ((__src < local_44) && (local_44 < __src + uVar7)) {\n        iVar6 = 0x11724;\n        goto LAB_000395cd;\n      }\n    }\n    else {\n      if (puVar8 < __src + uVar7) {\n        iVar6 = sqlite3CorruptError(0x1171f);\n        return iVar6;\n      }\n      __src = (u8 *)(pcVar3 + ((int)__src - (int)puVar2));\n    }\n    puVar13 = puVar13 + -uVar7;\n    uVar9 = (u8)((int)puVar13 - (int)puVar2);\n    puVar14[1] = uVar9;\n    uVar11 = (u8)((uint)((int)puVar13 - (int)puVar2) >> 8);\n    *puVar14 = uVar11;\n    if (puVar13 < puVar14 + 2) {\n      iVar6 = 0x1172a;\nLAB_000395cd:\n      iVar6 = sqlite3CorruptError(iVar6);\n      return iVar6;\n    }\n    iFirst = iFirst + 1;\n    memcpy(puVar13,__src,uVar7);\n    if (iVar12 <= iFirst) {\n      pPg->nOverflow = '\0';\n      pPg->nCell = extraout_CX;\n      puVar2[uVar10 + 1] = '\0';\n      puVar2[uVar10 + 2] = '\0';\n      puVar2[uVar10 + 3] = *(u8 *)((int)&pPg->nCell + 1);\n      puVar2[uVar10 + 4] = (u8)pPg->nCell;\n      puVar2[uVar10 + 5] = uVar11;\n      puVar2[uVar10 + 6] = uVar9;\n      puVar2[uVar10 + 7] = '\0';\n      return 0;\n    }\n    iVar1 = iVar6 + local_50 * 4;\n    if (*(int *)(iVar1 + 0x28) <= iFirst) {\n      local_44 = *(u8 **)(iVar1 + 0x14);\n      local_50 = local_50 + 1;\n    }\n    local_5c = local_5c + 4;\n    puVar14 = puVar14 + 2;\n  }" { (expression_statement "__src = *(u8 **)(*(int *)(iVar6 + 8) + local_5c);" (assignment_expression "__src = *(u8 **)(*(int *)(iVar6 + 8) + local_5c)" identifier = (pointer_expression "*(u8 **)(*(int *)(iVar6 + 8) + local_5c)" * (cast_expression "(u8 **)(*(int *)(iVar6 + 8) + local_5c)" ( (type_descriptor "u8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(iVar6 + 8) + local_5c)" ( (binary_expression "*(int *)(iVar6 + 8) + local_5c" (pointer_expression "*(int *)(iVar6 + 8)" * (cast_expression "(int *)(iVar6 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 8)" ( (binary_expression "iVar6 + 8" identifier + number_literal) )))) + identifier) ))))) ;) (expression_statement "uVar7 = (uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc));" (assignment_expression "uVar7 = (uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc))" identifier = (binary_expression "(uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc))" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc))" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc))" ( (binary_expression "puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc)" (binary_expression "puVar14 + (iVar5 - (int)puVar4)" identifier + (parenthesized_expression "(iVar5 - (int)puVar4)" ( (binary_expression "iVar5 - (int)puVar4" identifier - (cast_expression "(int)puVar4" ( (type_descriptor "int" primitive_type) ) identifier)) ))) + (pointer_expression "*(int *)(iVar6 + 0xc)" * (cast_expression "(int *)(iVar6 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 0xc)" ( (binary_expression "iVar6 + 0xc" identifier + number_literal) ))))) ))))) ;) (if_statement "if ((__src < puVar2) || (puVar8 <= __src)) {\n      if ((__src < local_44) && (local_44 < __src + uVar7)) {\n        iVar6 = 0x11724;\n        goto LAB_000395cd;\n      }\n    }\n    else {\n      if (puVar8 < __src + uVar7) {\n        iVar6 = sqlite3CorruptError(0x1171f);\n        return iVar6;\n      }\n      __src = (u8 *)(pcVar3 + ((int)__src - (int)puVar2));\n    }" if (parenthesized_expression "((__src < puVar2) || (puVar8 <= __src))" ( (binary_expression "(__src < puVar2) || (puVar8 <= __src)" (parenthesized_expression "(__src < puVar2)" ( (binary_expression "__src < puVar2" identifier < identifier) )) || (parenthesized_expression "(puVar8 <= __src)" ( (binary_expression "puVar8 <= __src" identifier <= identifier) ))) )) (compound_statement "{\n      if ((__src < local_44) && (local_44 < __src + uVar7)) {\n        iVar6 = 0x11724;\n        goto LAB_000395cd;\n      }\n    }" { (if_statement "if ((__src < local_44) && (local_44 < __src + uVar7)) {\n        iVar6 = 0x11724;\n        goto LAB_000395cd;\n      }" if (parenthesized_expression "((__src < local_44) && (local_44 < __src + uVar7))" ( (binary_expression "(__src < local_44) && (local_44 < __src + uVar7)" (parenthesized_expression "(__src < local_44)" ( (binary_expression "__src < local_44" identifier < identifier) )) && (parenthesized_expression "(local_44 < __src + uVar7)" ( (binary_expression "local_44 < __src + uVar7" identifier < (binary_expression "__src + uVar7" identifier + identifier)) ))) )) (compound_statement "{\n        iVar6 = 0x11724;\n        goto LAB_000395cd;\n      }" { (expression_statement "iVar6 = 0x11724;" (assignment_expression "iVar6 = 0x11724" identifier = number_literal) ;) (goto_statement "goto LAB_000395cd;" goto statement_identifier ;) })) }) (else_clause "else {\n      if (puVar8 < __src + uVar7) {\n        iVar6 = sqlite3CorruptError(0x1171f);\n        return iVar6;\n      }\n      __src = (u8 *)(pcVar3 + ((int)__src - (int)puVar2));\n    }" else (compound_statement "{\n      if (puVar8 < __src + uVar7) {\n        iVar6 = sqlite3CorruptError(0x1171f);\n        return iVar6;\n      }\n      __src = (u8 *)(pcVar3 + ((int)__src - (int)puVar2));\n    }" { (if_statement "if (puVar8 < __src + uVar7) {\n        iVar6 = sqlite3CorruptError(0x1171f);\n        return iVar6;\n      }" if (parenthesized_expression "(puVar8 < __src + uVar7)" ( (binary_expression "puVar8 < __src + uVar7" identifier < (binary_expression "__src + uVar7" identifier + identifier)) )) (compound_statement "{\n        iVar6 = sqlite3CorruptError(0x1171f);\n        return iVar6;\n      }" { (expression_statement "iVar6 = sqlite3CorruptError(0x1171f);" (assignment_expression "iVar6 = sqlite3CorruptError(0x1171f)" identifier = (call_expression "sqlite3CorruptError(0x1171f)" identifier (argument_list "(0x1171f)" ( number_literal )))) ;) (return_statement "return iVar6;" return identifier ;) })) (expression_statement "__src = (u8 *)(pcVar3 + ((int)__src - (int)puVar2));" (assignment_expression "__src = (u8 *)(pcVar3 + ((int)__src - (int)puVar2))" identifier = (cast_expression "(u8 *)(pcVar3 + ((int)__src - (int)puVar2))" ( (type_descriptor "u8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar3 + ((int)__src - (int)puVar2))" ( (binary_expression "pcVar3 + ((int)__src - (int)puVar2)" identifier + (parenthesized_expression "((int)__src - (int)puVar2)" ( (binary_expression "(int)__src - (int)puVar2" (cast_expression "(int)__src" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)puVar2" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )))) ;) }))) (expression_statement "puVar13 = puVar13 + -uVar7;" (assignment_expression "puVar13 = puVar13 + -uVar7" identifier = (binary_expression "puVar13 + -uVar7" identifier + (unary_expression "-uVar7" - identifier))) ;) (expression_statement "uVar9 = (u8)((int)puVar13 - (int)puVar2);" (assignment_expression "uVar9 = (u8)((int)puVar13 - (int)puVar2)" identifier = (call_expression "(u8)((int)puVar13 - (int)puVar2)" (parenthesized_expression "(u8)" ( identifier )) (argument_list "((int)puVar13 - (int)puVar2)" ( (binary_expression "(int)puVar13 - (int)puVar2" (cast_expression "(int)puVar13" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)puVar2" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) (expression_statement "puVar14[1] = uVar9;" (assignment_expression "puVar14[1] = uVar9" (subscript_expression "puVar14[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar11 = (u8)((uint)((int)puVar13 - (int)puVar2) >> 8);" (assignment_expression "uVar11 = (u8)((uint)((int)puVar13 - (int)puVar2) >> 8)" identifier = (call_expression "(u8)((uint)((int)puVar13 - (int)puVar2) >> 8)" (parenthesized_expression "(u8)" ( identifier )) (argument_list "((uint)((int)puVar13 - (int)puVar2) >> 8)" ( (binary_expression "(uint)((int)puVar13 - (int)puVar2) >> 8" (call_expression "(uint)((int)puVar13 - (int)puVar2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((int)puVar13 - (int)puVar2)" ( (binary_expression "(int)puVar13 - (int)puVar2" (cast_expression "(int)puVar13" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)puVar2" ( (type_descriptor "int" primitive_type) ) identifier)) ))) >> number_literal) )))) ;) (expression_statement "*puVar14 = uVar11;" (assignment_expression "*puVar14 = uVar11" (pointer_expression "*puVar14" * identifier) = identifier) ;) (if_statement "if (puVar13 < puVar14 + 2) {\n      iVar6 = 0x1172a;\nLAB_000395cd:\n      iVar6 = sqlite3CorruptError(iVar6);\n      return iVar6;\n    }" if (parenthesized_expression "(puVar13 < puVar14 + 2)" ( (binary_expression "puVar13 < puVar14 + 2" identifier < (binary_expression "puVar14 + 2" identifier + number_literal)) )) (compound_statement "{\n      iVar6 = 0x1172a;\nLAB_000395cd:\n      iVar6 = sqlite3CorruptError(iVar6);\n      return iVar6;\n    }" { (expression_statement "iVar6 = 0x1172a;" (assignment_expression "iVar6 = 0x1172a" identifier = number_literal) ;) (labeled_statement "LAB_000395cd:\n      iVar6 = sqlite3CorruptError(iVar6);" statement_identifier : (expression_statement "iVar6 = sqlite3CorruptError(iVar6);" (assignment_expression "iVar6 = sqlite3CorruptError(iVar6)" identifier = (call_expression "sqlite3CorruptError(iVar6)" identifier (argument_list "(iVar6)" ( identifier )))) ;)) (return_statement "return iVar6;" return identifier ;) })) (expression_statement "iFirst = iFirst + 1;" (assignment_expression "iFirst = iFirst + 1" identifier = (binary_expression "iFirst + 1" identifier + number_literal)) ;) (expression_statement "memcpy(puVar13,__src,uVar7);" (call_expression "memcpy(puVar13,__src,uVar7)" identifier (argument_list "(puVar13,__src,uVar7)" ( identifier , identifier , identifier ))) ;) (if_statement "if (iVar12 <= iFirst) {\n      pPg->nOverflow = '\0';\n      pPg->nCell = extraout_CX;\n      puVar2[uVar10 + 1] = '\0';\n      puVar2[uVar10 + 2] = '\0';\n      puVar2[uVar10 + 3] = *(u8 *)((int)&pPg->nCell + 1);\n      puVar2[uVar10 + 4] = (u8)pPg->nCell;\n      puVar2[uVar10 + 5] = uVar11;\n      puVar2[uVar10 + 6] = uVar9;\n      puVar2[uVar10 + 7] = '\0';\n      return 0;\n    }" if (parenthesized_expression "(iVar12 <= iFirst)" ( (binary_expression "iVar12 <= iFirst" identifier <= identifier) )) (compound_statement "{\n      pPg->nOverflow = '\0';\n      pPg->nCell = extraout_CX;\n      puVar2[uVar10 + 1] = '\0';\n      puVar2[uVar10 + 2] = '\0';\n      puVar2[uVar10 + 3] = *(u8 *)((int)&pPg->nCell + 1);\n      puVar2[uVar10 + 4] = (u8)pPg->nCell;\n      puVar2[uVar10 + 5] = uVar11;\n      puVar2[uVar10 + 6] = uVar9;\n      puVar2[uVar10 + 7] = '\0';\n      return 0;\n    }" { (expression_statement "pPg->nOverflow = '\0';" (assignment_expression "pPg->nOverflow = '\0'" (field_expression "pPg->nOverflow" identifier -> field_identifier) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "pPg->nCell = extraout_CX;" (assignment_expression "pPg->nCell = extraout_CX" (field_expression "pPg->nCell" identifier -> field_identifier) = identifier) ;) (expression_statement "puVar2[uVar10 + 1] = '\0';" (assignment_expression "puVar2[uVar10 + 1] = '\0'" (subscript_expression "puVar2[uVar10 + 1]" identifier [ (binary_expression "uVar10 + 1" identifier + number_literal) ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "puVar2[uVar10 + 2] = '\0';" (assignment_expression "puVar2[uVar10 + 2] = '\0'" (subscript_expression "puVar2[uVar10 + 2]" identifier [ (binary_expression "uVar10 + 2" identifier + number_literal) ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "puVar2[uVar10 + 3] = *(u8 *)((int)&pPg->nCell + 1);" (assignment_expression "puVar2[uVar10 + 3] = *(u8 *)((int)&pPg->nCell + 1)" (subscript_expression "puVar2[uVar10 + 3]" identifier [ (binary_expression "uVar10 + 3" identifier + number_literal) ]) = (pointer_expression "*(u8 *)((int)&pPg->nCell + 1)" * (cast_expression "(u8 *)((int)&pPg->nCell + 1)" ( (type_descriptor "u8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&pPg->nCell + 1)" ( (binary_expression "(int)&pPg->nCell + 1" (cast_expression "(int)&pPg->nCell" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&pPg->nCell" & (field_expression "pPg->nCell" identifier -> field_identifier))) + number_literal) ))))) ;) (expression_statement "puVar2[uVar10 + 4] = (u8)pPg->nCell;" (assignment_expression "puVar2[uVar10 + 4] = (u8)pPg->nCell" (subscript_expression "puVar2[uVar10 + 4]" identifier [ (binary_expression "uVar10 + 4" identifier + number_literal) ]) = (cast_expression "(u8)pPg->nCell" ( (type_descriptor "u8" type_identifier) ) (field_expression "pPg->nCell" identifier -> field_identifier))) ;) (expression_statement "puVar2[uVar10 + 5] = uVar11;" (assignment_expression "puVar2[uVar10 + 5] = uVar11" (subscript_expression "puVar2[uVar10 + 5]" identifier [ (binary_expression "uVar10 + 5" identifier + number_literal) ]) = identifier) ;) (expression_statement "puVar2[uVar10 + 6] = uVar9;" (assignment_expression "puVar2[uVar10 + 6] = uVar9" (subscript_expression "puVar2[uVar10 + 6]" identifier [ (binary_expression "uVar10 + 6" identifier + number_literal) ]) = identifier) ;) (expression_statement "puVar2[uVar10 + 7] = '\0';" (assignment_expression "puVar2[uVar10 + 7] = '\0'" (subscript_expression "puVar2[uVar10 + 7]" identifier [ (binary_expression "uVar10 + 7" identifier + number_literal) ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar1 = iVar6 + local_50 * 4;" (assignment_expression "iVar1 = iVar6 + local_50 * 4" identifier = (binary_expression "iVar6 + local_50 * 4" identifier + (binary_expression "local_50 * 4" identifier * number_literal))) ;) (if_statement "if (*(int *)(iVar1 + 0x28) <= iFirst) {\n      local_44 = *(u8 **)(iVar1 + 0x14);\n      local_50 = local_50 + 1;\n    }" if (parenthesized_expression "(*(int *)(iVar1 + 0x28) <= iFirst)" ( (binary_expression "*(int *)(iVar1 + 0x28) <= iFirst" (pointer_expression "*(int *)(iVar1 + 0x28)" * (cast_expression "(int *)(iVar1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0x28)" ( (binary_expression "iVar1 + 0x28" identifier + number_literal) )))) <= identifier) )) (compound_statement "{\n      local_44 = *(u8 **)(iVar1 + 0x14);\n      local_50 = local_50 + 1;\n    }" { (expression_statement "local_44 = *(u8 **)(iVar1 + 0x14);" (assignment_expression "local_44 = *(u8 **)(iVar1 + 0x14)" identifier = (pointer_expression "*(u8 **)(iVar1 + 0x14)" * (cast_expression "(u8 **)(iVar1 + 0x14)" ( (type_descriptor "u8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar1 + 0x14)" ( (binary_expression "iVar1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "local_50 = local_50 + 1;" (assignment_expression "local_50 = local_50 + 1" identifier = (binary_expression "local_50 + 1" identifier + number_literal)) ;) })) (expression_statement "local_5c = local_5c + 4;" (assignment_expression "local_5c = local_5c + 4" identifier = (binary_expression "local_5c + 4" identifier + number_literal)) ;) (expression_statement "puVar14 = puVar14 + 2;" (assignment_expression "puVar14 = puVar14 + 2" identifier = (binary_expression "puVar14 + 2" identifier + number_literal)) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit "undefined4 __regparm3 FUN_000393d0(undefined4 param_1,int param_2,int param_3,int param_4)\n\n{\n  int iVar1;\n  undefined1 *puVar2;\n  void *pvVar3;\n  undefined1 *puVar4;\n  int iVar5;\n  int iVar6;\n  uint uVar7;\n  void *__dest;\n  undefined1 *__src;\n  undefined4 uVar8;\n  undefined2 extraout_CX;\n  undefined1 *puVar9;\n  undefined1 uVar10;\n  uint uVar11;\n  undefined1 uVar12;\n  undefined1 *puVar13;\n  undefined1 *puVar14;\n  size_t local_64;\n  int local_5c;\n  int local_50;\n  undefined1 *local_44;\n  \n  iVar6 = FUN_000a94ff();\n  param_3 = param_3 + param_2;\n  puVar2 = *(undefined1 **)(param_4 + 0x38);\n  local_64 = (*(int **)(param_4 + 0x34))[10];\n  puVar9 = puVar2 + local_64;\n  uVar11 = (uint)*(byte *)(param_4 + 9);\n  pvVar3 = *(void **)(**(int **)(param_4 + 0x34) + 0xcc);\n  puVar4 = *(undefined1 **)(param_4 + 0x40);\n  uVar7 = (uint)CONCAT11(puVar2[uVar11 + 5],puVar2[uVar11 + 6]);\n  __dest = pvVar3;\n  puVar13 = puVar2;\n  if (uVar7 <= local_64) {\n    local_64 = local_64 - uVar7;\n    __dest = (void *)(uVar7 + (int)pvVar3);\n    puVar13 = puVar2 + uVar7;\n  }\n  memcpy(__dest,puVar13,local_64);\n  if (param_2 < *(int *)(iVar6 + 0x28)) {\n    local_50 = 0;\n  }\n  else {\n    local_50 = 0;\n    do {\n      local_50 = local_50 + 1;\n      if (param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;\n    } while (local_50 != 6);\n  }\n  local_44 = *(undefined1 **)(iVar6 + 0x10 + local_50 * 4);\n  local_5c = param_2 * 4;\n  iVar5 = param_2 * 2;\n  puVar13 = puVar9;\n  puVar14 = puVar4;\n  while( true ) {\n    __src = *(undefined1 **)(*(int *)(iVar6 + 8) + local_5c);\n    uVar7 = (uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc));\n    if ((__src < puVar2) || (puVar9 <= __src)) {\n      if ((__src < local_44) && (local_44 < __src + uVar7)) break;\n    }\n    else {\n      if (puVar9 < __src + uVar7) {\n        uVar8 = FUN_000383f0();\n        return uVar8;\n      }\n      __src = (undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3);\n    }\n    puVar13 = puVar13 + -uVar7;\n    uVar10 = (undefined1)((int)puVar13 - (int)puVar2);\n    puVar14[1] = uVar10;\n    uVar12 = (undefined1)((uint)((int)puVar13 - (int)puVar2) >> 8);\n    *puVar14 = uVar12;\n    if (puVar13 < puVar14 + 2) break;\n    param_2 = param_2 + 1;\n    memcpy(puVar13,__src,uVar7);\n    if (param_3 <= param_2) {\n      *(undefined1 *)(param_4 + 0xc) = 0;\n      *(undefined2 *)(param_4 + 0x18) = extraout_CX;\n      puVar2[uVar11 + 1] = 0;\n      puVar2[uVar11 + 2] = 0;\n      puVar2[uVar11 + 3] = *(undefined1 *)(param_4 + 0x19);\n      puVar2[uVar11 + 4] = (char)*(undefined2 *)(param_4 + 0x18);\n      puVar2[uVar11 + 5] = uVar12;\n      puVar2[uVar11 + 6] = uVar10;\n      puVar2[uVar11 + 7] = 0;\n      return 0;\n    }\n    iVar1 = iVar6 + local_50 * 4;\n    if (*(int *)(iVar1 + 0x28) <= param_2) {\n      local_44 = *(undefined1 **)(iVar1 + 0x14);\n      local_50 = local_50 + 1;\n    }\n    local_5c = local_5c + 4;\n    puVar14 = puVar14 + 2;\n  }\n  uVar8 = FUN_000383f0();\n  return uVar8;\n}\n\n" (function_definition "undefined4 __regparm3 FUN_000393d0(undefined4 param_1,int param_2,int param_3,int param_4)\n\n{\n  int iVar1;\n  undefined1 *puVar2;\n  void *pvVar3;\n  undefined1 *puVar4;\n  int iVar5;\n  int iVar6;\n  uint uVar7;\n  void *__dest;\n  undefined1 *__src;\n  undefined4 uVar8;\n  undefined2 extraout_CX;\n  undefined1 *puVar9;\n  undefined1 uVar10;\n  uint uVar11;\n  undefined1 uVar12;\n  undefined1 *puVar13;\n  undefined1 *puVar14;\n  size_t local_64;\n  int local_5c;\n  int local_50;\n  undefined1 *local_44;\n  \n  iVar6 = FUN_000a94ff();\n  param_3 = param_3 + param_2;\n  puVar2 = *(undefined1 **)(param_4 + 0x38);\n  local_64 = (*(int **)(param_4 + 0x34))[10];\n  puVar9 = puVar2 + local_64;\n  uVar11 = (uint)*(byte *)(param_4 + 9);\n  pvVar3 = *(void **)(**(int **)(param_4 + 0x34) + 0xcc);\n  puVar4 = *(undefined1 **)(param_4 + 0x40);\n  uVar7 = (uint)CONCAT11(puVar2[uVar11 + 5],puVar2[uVar11 + 6]);\n  __dest = pvVar3;\n  puVar13 = puVar2;\n  if (uVar7 <= local_64) {\n    local_64 = local_64 - uVar7;\n    __dest = (void *)(uVar7 + (int)pvVar3);\n    puVar13 = puVar2 + uVar7;\n  }\n  memcpy(__dest,puVar13,local_64);\n  if (param_2 < *(int *)(iVar6 + 0x28)) {\n    local_50 = 0;\n  }\n  else {\n    local_50 = 0;\n    do {\n      local_50 = local_50 + 1;\n      if (param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;\n    } while (local_50 != 6);\n  }\n  local_44 = *(undefined1 **)(iVar6 + 0x10 + local_50 * 4);\n  local_5c = param_2 * 4;\n  iVar5 = param_2 * 2;\n  puVar13 = puVar9;\n  puVar14 = puVar4;\n  while( true ) {\n    __src = *(undefined1 **)(*(int *)(iVar6 + 8) + local_5c);\n    uVar7 = (uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc));\n    if ((__src < puVar2) || (puVar9 <= __src)) {\n      if ((__src < local_44) && (local_44 < __src + uVar7)) break;\n    }\n    else {\n      if (puVar9 < __src + uVar7) {\n        uVar8 = FUN_000383f0();\n        return uVar8;\n      }\n      __src = (undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3);\n    }\n    puVar13 = puVar13 + -uVar7;\n    uVar10 = (undefined1)((int)puVar13 - (int)puVar2);\n    puVar14[1] = uVar10;\n    uVar12 = (undefined1)((uint)((int)puVar13 - (int)puVar2) >> 8);\n    *puVar14 = uVar12;\n    if (puVar13 < puVar14 + 2) break;\n    param_2 = param_2 + 1;\n    memcpy(puVar13,__src,uVar7);\n    if (param_3 <= param_2) {\n      *(undefined1 *)(param_4 + 0xc) = 0;\n      *(undefined2 *)(param_4 + 0x18) = extraout_CX;\n      puVar2[uVar11 + 1] = 0;\n      puVar2[uVar11 + 2] = 0;\n      puVar2[uVar11 + 3] = *(undefined1 *)(param_4 + 0x19);\n      puVar2[uVar11 + 4] = (char)*(undefined2 *)(param_4 + 0x18);\n      puVar2[uVar11 + 5] = uVar12;\n      puVar2[uVar11 + 6] = uVar10;\n      puVar2[uVar11 + 7] = 0;\n      return 0;\n    }\n    iVar1 = iVar6 + local_50 * 4;\n    if (*(int *)(iVar1 + 0x28) <= param_2) {\n      local_44 = *(undefined1 **)(iVar1 + 0x14);\n      local_50 = local_50 + 1;\n    }\n    local_5c = local_5c + 4;\n    puVar14 = puVar14 + 2;\n  }\n  uVar8 = FUN_000383f0();\n  return uVar8;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "FUN_000393d0(undefined4 param_1,int param_2,int param_3,int param_4)" identifier (parameter_list "(undefined4 param_1,int param_2,int param_3,int param_4)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int param_4" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  undefined1 *puVar2;\n  void *pvVar3;\n  undefined1 *puVar4;\n  int iVar5;\n  int iVar6;\n  uint uVar7;\n  void *__dest;\n  undefined1 *__src;\n  undefined4 uVar8;\n  undefined2 extraout_CX;\n  undefined1 *puVar9;\n  undefined1 uVar10;\n  uint uVar11;\n  undefined1 uVar12;\n  undefined1 *puVar13;\n  undefined1 *puVar14;\n  size_t local_64;\n  int local_5c;\n  int local_50;\n  undefined1 *local_44;\n  \n  iVar6 = FUN_000a94ff();\n  param_3 = param_3 + param_2;\n  puVar2 = *(undefined1 **)(param_4 + 0x38);\n  local_64 = (*(int **)(param_4 + 0x34))[10];\n  puVar9 = puVar2 + local_64;\n  uVar11 = (uint)*(byte *)(param_4 + 9);\n  pvVar3 = *(void **)(**(int **)(param_4 + 0x34) + 0xcc);\n  puVar4 = *(undefined1 **)(param_4 + 0x40);\n  uVar7 = (uint)CONCAT11(puVar2[uVar11 + 5],puVar2[uVar11 + 6]);\n  __dest = pvVar3;\n  puVar13 = puVar2;\n  if (uVar7 <= local_64) {\n    local_64 = local_64 - uVar7;\n    __dest = (void *)(uVar7 + (int)pvVar3);\n    puVar13 = puVar2 + uVar7;\n  }\n  memcpy(__dest,puVar13,local_64);\n  if (param_2 < *(int *)(iVar6 + 0x28)) {\n    local_50 = 0;\n  }\n  else {\n    local_50 = 0;\n    do {\n      local_50 = local_50 + 1;\n      if (param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;\n    } while (local_50 != 6);\n  }\n  local_44 = *(undefined1 **)(iVar6 + 0x10 + local_50 * 4);\n  local_5c = param_2 * 4;\n  iVar5 = param_2 * 2;\n  puVar13 = puVar9;\n  puVar14 = puVar4;\n  while( true ) {\n    __src = *(undefined1 **)(*(int *)(iVar6 + 8) + local_5c);\n    uVar7 = (uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc));\n    if ((__src < puVar2) || (puVar9 <= __src)) {\n      if ((__src < local_44) && (local_44 < __src + uVar7)) break;\n    }\n    else {\n      if (puVar9 < __src + uVar7) {\n        uVar8 = FUN_000383f0();\n        return uVar8;\n      }\n      __src = (undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3);\n    }\n    puVar13 = puVar13 + -uVar7;\n    uVar10 = (undefined1)((int)puVar13 - (int)puVar2);\n    puVar14[1] = uVar10;\n    uVar12 = (undefined1)((uint)((int)puVar13 - (int)puVar2) >> 8);\n    *puVar14 = uVar12;\n    if (puVar13 < puVar14 + 2) break;\n    param_2 = param_2 + 1;\n    memcpy(puVar13,__src,uVar7);\n    if (param_3 <= param_2) {\n      *(undefined1 *)(param_4 + 0xc) = 0;\n      *(undefined2 *)(param_4 + 0x18) = extraout_CX;\n      puVar2[uVar11 + 1] = 0;\n      puVar2[uVar11 + 2] = 0;\n      puVar2[uVar11 + 3] = *(undefined1 *)(param_4 + 0x19);\n      puVar2[uVar11 + 4] = (char)*(undefined2 *)(param_4 + 0x18);\n      puVar2[uVar11 + 5] = uVar12;\n      puVar2[uVar11 + 6] = uVar10;\n      puVar2[uVar11 + 7] = 0;\n      return 0;\n    }\n    iVar1 = iVar6 + local_50 * 4;\n    if (*(int *)(iVar1 + 0x28) <= param_2) {\n      local_44 = *(undefined1 **)(iVar1 + 0x14);\n      local_50 = local_50 + 1;\n    }\n    local_5c = local_5c + 4;\n    puVar14 = puVar14 + 2;\n  }\n  uVar8 = FUN_000383f0();\n  return uVar8;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "undefined1 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "void *pvVar3;" primitive_type (pointer_declarator "*pvVar3" * identifier) ;) (declaration "undefined1 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "void *__dest;" primitive_type (pointer_declarator "*__dest" * identifier) ;) (declaration "undefined1 *__src;" type_identifier (pointer_declarator "*__src" * identifier) ;) (declaration "undefined4 uVar8;" type_identifier identifier ;) (declaration "undefined2 extraout_CX;" type_identifier identifier ;) (declaration "undefined1 *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "undefined1 uVar10;" type_identifier identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "undefined1 uVar12;" type_identifier identifier ;) (declaration "undefined1 *puVar13;" type_identifier (pointer_declarator "*puVar13" * identifier) ;) (declaration "undefined1 *puVar14;" type_identifier (pointer_declarator "*puVar14" * identifier) ;) (declaration "size_t local_64;" primitive_type identifier ;) (declaration "int local_5c;" primitive_type identifier ;) (declaration "int local_50;" primitive_type identifier ;) (declaration "undefined1 *local_44;" type_identifier (pointer_declarator "*local_44" * identifier) ;) (expression_statement "iVar6 = FUN_000a94ff();" (assignment_expression "iVar6 = FUN_000a94ff()" identifier = (call_expression "FUN_000a94ff()" identifier (argument_list "()" ( )))) ;) (expression_statement "param_3 = param_3 + param_2;" (assignment_expression "param_3 = param_3 + param_2" identifier = (binary_expression "param_3 + param_2" identifier + identifier)) ;) (expression_statement "puVar2 = *(undefined1 **)(param_4 + 0x38);" (assignment_expression "puVar2 = *(undefined1 **)(param_4 + 0x38)" identifier = (pointer_expression "*(undefined1 **)(param_4 + 0x38)" * (cast_expression "(undefined1 **)(param_4 + 0x38)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_4 + 0x38)" ( (binary_expression "param_4 + 0x38" identifier + number_literal) ))))) ;) (expression_statement "local_64 = (*(int **)(param_4 + 0x34))[10];" (assignment_expression "local_64 = (*(int **)(param_4 + 0x34))[10]" identifier = (subscript_expression "(*(int **)(param_4 + 0x34))[10]" (parenthesized_expression "(*(int **)(param_4 + 0x34))" ( (pointer_expression "*(int **)(param_4 + 0x34)" * (cast_expression "(int **)(param_4 + 0x34)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_4 + 0x34)" ( (binary_expression "param_4 + 0x34" identifier + number_literal) )))) )) [ number_literal ])) ;) (expression_statement "puVar9 = puVar2 + local_64;" (assignment_expression "puVar9 = puVar2 + local_64" identifier = (binary_expression "puVar2 + local_64" identifier + identifier)) ;) (expression_statement "uVar11 = (uint)*(byte *)(param_4 + 9);" (assignment_expression "uVar11 = (uint)*(byte *)(param_4 + 9)" identifier = (binary_expression "(uint)*(byte *)(param_4 + 9)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(byte *)(param_4 + 9)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 9)" ( (binary_expression "param_4 + 9" identifier + number_literal) ))))) ;) (expression_statement "pvVar3 = *(void **)(**(int **)(param_4 + 0x34) + 0xcc);" (assignment_expression "pvVar3 = *(void **)(**(int **)(param_4 + 0x34) + 0xcc)" identifier = (pointer_expression "*(void **)(**(int **)(param_4 + 0x34) + 0xcc)" * (cast_expression "(void **)(**(int **)(param_4 + 0x34) + 0xcc)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(**(int **)(param_4 + 0x34) + 0xcc)" ( (binary_expression "**(int **)(param_4 + 0x34) + 0xcc" (pointer_expression "**(int **)(param_4 + 0x34)" * (pointer_expression "*(int **)(param_4 + 0x34)" * (cast_expression "(int **)(param_4 + 0x34)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_4 + 0x34)" ( (binary_expression "param_4 + 0x34" identifier + number_literal) ))))) + number_literal) ))))) ;) (expression_statement "puVar4 = *(undefined1 **)(param_4 + 0x40);" (assignment_expression "puVar4 = *(undefined1 **)(param_4 + 0x40)" identifier = (pointer_expression "*(undefined1 **)(param_4 + 0x40)" * (cast_expression "(undefined1 **)(param_4 + 0x40)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_4 + 0x40)" ( (binary_expression "param_4 + 0x40" identifier + number_literal) ))))) ;) (expression_statement "uVar7 = (uint)CONCAT11(puVar2[uVar11 + 5],puVar2[uVar11 + 6]);" (assignment_expression "uVar7 = (uint)CONCAT11(puVar2[uVar11 + 5],puVar2[uVar11 + 6])" identifier = (cast_expression "(uint)CONCAT11(puVar2[uVar11 + 5],puVar2[uVar11 + 6])" ( (type_descriptor "uint" type_identifier) ) (call_expression "CONCAT11(puVar2[uVar11 + 5],puVar2[uVar11 + 6])" identifier (argument_list "(puVar2[uVar11 + 5],puVar2[uVar11 + 6])" ( (subscript_expression "puVar2[uVar11 + 5]" identifier [ (binary_expression "uVar11 + 5" identifier + number_literal) ]) , (subscript_expression "puVar2[uVar11 + 6]" identifier [ (binary_expression "uVar11 + 6" identifier + number_literal) ]) ))))) ;) (expression_statement "__dest = pvVar3;" (assignment_expression "__dest = pvVar3" identifier = identifier) ;) (expression_statement "puVar13 = puVar2;" (assignment_expression "puVar13 = puVar2" identifier = identifier) ;) (if_statement "if (uVar7 <= local_64) {\n    local_64 = local_64 - uVar7;\n    __dest = (void *)(uVar7 + (int)pvVar3);\n    puVar13 = puVar2 + uVar7;\n  }" if (parenthesized_expression "(uVar7 <= local_64)" ( (binary_expression "uVar7 <= local_64" identifier <= identifier) )) (compound_statement "{\n    local_64 = local_64 - uVar7;\n    __dest = (void *)(uVar7 + (int)pvVar3);\n    puVar13 = puVar2 + uVar7;\n  }" { (expression_statement "local_64 = local_64 - uVar7;" (assignment_expression "local_64 = local_64 - uVar7" identifier = (binary_expression "local_64 - uVar7" identifier - identifier)) ;) (expression_statement "__dest = (void *)(uVar7 + (int)pvVar3);" (assignment_expression "__dest = (void *)(uVar7 + (int)pvVar3)" identifier = (cast_expression "(void *)(uVar7 + (int)pvVar3)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar7 + (int)pvVar3)" ( (binary_expression "uVar7 + (int)pvVar3" identifier + (cast_expression "(int)pvVar3" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) (expression_statement "puVar13 = puVar2 + uVar7;" (assignment_expression "puVar13 = puVar2 + uVar7" identifier = (binary_expression "puVar2 + uVar7" identifier + identifier)) ;) })) (expression_statement "memcpy(__dest,puVar13,local_64);" (call_expression "memcpy(__dest,puVar13,local_64)" identifier (argument_list "(__dest,puVar13,local_64)" ( identifier , identifier , identifier ))) ;) (if_statement "if (param_2 < *(int *)(iVar6 + 0x28)) {\n    local_50 = 0;\n  }\n  else {\n    local_50 = 0;\n    do {\n      local_50 = local_50 + 1;\n      if (param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;\n    } while (local_50 != 6);\n  }" if (parenthesized_expression "(param_2 < *(int *)(iVar6 + 0x28))" ( (binary_expression "param_2 < *(int *)(iVar6 + 0x28)" identifier < (pointer_expression "*(int *)(iVar6 + 0x28)" * (cast_expression "(int *)(iVar6 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 0x28)" ( (binary_expression "iVar6 + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n    local_50 = 0;\n  }" { (expression_statement "local_50 = 0;" (assignment_expression "local_50 = 0" identifier = number_literal) ;) }) (else_clause "else {\n    local_50 = 0;\n    do {\n      local_50 = local_50 + 1;\n      if (param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;\n    } while (local_50 != 6);\n  }" else (compound_statement "{\n    local_50 = 0;\n    do {\n      local_50 = local_50 + 1;\n      if (param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;\n    } while (local_50 != 6);\n  }" { (expression_statement "local_50 = 0;" (assignment_expression "local_50 = 0" identifier = number_literal) ;) (do_statement "do {\n      local_50 = local_50 + 1;\n      if (param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;\n    } while (local_50 != 6);" do (compound_statement "{\n      local_50 = local_50 + 1;\n      if (param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;\n    }" { (expression_statement "local_50 = local_50 + 1;" (assignment_expression "local_50 = local_50 + 1" identifier = (binary_expression "local_50 + 1" identifier + number_literal)) ;) (if_statement "if (param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;" if (parenthesized_expression "(param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4))" ( (binary_expression "param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4)" identifier < (pointer_expression "*(int *)(iVar6 + 0x28 + local_50 * 4)" * (cast_expression "(int *)(iVar6 + 0x28 + local_50 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 0x28 + local_50 * 4)" ( (binary_expression "iVar6 + 0x28 + local_50 * 4" (binary_expression "iVar6 + 0x28" identifier + number_literal) + (binary_expression "local_50 * 4" identifier * number_literal)) ))))) )) (break_statement "break;" break ;)) }) while (parenthesized_expression "(local_50 != 6)" ( (binary_expression "local_50 != 6" identifier != number_literal) )) ;) }))) (expression_statement "local_44 = *(undefined1 **)(iVar6 + 0x10 + local_50 * 4);" (assignment_expression "local_44 = *(undefined1 **)(iVar6 + 0x10 + local_50 * 4)" identifier = (pointer_expression "*(undefined1 **)(iVar6 + 0x10 + local_50 * 4)" * (cast_expression "(undefined1 **)(iVar6 + 0x10 + local_50 * 4)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar6 + 0x10 + local_50 * 4)" ( (binary_expression "iVar6 + 0x10 + local_50 * 4" (binary_expression "iVar6 + 0x10" identifier + number_literal) + (binary_expression "local_50 * 4" identifier * number_literal)) ))))) ;) (expression_statement "local_5c = param_2 * 4;" (assignment_expression "local_5c = param_2 * 4" identifier = (binary_expression "param_2 * 4" identifier * number_literal)) ;) (expression_statement "iVar5 = param_2 * 2;" (assignment_expression "iVar5 = param_2 * 2" identifier = (binary_expression "param_2 * 2" identifier * number_literal)) ;) (expression_statement "puVar13 = puVar9;" (assignment_expression "puVar13 = puVar9" identifier = identifier) ;) (expression_statement "puVar14 = puVar4;" (assignment_expression "puVar14 = puVar4" identifier = identifier) ;) (while_statement "while( true ) {\n    __src = *(undefined1 **)(*(int *)(iVar6 + 8) + local_5c);\n    uVar7 = (uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc));\n    if ((__src < puVar2) || (puVar9 <= __src)) {\n      if ((__src < local_44) && (local_44 < __src + uVar7)) break;\n    }\n    else {\n      if (puVar9 < __src + uVar7) {\n        uVar8 = FUN_000383f0();\n        return uVar8;\n      }\n      __src = (undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3);\n    }\n    puVar13 = puVar13 + -uVar7;\n    uVar10 = (undefined1)((int)puVar13 - (int)puVar2);\n    puVar14[1] = uVar10;\n    uVar12 = (undefined1)((uint)((int)puVar13 - (int)puVar2) >> 8);\n    *puVar14 = uVar12;\n    if (puVar13 < puVar14 + 2) break;\n    param_2 = param_2 + 1;\n    memcpy(puVar13,__src,uVar7);\n    if (param_3 <= param_2) {\n      *(undefined1 *)(param_4 + 0xc) = 0;\n      *(undefined2 *)(param_4 + 0x18) = extraout_CX;\n      puVar2[uVar11 + 1] = 0;\n      puVar2[uVar11 + 2] = 0;\n      puVar2[uVar11 + 3] = *(undefined1 *)(param_4 + 0x19);\n      puVar2[uVar11 + 4] = (char)*(undefined2 *)(param_4 + 0x18);\n      puVar2[uVar11 + 5] = uVar12;\n      puVar2[uVar11 + 6] = uVar10;\n      puVar2[uVar11 + 7] = 0;\n      return 0;\n    }\n    iVar1 = iVar6 + local_50 * 4;\n    if (*(int *)(iVar1 + 0x28) <= param_2) {\n      local_44 = *(undefined1 **)(iVar1 + 0x14);\n      local_50 = local_50 + 1;\n    }\n    local_5c = local_5c + 4;\n    puVar14 = puVar14 + 2;\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    __src = *(undefined1 **)(*(int *)(iVar6 + 8) + local_5c);\n    uVar7 = (uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc));\n    if ((__src < puVar2) || (puVar9 <= __src)) {\n      if ((__src < local_44) && (local_44 < __src + uVar7)) break;\n    }\n    else {\n      if (puVar9 < __src + uVar7) {\n        uVar8 = FUN_000383f0();\n        return uVar8;\n      }\n      __src = (undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3);\n    }\n    puVar13 = puVar13 + -uVar7;\n    uVar10 = (undefined1)((int)puVar13 - (int)puVar2);\n    puVar14[1] = uVar10;\n    uVar12 = (undefined1)((uint)((int)puVar13 - (int)puVar2) >> 8);\n    *puVar14 = uVar12;\n    if (puVar13 < puVar14 + 2) break;\n    param_2 = param_2 + 1;\n    memcpy(puVar13,__src,uVar7);\n    if (param_3 <= param_2) {\n      *(undefined1 *)(param_4 + 0xc) = 0;\n      *(undefined2 *)(param_4 + 0x18) = extraout_CX;\n      puVar2[uVar11 + 1] = 0;\n      puVar2[uVar11 + 2] = 0;\n      puVar2[uVar11 + 3] = *(undefined1 *)(param_4 + 0x19);\n      puVar2[uVar11 + 4] = (char)*(undefined2 *)(param_4 + 0x18);\n      puVar2[uVar11 + 5] = uVar12;\n      puVar2[uVar11 + 6] = uVar10;\n      puVar2[uVar11 + 7] = 0;\n      return 0;\n    }\n    iVar1 = iVar6 + local_50 * 4;\n    if (*(int *)(iVar1 + 0x28) <= param_2) {\n      local_44 = *(undefined1 **)(iVar1 + 0x14);\n      local_50 = local_50 + 1;\n    }\n    local_5c = local_5c + 4;\n    puVar14 = puVar14 + 2;\n  }" { (expression_statement "__src = *(undefined1 **)(*(int *)(iVar6 + 8) + local_5c);" (assignment_expression "__src = *(undefined1 **)(*(int *)(iVar6 + 8) + local_5c)" identifier = (pointer_expression "*(undefined1 **)(*(int *)(iVar6 + 8) + local_5c)" * (cast_expression "(undefined1 **)(*(int *)(iVar6 + 8) + local_5c)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(iVar6 + 8) + local_5c)" ( (binary_expression "*(int *)(iVar6 + 8) + local_5c" (pointer_expression "*(int *)(iVar6 + 8)" * (cast_expression "(int *)(iVar6 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 8)" ( (binary_expression "iVar6 + 8" identifier + number_literal) )))) + identifier) ))))) ;) (expression_statement "uVar7 = (uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc));" (assignment_expression "uVar7 = (uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc))" identifier = (binary_expression "(uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc))" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc))" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc))" ( (binary_expression "puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc)" (binary_expression "puVar14 + (iVar5 - (int)puVar4)" identifier + (parenthesized_expression "(iVar5 - (int)puVar4)" ( (binary_expression "iVar5 - (int)puVar4" identifier - (cast_expression "(int)puVar4" ( (type_descriptor "int" primitive_type) ) identifier)) ))) + (pointer_expression "*(int *)(iVar6 + 0xc)" * (cast_expression "(int *)(iVar6 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 0xc)" ( (binary_expression "iVar6 + 0xc" identifier + number_literal) ))))) ))))) ;) (if_statement "if ((__src < puVar2) || (puVar9 <= __src)) {\n      if ((__src < local_44) && (local_44 < __src + uVar7)) break;\n    }\n    else {\n      if (puVar9 < __src + uVar7) {\n        uVar8 = FUN_000383f0();\n        return uVar8;\n      }\n      __src = (undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3);\n    }" if (parenthesized_expression "((__src < puVar2) || (puVar9 <= __src))" ( (binary_expression "(__src < puVar2) || (puVar9 <= __src)" (parenthesized_expression "(__src < puVar2)" ( (binary_expression "__src < puVar2" identifier < identifier) )) || (parenthesized_expression "(puVar9 <= __src)" ( (binary_expression "puVar9 <= __src" identifier <= identifier) ))) )) (compound_statement "{\n      if ((__src < local_44) && (local_44 < __src + uVar7)) break;\n    }" { (if_statement "if ((__src < local_44) && (local_44 < __src + uVar7)) break;" if (parenthesized_expression "((__src < local_44) && (local_44 < __src + uVar7))" ( (binary_expression "(__src < local_44) && (local_44 < __src + uVar7)" (parenthesized_expression "(__src < local_44)" ( (binary_expression "__src < local_44" identifier < identifier) )) && (parenthesized_expression "(local_44 < __src + uVar7)" ( (binary_expression "local_44 < __src + uVar7" identifier < (binary_expression "__src + uVar7" identifier + identifier)) ))) )) (break_statement "break;" break ;)) }) (else_clause "else {\n      if (puVar9 < __src + uVar7) {\n        uVar8 = FUN_000383f0();\n        return uVar8;\n      }\n      __src = (undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3);\n    }" else (compound_statement "{\n      if (puVar9 < __src + uVar7) {\n        uVar8 = FUN_000383f0();\n        return uVar8;\n      }\n      __src = (undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3);\n    }" { (if_statement "if (puVar9 < __src + uVar7) {\n        uVar8 = FUN_000383f0();\n        return uVar8;\n      }" if (parenthesized_expression "(puVar9 < __src + uVar7)" ( (binary_expression "puVar9 < __src + uVar7" identifier < (binary_expression "__src + uVar7" identifier + identifier)) )) (compound_statement "{\n        uVar8 = FUN_000383f0();\n        return uVar8;\n      }" { (expression_statement "uVar8 = FUN_000383f0();" (assignment_expression "uVar8 = FUN_000383f0()" identifier = (call_expression "FUN_000383f0()" identifier (argument_list "()" ( )))) ;) (return_statement "return uVar8;" return identifier ;) })) (expression_statement "__src = (undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3);" (assignment_expression "__src = (undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3)" identifier = (cast_expression "(undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(((int)__src - (int)puVar2) + (int)pvVar3)" ( (binary_expression "((int)__src - (int)puVar2) + (int)pvVar3" (parenthesized_expression "((int)__src - (int)puVar2)" ( (binary_expression "(int)__src - (int)puVar2" (cast_expression "(int)__src" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)puVar2" ( (type_descriptor "int" primitive_type) ) identifier)) )) + (cast_expression "(int)pvVar3" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) }))) (expression_statement "puVar13 = puVar13 + -uVar7;" (assignment_expression "puVar13 = puVar13 + -uVar7" identifier = (binary_expression "puVar13 + -uVar7" identifier + (unary_expression "-uVar7" - identifier))) ;) (expression_statement "uVar10 = (undefined1)((int)puVar13 - (int)puVar2);" (assignment_expression "uVar10 = (undefined1)((int)puVar13 - (int)puVar2)" identifier = (call_expression "(undefined1)((int)puVar13 - (int)puVar2)" (parenthesized_expression "(undefined1)" ( identifier )) (argument_list "((int)puVar13 - (int)puVar2)" ( (binary_expression "(int)puVar13 - (int)puVar2" (cast_expression "(int)puVar13" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)puVar2" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) (expression_statement "puVar14[1] = uVar10;" (assignment_expression "puVar14[1] = uVar10" (subscript_expression "puVar14[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar12 = (undefined1)((uint)((int)puVar13 - (int)puVar2) >> 8);" (assignment_expression "uVar12 = (undefined1)((uint)((int)puVar13 - (int)puVar2) >> 8)" identifier = (call_expression "(undefined1)((uint)((int)puVar13 - (int)puVar2) >> 8)" (parenthesized_expression "(undefined1)" ( identifier )) (argument_list "((uint)((int)puVar13 - (int)puVar2) >> 8)" ( (binary_expression "(uint)((int)puVar13 - (int)puVar2) >> 8" (call_expression "(uint)((int)puVar13 - (int)puVar2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((int)puVar13 - (int)puVar2)" ( (binary_expression "(int)puVar13 - (int)puVar2" (cast_expression "(int)puVar13" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)puVar2" ( (type_descriptor "int" primitive_type) ) identifier)) ))) >> number_literal) )))) ;) (expression_statement "*puVar14 = uVar12;" (assignment_expression "*puVar14 = uVar12" (pointer_expression "*puVar14" * identifier) = identifier) ;) (if_statement "if (puVar13 < puVar14 + 2) break;" if (parenthesized_expression "(puVar13 < puVar14 + 2)" ( (binary_expression "puVar13 < puVar14 + 2" identifier < (binary_expression "puVar14 + 2" identifier + number_literal)) )) (break_statement "break;" break ;)) (expression_statement "param_2 = param_2 + 1;" (assignment_expression "param_2 = param_2 + 1" identifier = (binary_expression "param_2 + 1" identifier + number_literal)) ;) (expression_statement "memcpy(puVar13,__src,uVar7);" (call_expression "memcpy(puVar13,__src,uVar7)" identifier (argument_list "(puVar13,__src,uVar7)" ( identifier , identifier , identifier ))) ;) (if_statement "if (param_3 <= param_2) {\n      *(undefined1 *)(param_4 + 0xc) = 0;\n      *(undefined2 *)(param_4 + 0x18) = extraout_CX;\n      puVar2[uVar11 + 1] = 0;\n      puVar2[uVar11 + 2] = 0;\n      puVar2[uVar11 + 3] = *(undefined1 *)(param_4 + 0x19);\n      puVar2[uVar11 + 4] = (char)*(undefined2 *)(param_4 + 0x18);\n      puVar2[uVar11 + 5] = uVar12;\n      puVar2[uVar11 + 6] = uVar10;\n      puVar2[uVar11 + 7] = 0;\n      return 0;\n    }" if (parenthesized_expression "(param_3 <= param_2)" ( (binary_expression "param_3 <= param_2" identifier <= identifier) )) (compound_statement "{\n      *(undefined1 *)(param_4 + 0xc) = 0;\n      *(undefined2 *)(param_4 + 0x18) = extraout_CX;\n      puVar2[uVar11 + 1] = 0;\n      puVar2[uVar11 + 2] = 0;\n      puVar2[uVar11 + 3] = *(undefined1 *)(param_4 + 0x19);\n      puVar2[uVar11 + 4] = (char)*(undefined2 *)(param_4 + 0x18);\n      puVar2[uVar11 + 5] = uVar12;\n      puVar2[uVar11 + 6] = uVar10;\n      puVar2[uVar11 + 7] = 0;\n      return 0;\n    }" { (expression_statement "*(undefined1 *)(param_4 + 0xc) = 0;" (assignment_expression "*(undefined1 *)(param_4 + 0xc) = 0" (pointer_expression "*(undefined1 *)(param_4 + 0xc)" * (cast_expression "(undefined1 *)(param_4 + 0xc)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0xc)" ( (binary_expression "param_4 + 0xc" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined2 *)(param_4 + 0x18) = extraout_CX;" (assignment_expression "*(undefined2 *)(param_4 + 0x18) = extraout_CX" (pointer_expression "*(undefined2 *)(param_4 + 0x18)" * (cast_expression "(undefined2 *)(param_4 + 0x18)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x18)" ( (binary_expression "param_4 + 0x18" identifier + number_literal) )))) = identifier) ;) (expression_statement "puVar2[uVar11 + 1] = 0;" (assignment_expression "puVar2[uVar11 + 1] = 0" (subscript_expression "puVar2[uVar11 + 1]" identifier [ (binary_expression "uVar11 + 1" identifier + number_literal) ]) = number_literal) ;) (expression_statement "puVar2[uVar11 + 2] = 0;" (assignment_expression "puVar2[uVar11 + 2] = 0" (subscript_expression "puVar2[uVar11 + 2]" identifier [ (binary_expression "uVar11 + 2" identifier + number_literal) ]) = number_literal) ;) (expression_statement "puVar2[uVar11 + 3] = *(undefined1 *)(param_4 + 0x19);" (assignment_expression "puVar2[uVar11 + 3] = *(undefined1 *)(param_4 + 0x19)" (subscript_expression "puVar2[uVar11 + 3]" identifier [ (binary_expression "uVar11 + 3" identifier + number_literal) ]) = (pointer_expression "*(undefined1 *)(param_4 + 0x19)" * (cast_expression "(undefined1 *)(param_4 + 0x19)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x19)" ( (binary_expression "param_4 + 0x19" identifier + number_literal) ))))) ;) (expression_statement "puVar2[uVar11 + 4] = (char)*(undefined2 *)(param_4 + 0x18);" (assignment_expression "puVar2[uVar11 + 4] = (char)*(undefined2 *)(param_4 + 0x18)" (subscript_expression "puVar2[uVar11 + 4]" identifier [ (binary_expression "uVar11 + 4" identifier + number_literal) ]) = (cast_expression "(char)*(undefined2 *)(param_4 + 0x18)" ( (type_descriptor "char" primitive_type) ) (pointer_expression "*(undefined2 *)(param_4 + 0x18)" * (cast_expression "(undefined2 *)(param_4 + 0x18)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x18)" ( (binary_expression "param_4 + 0x18" identifier + number_literal) )))))) ;) (expression_statement "puVar2[uVar11 + 5] = uVar12;" (assignment_expression "puVar2[uVar11 + 5] = uVar12" (subscript_expression "puVar2[uVar11 + 5]" identifier [ (binary_expression "uVar11 + 5" identifier + number_literal) ]) = identifier) ;) (expression_statement "puVar2[uVar11 + 6] = uVar10;" (assignment_expression "puVar2[uVar11 + 6] = uVar10" (subscript_expression "puVar2[uVar11 + 6]" identifier [ (binary_expression "uVar11 + 6" identifier + number_literal) ]) = identifier) ;) (expression_statement "puVar2[uVar11 + 7] = 0;" (assignment_expression "puVar2[uVar11 + 7] = 0" (subscript_expression "puVar2[uVar11 + 7]" identifier [ (binary_expression "uVar11 + 7" identifier + number_literal) ]) = number_literal) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar1 = iVar6 + local_50 * 4;" (assignment_expression "iVar1 = iVar6 + local_50 * 4" identifier = (binary_expression "iVar6 + local_50 * 4" identifier + (binary_expression "local_50 * 4" identifier * number_literal))) ;) (if_statement "if (*(int *)(iVar1 + 0x28) <= param_2) {\n      local_44 = *(undefined1 **)(iVar1 + 0x14);\n      local_50 = local_50 + 1;\n    }" if (parenthesized_expression "(*(int *)(iVar1 + 0x28) <= param_2)" ( (binary_expression "*(int *)(iVar1 + 0x28) <= param_2" (pointer_expression "*(int *)(iVar1 + 0x28)" * (cast_expression "(int *)(iVar1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0x28)" ( (binary_expression "iVar1 + 0x28" identifier + number_literal) )))) <= identifier) )) (compound_statement "{\n      local_44 = *(undefined1 **)(iVar1 + 0x14);\n      local_50 = local_50 + 1;\n    }" { (expression_statement "local_44 = *(undefined1 **)(iVar1 + 0x14);" (assignment_expression "local_44 = *(undefined1 **)(iVar1 + 0x14)" identifier = (pointer_expression "*(undefined1 **)(iVar1 + 0x14)" * (cast_expression "(undefined1 **)(iVar1 + 0x14)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar1 + 0x14)" ( (binary_expression "iVar1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "local_50 = local_50 + 1;" (assignment_expression "local_50 = local_50 + 1" identifier = (binary_expression "local_50 + 1" identifier + number_literal)) ;) })) (expression_statement "local_5c = local_5c + 4;" (assignment_expression "local_5c = local_5c + 4" identifier = (binary_expression "local_5c + 4" identifier + number_literal)) ;) (expression_statement "puVar14 = puVar14 + 2;" (assignment_expression "puVar14 = puVar14 + 2" identifier = (binary_expression "puVar14 + 2" identifier + number_literal)) ;) })) (expression_statement "uVar8 = FUN_000383f0();" (assignment_expression "uVar8 = FUN_000383f0()" identifier = (call_expression "FUN_000383f0()" identifier (argument_list "()" ( )))) ;) (return_statement "return uVar8;" return identifier ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )) [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( (subscript_expression IDENT [ (binary_expression IDENT + LIT) ]) , (subscript_expression IDENT [ (binary_expression IDENT + LIT) ]) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (cast_expression ( (type_descriptor TYPE) ) IDENT)) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + (binary_expression IDENT * LIT)) ))))) )) (break_statement break ;)) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) }))) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + (binary_expression IDENT * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (parenthesized_expression ( (binary_expression IDENT - (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < IDENT) )) || (parenthesized_expression ( (binary_expression IDENT <= IDENT) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < IDENT) )) && (parenthesized_expression ( (binary_expression IDENT < (binary_expression IDENT + IDENT)) ))) )) (break_statement break ;)) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT < (binary_expression IDENT + IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) - (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) + (cast_expression ( (type_descriptor TYPE) ) IDENT)) )))) ;) }))) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (unary_expression - IDENT))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) - (cast_expression ( (type_descriptor TYPE) ) IDENT)) )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) - (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) >> LIT) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (binary_expression IDENT + LIT)) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression IDENT + LIT) ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression IDENT + LIT) ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression IDENT + LIT) ]) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression IDENT + LIT) ]) = (cast_expression ( (type_descriptor TYPE) ) (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression IDENT + LIT) ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression IDENT + LIT) ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression IDENT + LIT) ]) = LIT) ;) (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression IDENT * LIT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (return_statement return IDENT ;) })))
(function_definition "undefined4 __regparm3 FUN_000393d0(undefined4 param_1,int param_2,int param_3,int param_4)\n\n{\n  int iVar1;\n  undefined1 *puVar2;\n  void *pvVar3;\n  undefined1 *puVar4;\n  int iVar5;\n  int iVar6;\n  uint uVar7;\n  void *__dest;\n  undefined1 *__src;\n  undefined4 uVar8;\n  undefined2 extraout_CX;\n  undefined1 *puVar9;\n  undefined1 uVar10;\n  uint uVar11;\n  undefined1 uVar12;\n  undefined1 *puVar13;\n  undefined1 *puVar14;\n  size_t local_64;\n  int local_5c;\n  int local_50;\n  undefined1 *local_44;\n  \n  iVar6 = FUN_000a94ff();\n  param_3 = param_3 + param_2;\n  puVar2 = *(undefined1 **)(param_4 + 0x38);\n  local_64 = (*(int **)(param_4 + 0x34))[10];\n  puVar9 = puVar2 + local_64;\n  uVar11 = (uint)*(byte *)(param_4 + 9);\n  pvVar3 = *(void **)(**(int **)(param_4 + 0x34) + 0xcc);\n  puVar4 = *(undefined1 **)(param_4 + 0x40);\n  uVar7 = (uint)CONCAT11(puVar2[uVar11 + 5],puVar2[uVar11 + 6]);\n  __dest = pvVar3;\n  puVar13 = puVar2;\n  if (uVar7 <= local_64) {\n    local_64 = local_64 - uVar7;\n    __dest = (void *)(uVar7 + (int)pvVar3);\n    puVar13 = puVar2 + uVar7;\n  }\n  memcpy(__dest,puVar13,local_64);\n  if (param_2 < *(int *)(iVar6 + 0x28)) {\n    local_50 = 0;\n  }\n  else {\n    local_50 = 0;\n    do {\n      local_50 = local_50 + 1;\n      if (param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;\n    } while (local_50 != 6);\n  }\n  local_44 = *(undefined1 **)(iVar6 + 0x10 + local_50 * 4);\n  local_5c = param_2 * 4;\n  iVar5 = param_2 * 2;\n  puVar13 = puVar9;\n  puVar14 = puVar4;\n  while( true ) {\n    __src = *(undefined1 **)(*(int *)(iVar6 + 8) + local_5c);\n    uVar7 = (uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc));\n    if ((__src < puVar2) || (puVar9 <= __src)) {\n      if ((__src < local_44) && (local_44 < __src + uVar7)) break;\n    }\n    else {\n      if (puVar9 < __src + uVar7) {\n        uVar8 = FUN_000383f0();\n        return uVar8;\n      }\n      __src = (undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3);\n    }\n    puVar13 = puVar13 + -uVar7;\n    uVar10 = (undefined1)((int)puVar13 - (int)puVar2);\n    puVar14[1] = uVar10;\n    uVar12 = (undefined1)((uint)((int)puVar13 - (int)puVar2) >> 8);\n    *puVar14 = uVar12;\n    if (puVar13 < puVar14 + 2) break;\n    param_2 = param_2 + 1;\n    memcpy(puVar13,__src,uVar7);\n    if (param_3 <= param_2) {\n      *(undefined1 *)(param_4 + 0xc) = 0;\n      *(undefined2 *)(param_4 + 0x18) = extraout_CX;\n      puVar2[uVar11 + 1] = 0;\n      puVar2[uVar11 + 2] = 0;\n      puVar2[uVar11 + 3] = *(undefined1 *)(param_4 + 0x19);\n      puVar2[uVar11 + 4] = (char)*(undefined2 *)(param_4 + 0x18);\n      puVar2[uVar11 + 5] = uVar12;\n      puVar2[uVar11 + 6] = uVar10;\n      puVar2[uVar11 + 7] = 0;\n      return 0;\n    }\n    iVar1 = iVar6 + local_50 * 4;\n    if (*(int *)(iVar1 + 0x28) <= param_2) {\n      local_44 = *(undefined1 **)(iVar1 + 0x14);\n      local_50 = local_50 + 1;\n    }\n    local_5c = local_5c + 4;\n    puVar14 = puVar14 + 2;\n  }\n  uVar8 = FUN_000383f0();\n  return uVar8;\n}" (type_identifier "undefined4") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_000393d0(undefined4 param_1,int param_2,int param_3,int param_4)" (identifier "FUN_000393d0") (parameter_list "(undefined4 param_1,int param_2,int param_3,int param_4)" (( "(") (parameter_declaration "undefined4 param_1" (type_identifier "undefined4") (identifier "param_1")) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) (, ",") (parameter_declaration "int param_4" (primitive_type "int") (identifier "param_4")) () ")"))) (compound_statement "{\n  int iVar1;\n  undefined1 *puVar2;\n  void *pvVar3;\n  undefined1 *puVar4;\n  int iVar5;\n  int iVar6;\n  uint uVar7;\n  void *__dest;\n  undefined1 *__src;\n  undefined4 uVar8;\n  undefined2 extraout_CX;\n  undefined1 *puVar9;\n  undefined1 uVar10;\n  uint uVar11;\n  undefined1 uVar12;\n  undefined1 *puVar13;\n  undefined1 *puVar14;\n  size_t local_64;\n  int local_5c;\n  int local_50;\n  undefined1 *local_44;\n  \n  iVar6 = FUN_000a94ff();\n  param_3 = param_3 + param_2;\n  puVar2 = *(undefined1 **)(param_4 + 0x38);\n  local_64 = (*(int **)(param_4 + 0x34))[10];\n  puVar9 = puVar2 + local_64;\n  uVar11 = (uint)*(byte *)(param_4 + 9);\n  pvVar3 = *(void **)(**(int **)(param_4 + 0x34) + 0xcc);\n  puVar4 = *(undefined1 **)(param_4 + 0x40);\n  uVar7 = (uint)CONCAT11(puVar2[uVar11 + 5],puVar2[uVar11 + 6]);\n  __dest = pvVar3;\n  puVar13 = puVar2;\n  if (uVar7 <= local_64) {\n    local_64 = local_64 - uVar7;\n    __dest = (void *)(uVar7 + (int)pvVar3);\n    puVar13 = puVar2 + uVar7;\n  }\n  memcpy(__dest,puVar13,local_64);\n  if (param_2 < *(int *)(iVar6 + 0x28)) {\n    local_50 = 0;\n  }\n  else {\n    local_50 = 0;\n    do {\n      local_50 = local_50 + 1;\n      if (param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;\n    } while (local_50 != 6);\n  }\n  local_44 = *(undefined1 **)(iVar6 + 0x10 + local_50 * 4);\n  local_5c = param_2 * 4;\n  iVar5 = param_2 * 2;\n  puVar13 = puVar9;\n  puVar14 = puVar4;\n  while( true ) {\n    __src = *(undefined1 **)(*(int *)(iVar6 + 8) + local_5c);\n    uVar7 = (uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc));\n    if ((__src < puVar2) || (puVar9 <= __src)) {\n      if ((__src < local_44) && (local_44 < __src + uVar7)) break;\n    }\n    else {\n      if (puVar9 < __src + uVar7) {\n        uVar8 = FUN_000383f0();\n        return uVar8;\n      }\n      __src = (undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3);\n    }\n    puVar13 = puVar13 + -uVar7;\n    uVar10 = (undefined1)((int)puVar13 - (int)puVar2);\n    puVar14[1] = uVar10;\n    uVar12 = (undefined1)((uint)((int)puVar13 - (int)puVar2) >> 8);\n    *puVar14 = uVar12;\n    if (puVar13 < puVar14 + 2) break;\n    param_2 = param_2 + 1;\n    memcpy(puVar13,__src,uVar7);\n    if (param_3 <= param_2) {\n      *(undefined1 *)(param_4 + 0xc) = 0;\n      *(undefined2 *)(param_4 + 0x18) = extraout_CX;\n      puVar2[uVar11 + 1] = 0;\n      puVar2[uVar11 + 2] = 0;\n      puVar2[uVar11 + 3] = *(undefined1 *)(param_4 + 0x19);\n      puVar2[uVar11 + 4] = (char)*(undefined2 *)(param_4 + 0x18);\n      puVar2[uVar11 + 5] = uVar12;\n      puVar2[uVar11 + 6] = uVar10;\n      puVar2[uVar11 + 7] = 0;\n      return 0;\n    }\n    iVar1 = iVar6 + local_50 * 4;\n    if (*(int *)(iVar1 + 0x28) <= param_2) {\n      local_44 = *(undefined1 **)(iVar1 + 0x14);\n      local_50 = local_50 + 1;\n    }\n    local_5c = local_5c + 4;\n    puVar14 = puVar14 + 2;\n  }\n  uVar8 = FUN_000383f0();\n  return uVar8;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "undefined1 *puVar2;" (type_identifier "undefined1") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "void *pvVar3;" (primitive_type "void") (pointer_declarator "*pvVar3" (* "*") (identifier "pvVar3")) (; ";")) (declaration "undefined1 *puVar4;" (type_identifier "undefined1") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "uint uVar7;" (type_identifier "uint") (identifier "uVar7") (; ";")) (declaration "void *__dest;" (primitive_type "void") (pointer_declarator "*__dest" (* "*") (identifier "__dest")) (; ";")) (declaration "undefined1 *__src;" (type_identifier "undefined1") (pointer_declarator "*__src" (* "*") (identifier "__src")) (; ";")) (declaration "undefined4 uVar8;" (type_identifier "undefined4") (identifier "uVar8") (; ";")) (declaration "undefined2 extraout_CX;" (type_identifier "undefined2") (identifier "extraout_CX") (; ";")) (declaration "undefined1 *puVar9;" (type_identifier "undefined1") (pointer_declarator "*puVar9" (* "*") (identifier "puVar9")) (; ";")) (declaration "undefined1 uVar10;" (type_identifier "undefined1") (identifier "uVar10") (; ";")) (declaration "uint uVar11;" (type_identifier "uint") (identifier "uVar11") (; ";")) (declaration "undefined1 uVar12;" (type_identifier "undefined1") (identifier "uVar12") (; ";")) (declaration "undefined1 *puVar13;" (type_identifier "undefined1") (pointer_declarator "*puVar13" (* "*") (identifier "puVar13")) (; ";")) (declaration "undefined1 *puVar14;" (type_identifier "undefined1") (pointer_declarator "*puVar14" (* "*") (identifier "puVar14")) (; ";")) (declaration "size_t local_64;" (primitive_type "size_t") (identifier "local_64") (; ";")) (declaration "int local_5c;" (primitive_type "int") (identifier "local_5c") (; ";")) (declaration "int local_50;" (primitive_type "int") (identifier "local_50") (; ";")) (declaration "undefined1 *local_44;" (type_identifier "undefined1") (pointer_declarator "*local_44" (* "*") (identifier "local_44")) (; ";")) (expression_statement "iVar6 = FUN_000a94ff();" (assignment_expression "iVar6 = FUN_000a94ff()" (identifier "iVar6") (= "=") (call_expression "FUN_000a94ff()" (identifier "FUN_000a94ff") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "param_3 = param_3 + param_2;" (assignment_expression "param_3 = param_3 + param_2" (identifier "param_3") (= "=") (binary_expression "param_3 + param_2" (identifier "param_3") (+ "+") (identifier "param_2"))) (; ";")) (expression_statement "puVar2 = *(undefined1 **)(param_4 + 0x38);" (assignment_expression "puVar2 = *(undefined1 **)(param_4 + 0x38)" (identifier "puVar2") (= "=") (pointer_expression "*(undefined1 **)(param_4 + 0x38)" (* "*") (cast_expression "(undefined1 **)(param_4 + 0x38)" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_4 + 0x38)" (( "(") (binary_expression "param_4 + 0x38" (identifier "param_4") (+ "+") (number_literal "0x38")) () ")"))))) (; ";")) (expression_statement "local_64 = (*(int **)(param_4 + 0x34))[10];" (assignment_expression "local_64 = (*(int **)(param_4 + 0x34))[10]" (identifier "local_64") (= "=") (subscript_expression "(*(int **)(param_4 + 0x34))[10]" (parenthesized_expression "(*(int **)(param_4 + 0x34))" (( "(") (pointer_expression "*(int **)(param_4 + 0x34)" (* "*") (cast_expression "(int **)(param_4 + 0x34)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_4 + 0x34)" (( "(") (binary_expression "param_4 + 0x34" (identifier "param_4") (+ "+") (number_literal "0x34")) () ")")))) () ")")) ([ "[") (number_literal "10") (] "]"))) (; ";")) (expression_statement "puVar9 = puVar2 + local_64;" (assignment_expression "puVar9 = puVar2 + local_64" (identifier "puVar9") (= "=") (binary_expression "puVar2 + local_64" (identifier "puVar2") (+ "+") (identifier "local_64"))) (; ";")) (expression_statement "uVar11 = (uint)*(byte *)(param_4 + 9);" (assignment_expression "uVar11 = (uint)*(byte *)(param_4 + 9)" (identifier "uVar11") (= "=") (binary_expression "(uint)*(byte *)(param_4 + 9)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (cast_expression "(byte *)(param_4 + 9)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_4 + 9)" (( "(") (binary_expression "param_4 + 9" (identifier "param_4") (+ "+") (number_literal "9")) () ")"))))) (; ";")) (expression_statement "pvVar3 = *(void **)(**(int **)(param_4 + 0x34) + 0xcc);" (assignment_expression "pvVar3 = *(void **)(**(int **)(param_4 + 0x34) + 0xcc)" (identifier "pvVar3") (= "=") (pointer_expression "*(void **)(**(int **)(param_4 + 0x34) + 0xcc)" (* "*") (cast_expression "(void **)(**(int **)(param_4 + 0x34) + 0xcc)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(**(int **)(param_4 + 0x34) + 0xcc)" (( "(") (binary_expression "**(int **)(param_4 + 0x34) + 0xcc" (pointer_expression "**(int **)(param_4 + 0x34)" (* "*") (pointer_expression "*(int **)(param_4 + 0x34)" (* "*") (cast_expression "(int **)(param_4 + 0x34)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_4 + 0x34)" (( "(") (binary_expression "param_4 + 0x34" (identifier "param_4") (+ "+") (number_literal "0x34")) () ")"))))) (+ "+") (number_literal "0xcc")) () ")"))))) (; ";")) (expression_statement "puVar4 = *(undefined1 **)(param_4 + 0x40);" (assignment_expression "puVar4 = *(undefined1 **)(param_4 + 0x40)" (identifier "puVar4") (= "=") (pointer_expression "*(undefined1 **)(param_4 + 0x40)" (* "*") (cast_expression "(undefined1 **)(param_4 + 0x40)" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_4 + 0x40)" (( "(") (binary_expression "param_4 + 0x40" (identifier "param_4") (+ "+") (number_literal "0x40")) () ")"))))) (; ";")) (expression_statement "uVar7 = (uint)CONCAT11(puVar2[uVar11 + 5],puVar2[uVar11 + 6]);" (assignment_expression "uVar7 = (uint)CONCAT11(puVar2[uVar11 + 5],puVar2[uVar11 + 6])" (identifier "uVar7") (= "=") (cast_expression "(uint)CONCAT11(puVar2[uVar11 + 5],puVar2[uVar11 + 6])" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CONCAT11(puVar2[uVar11 + 5],puVar2[uVar11 + 6])" (identifier "CONCAT11") (argument_list "(puVar2[uVar11 + 5],puVar2[uVar11 + 6])" (( "(") (subscript_expression "puVar2[uVar11 + 5]" (identifier "puVar2") ([ "[") (binary_expression "uVar11 + 5" (identifier "uVar11") (+ "+") (number_literal "5")) (] "]")) (, ",") (subscript_expression "puVar2[uVar11 + 6]" (identifier "puVar2") ([ "[") (binary_expression "uVar11 + 6" (identifier "uVar11") (+ "+") (number_literal "6")) (] "]")) () ")"))))) (; ";")) (expression_statement "__dest = pvVar3;" (assignment_expression "__dest = pvVar3" (identifier "__dest") (= "=") (identifier "pvVar3")) (; ";")) (expression_statement "puVar13 = puVar2;" (assignment_expression "puVar13 = puVar2" (identifier "puVar13") (= "=") (identifier "puVar2")) (; ";")) (if_statement "if (uVar7 <= local_64) {\n    local_64 = local_64 - uVar7;\n    __dest = (void *)(uVar7 + (int)pvVar3);\n    puVar13 = puVar2 + uVar7;\n  }" (if "if") (parenthesized_expression "(uVar7 <= local_64)" (( "(") (binary_expression "uVar7 <= local_64" (identifier "uVar7") (<= "<=") (identifier "local_64")) () ")")) (compound_statement "{\n    local_64 = local_64 - uVar7;\n    __dest = (void *)(uVar7 + (int)pvVar3);\n    puVar13 = puVar2 + uVar7;\n  }" ({ "{") (expression_statement "local_64 = local_64 - uVar7;" (assignment_expression "local_64 = local_64 - uVar7" (identifier "local_64") (= "=") (binary_expression "local_64 - uVar7" (identifier "local_64") (- "-") (identifier "uVar7"))) (; ";")) (expression_statement "__dest = (void *)(uVar7 + (int)pvVar3);" (assignment_expression "__dest = (void *)(uVar7 + (int)pvVar3)" (identifier "__dest") (= "=") (cast_expression "(void *)(uVar7 + (int)pvVar3)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar7 + (int)pvVar3)" (( "(") (binary_expression "uVar7 + (int)pvVar3" (identifier "uVar7") (+ "+") (cast_expression "(int)pvVar3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar3"))) () ")")))) (; ";")) (expression_statement "puVar13 = puVar2 + uVar7;" (assignment_expression "puVar13 = puVar2 + uVar7" (identifier "puVar13") (= "=") (binary_expression "puVar2 + uVar7" (identifier "puVar2") (+ "+") (identifier "uVar7"))) (; ";")) (} "}"))) (expression_statement "memcpy(__dest,puVar13,local_64);" (call_expression "memcpy(__dest,puVar13,local_64)" (identifier "memcpy") (argument_list "(__dest,puVar13,local_64)" (( "(") (identifier "__dest") (, ",") (identifier "puVar13") (, ",") (identifier "local_64") () ")"))) (; ";")) (if_statement "if (param_2 < *(int *)(iVar6 + 0x28)) {\n    local_50 = 0;\n  }\n  else {\n    local_50 = 0;\n    do {\n      local_50 = local_50 + 1;\n      if (param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;\n    } while (local_50 != 6);\n  }" (if "if") (parenthesized_expression "(param_2 < *(int *)(iVar6 + 0x28))" (( "(") (binary_expression "param_2 < *(int *)(iVar6 + 0x28)" (identifier "param_2") (< "<") (pointer_expression "*(int *)(iVar6 + 0x28)" (* "*") (cast_expression "(int *)(iVar6 + 0x28)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar6 + 0x28)" (( "(") (binary_expression "iVar6 + 0x28" (identifier "iVar6") (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (compound_statement "{\n    local_50 = 0;\n  }" ({ "{") (expression_statement "local_50 = 0;" (assignment_expression "local_50 = 0" (identifier "local_50") (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n    local_50 = 0;\n    do {\n      local_50 = local_50 + 1;\n      if (param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;\n    } while (local_50 != 6);\n  }" (else "else") (compound_statement "{\n    local_50 = 0;\n    do {\n      local_50 = local_50 + 1;\n      if (param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;\n    } while (local_50 != 6);\n  }" ({ "{") (expression_statement "local_50 = 0;" (assignment_expression "local_50 = 0" (identifier "local_50") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n      local_50 = local_50 + 1;\n      if (param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;\n    } while (local_50 != 6);" (do "do") (compound_statement "{\n      local_50 = local_50 + 1;\n      if (param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;\n    }" ({ "{") (expression_statement "local_50 = local_50 + 1;" (assignment_expression "local_50 = local_50 + 1" (identifier "local_50") (= "=") (binary_expression "local_50 + 1" (identifier "local_50") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;" (if "if") (parenthesized_expression "(param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4))" (( "(") (binary_expression "param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4)" (identifier "param_2") (< "<") (pointer_expression "*(int *)(iVar6 + 0x28 + local_50 * 4)" (* "*") (cast_expression "(int *)(iVar6 + 0x28 + local_50 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar6 + 0x28 + local_50 * 4)" (( "(") (binary_expression "iVar6 + 0x28 + local_50 * 4" (binary_expression "iVar6 + 0x28" (identifier "iVar6") (+ "+") (number_literal "0x28")) (+ "+") (binary_expression "local_50 * 4" (identifier "local_50") (* "*") (number_literal "4"))) () ")"))))) () ")")) (break_statement "break;" (break "break") (; ";"))) (} "}")) (while "while") (parenthesized_expression "(local_50 != 6)" (( "(") (binary_expression "local_50 != 6" (identifier "local_50") (!= "!=") (number_literal "6")) () ")")) (; ";")) (} "}")))) (expression_statement "local_44 = *(undefined1 **)(iVar6 + 0x10 + local_50 * 4);" (assignment_expression "local_44 = *(undefined1 **)(iVar6 + 0x10 + local_50 * 4)" (identifier "local_44") (= "=") (pointer_expression "*(undefined1 **)(iVar6 + 0x10 + local_50 * 4)" (* "*") (cast_expression "(undefined1 **)(iVar6 + 0x10 + local_50 * 4)" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar6 + 0x10 + local_50 * 4)" (( "(") (binary_expression "iVar6 + 0x10 + local_50 * 4" (binary_expression "iVar6 + 0x10" (identifier "iVar6") (+ "+") (number_literal "0x10")) (+ "+") (binary_expression "local_50 * 4" (identifier "local_50") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "local_5c = param_2 * 4;" (assignment_expression "local_5c = param_2 * 4" (identifier "local_5c") (= "=") (binary_expression "param_2 * 4" (identifier "param_2") (* "*") (number_literal "4"))) (; ";")) (expression_statement "iVar5 = param_2 * 2;" (assignment_expression "iVar5 = param_2 * 2" (identifier "iVar5") (= "=") (binary_expression "param_2 * 2" (identifier "param_2") (* "*") (number_literal "2"))) (; ";")) (expression_statement "puVar13 = puVar9;" (assignment_expression "puVar13 = puVar9" (identifier "puVar13") (= "=") (identifier "puVar9")) (; ";")) (expression_statement "puVar14 = puVar4;" (assignment_expression "puVar14 = puVar4" (identifier "puVar14") (= "=") (identifier "puVar4")) (; ";")) (while_statement "while( true ) {\n    __src = *(undefined1 **)(*(int *)(iVar6 + 8) + local_5c);\n    uVar7 = (uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc));\n    if ((__src < puVar2) || (puVar9 <= __src)) {\n      if ((__src < local_44) && (local_44 < __src + uVar7)) break;\n    }\n    else {\n      if (puVar9 < __src + uVar7) {\n        uVar8 = FUN_000383f0();\n        return uVar8;\n      }\n      __src = (undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3);\n    }\n    puVar13 = puVar13 + -uVar7;\n    uVar10 = (undefined1)((int)puVar13 - (int)puVar2);\n    puVar14[1] = uVar10;\n    uVar12 = (undefined1)((uint)((int)puVar13 - (int)puVar2) >> 8);\n    *puVar14 = uVar12;\n    if (puVar13 < puVar14 + 2) break;\n    param_2 = param_2 + 1;\n    memcpy(puVar13,__src,uVar7);\n    if (param_3 <= param_2) {\n      *(undefined1 *)(param_4 + 0xc) = 0;\n      *(undefined2 *)(param_4 + 0x18) = extraout_CX;\n      puVar2[uVar11 + 1] = 0;\n      puVar2[uVar11 + 2] = 0;\n      puVar2[uVar11 + 3] = *(undefined1 *)(param_4 + 0x19);\n      puVar2[uVar11 + 4] = (char)*(undefined2 *)(param_4 + 0x18);\n      puVar2[uVar11 + 5] = uVar12;\n      puVar2[uVar11 + 6] = uVar10;\n      puVar2[uVar11 + 7] = 0;\n      return 0;\n    }\n    iVar1 = iVar6 + local_50 * 4;\n    if (*(int *)(iVar1 + 0x28) <= param_2) {\n      local_44 = *(undefined1 **)(iVar1 + 0x14);\n      local_50 = local_50 + 1;\n    }\n    local_5c = local_5c + 4;\n    puVar14 = puVar14 + 2;\n  }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n    __src = *(undefined1 **)(*(int *)(iVar6 + 8) + local_5c);\n    uVar7 = (uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc));\n    if ((__src < puVar2) || (puVar9 <= __src)) {\n      if ((__src < local_44) && (local_44 < __src + uVar7)) break;\n    }\n    else {\n      if (puVar9 < __src + uVar7) {\n        uVar8 = FUN_000383f0();\n        return uVar8;\n      }\n      __src = (undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3);\n    }\n    puVar13 = puVar13 + -uVar7;\n    uVar10 = (undefined1)((int)puVar13 - (int)puVar2);\n    puVar14[1] = uVar10;\n    uVar12 = (undefined1)((uint)((int)puVar13 - (int)puVar2) >> 8);\n    *puVar14 = uVar12;\n    if (puVar13 < puVar14 + 2) break;\n    param_2 = param_2 + 1;\n    memcpy(puVar13,__src,uVar7);\n    if (param_3 <= param_2) {\n      *(undefined1 *)(param_4 + 0xc) = 0;\n      *(undefined2 *)(param_4 + 0x18) = extraout_CX;\n      puVar2[uVar11 + 1] = 0;\n      puVar2[uVar11 + 2] = 0;\n      puVar2[uVar11 + 3] = *(undefined1 *)(param_4 + 0x19);\n      puVar2[uVar11 + 4] = (char)*(undefined2 *)(param_4 + 0x18);\n      puVar2[uVar11 + 5] = uVar12;\n      puVar2[uVar11 + 6] = uVar10;\n      puVar2[uVar11 + 7] = 0;\n      return 0;\n    }\n    iVar1 = iVar6 + local_50 * 4;\n    if (*(int *)(iVar1 + 0x28) <= param_2) {\n      local_44 = *(undefined1 **)(iVar1 + 0x14);\n      local_50 = local_50 + 1;\n    }\n    local_5c = local_5c + 4;\n    puVar14 = puVar14 + 2;\n  }" ({ "{") (expression_statement "__src = *(undefined1 **)(*(int *)(iVar6 + 8) + local_5c);" (assignment_expression "__src = *(undefined1 **)(*(int *)(iVar6 + 8) + local_5c)" (identifier "__src") (= "=") (pointer_expression "*(undefined1 **)(*(int *)(iVar6 + 8) + local_5c)" (* "*") (cast_expression "(undefined1 **)(*(int *)(iVar6 + 8) + local_5c)" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)(iVar6 + 8) + local_5c)" (( "(") (binary_expression "*(int *)(iVar6 + 8) + local_5c" (pointer_expression "*(int *)(iVar6 + 8)" (* "*") (cast_expression "(int *)(iVar6 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar6 + 8)" (( "(") (binary_expression "iVar6 + 8" (identifier "iVar6") (+ "+") (number_literal "8")) () ")")))) (+ "+") (identifier "local_5c")) () ")"))))) (; ";")) (expression_statement "uVar7 = (uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc));" (assignment_expression "uVar7 = (uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc))" (identifier "uVar7") (= "=") (binary_expression "(uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc))" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (cast_expression "(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc))" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc))" (( "(") (binary_expression "puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc)" (binary_expression "puVar14 + (iVar5 - (int)puVar4)" (identifier "puVar14") (+ "+") (parenthesized_expression "(iVar5 - (int)puVar4)" (( "(") (binary_expression "iVar5 - (int)puVar4" (identifier "iVar5") (- "-") (cast_expression "(int)puVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar4"))) () ")"))) (+ "+") (pointer_expression "*(int *)(iVar6 + 0xc)" (* "*") (cast_expression "(int *)(iVar6 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar6 + 0xc)" (( "(") (binary_expression "iVar6 + 0xc" (identifier "iVar6") (+ "+") (number_literal "0xc")) () ")"))))) () ")"))))) (; ";")) (if_statement "if ((__src < puVar2) || (puVar9 <= __src)) {\n      if ((__src < local_44) && (local_44 < __src + uVar7)) break;\n    }\n    else {\n      if (puVar9 < __src + uVar7) {\n        uVar8 = FUN_000383f0();\n        return uVar8;\n      }\n      __src = (undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3);\n    }" (if "if") (parenthesized_expression "((__src < puVar2) || (puVar9 <= __src))" (( "(") (binary_expression "(__src < puVar2) || (puVar9 <= __src)" (parenthesized_expression "(__src < puVar2)" (( "(") (binary_expression "__src < puVar2" (identifier "__src") (< "<") (identifier "puVar2")) () ")")) (|| "||") (parenthesized_expression "(puVar9 <= __src)" (( "(") (binary_expression "puVar9 <= __src" (identifier "puVar9") (<= "<=") (identifier "__src")) () ")"))) () ")")) (compound_statement "{\n      if ((__src < local_44) && (local_44 < __src + uVar7)) break;\n    }" ({ "{") (if_statement "if ((__src < local_44) && (local_44 < __src + uVar7)) break;" (if "if") (parenthesized_expression "((__src < local_44) && (local_44 < __src + uVar7))" (( "(") (binary_expression "(__src < local_44) && (local_44 < __src + uVar7)" (parenthesized_expression "(__src < local_44)" (( "(") (binary_expression "__src < local_44" (identifier "__src") (< "<") (identifier "local_44")) () ")")) (&& "&&") (parenthesized_expression "(local_44 < __src + uVar7)" (( "(") (binary_expression "local_44 < __src + uVar7" (identifier "local_44") (< "<") (binary_expression "__src + uVar7" (identifier "__src") (+ "+") (identifier "uVar7"))) () ")"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (} "}")) (else_clause "else {\n      if (puVar9 < __src + uVar7) {\n        uVar8 = FUN_000383f0();\n        return uVar8;\n      }\n      __src = (undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3);\n    }" (else "else") (compound_statement "{\n      if (puVar9 < __src + uVar7) {\n        uVar8 = FUN_000383f0();\n        return uVar8;\n      }\n      __src = (undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3);\n    }" ({ "{") (if_statement "if (puVar9 < __src + uVar7) {\n        uVar8 = FUN_000383f0();\n        return uVar8;\n      }" (if "if") (parenthesized_expression "(puVar9 < __src + uVar7)" (( "(") (binary_expression "puVar9 < __src + uVar7" (identifier "puVar9") (< "<") (binary_expression "__src + uVar7" (identifier "__src") (+ "+") (identifier "uVar7"))) () ")")) (compound_statement "{\n        uVar8 = FUN_000383f0();\n        return uVar8;\n      }" ({ "{") (expression_statement "uVar8 = FUN_000383f0();" (assignment_expression "uVar8 = FUN_000383f0()" (identifier "uVar8") (= "=") (call_expression "FUN_000383f0()" (identifier "FUN_000383f0") (argument_list "()" (( "(") () ")")))) (; ";")) (return_statement "return uVar8;" (return "return") (identifier "uVar8") (; ";")) (} "}"))) (expression_statement "__src = (undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3);" (assignment_expression "__src = (undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3)" (identifier "__src") (= "=") (cast_expression "(undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(((int)__src - (int)puVar2) + (int)pvVar3)" (( "(") (binary_expression "((int)__src - (int)puVar2) + (int)pvVar3" (parenthesized_expression "((int)__src - (int)puVar2)" (( "(") (binary_expression "(int)__src - (int)puVar2" (cast_expression "(int)__src" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "__src")) (- "-") (cast_expression "(int)puVar2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar2"))) () ")")) (+ "+") (cast_expression "(int)pvVar3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar3"))) () ")")))) (; ";")) (} "}")))) (expression_statement "puVar13 = puVar13 + -uVar7;" (assignment_expression "puVar13 = puVar13 + -uVar7" (identifier "puVar13") (= "=") (binary_expression "puVar13 + -uVar7" (identifier "puVar13") (+ "+") (unary_expression "-uVar7" (- "-") (identifier "uVar7")))) (; ";")) (expression_statement "uVar10 = (undefined1)((int)puVar13 - (int)puVar2);" (assignment_expression "uVar10 = (undefined1)((int)puVar13 - (int)puVar2)" (identifier "uVar10") (= "=") (call_expression "(undefined1)((int)puVar13 - (int)puVar2)" (parenthesized_expression "(undefined1)" (( "(") (identifier "undefined1") () ")")) (argument_list "((int)puVar13 - (int)puVar2)" (( "(") (binary_expression "(int)puVar13 - (int)puVar2" (cast_expression "(int)puVar13" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar13")) (- "-") (cast_expression "(int)puVar2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar2"))) () ")")))) (; ";")) (expression_statement "puVar14[1] = uVar10;" (assignment_expression "puVar14[1] = uVar10" (subscript_expression "puVar14[1]" (identifier "puVar14") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "uVar10")) (; ";")) (expression_statement "uVar12 = (undefined1)((uint)((int)puVar13 - (int)puVar2) >> 8);" (assignment_expression "uVar12 = (undefined1)((uint)((int)puVar13 - (int)puVar2) >> 8)" (identifier "uVar12") (= "=") (call_expression "(undefined1)((uint)((int)puVar13 - (int)puVar2) >> 8)" (parenthesized_expression "(undefined1)" (( "(") (identifier "undefined1") () ")")) (argument_list "((uint)((int)puVar13 - (int)puVar2) >> 8)" (( "(") (binary_expression "(uint)((int)puVar13 - (int)puVar2) >> 8" (call_expression "(uint)((int)puVar13 - (int)puVar2)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((int)puVar13 - (int)puVar2)" (( "(") (binary_expression "(int)puVar13 - (int)puVar2" (cast_expression "(int)puVar13" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar13")) (- "-") (cast_expression "(int)puVar2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar2"))) () ")"))) (>> ">>") (number_literal "8")) () ")")))) (; ";")) (expression_statement "*puVar14 = uVar12;" (assignment_expression "*puVar14 = uVar12" (pointer_expression "*puVar14" (* "*") (identifier "puVar14")) (= "=") (identifier "uVar12")) (; ";")) (if_statement "if (puVar13 < puVar14 + 2) break;" (if "if") (parenthesized_expression "(puVar13 < puVar14 + 2)" (( "(") (binary_expression "puVar13 < puVar14 + 2" (identifier "puVar13") (< "<") (binary_expression "puVar14 + 2" (identifier "puVar14") (+ "+") (number_literal "2"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "param_2 = param_2 + 1;" (assignment_expression "param_2 = param_2 + 1" (identifier "param_2") (= "=") (binary_expression "param_2 + 1" (identifier "param_2") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "memcpy(puVar13,__src,uVar7);" (call_expression "memcpy(puVar13,__src,uVar7)" (identifier "memcpy") (argument_list "(puVar13,__src,uVar7)" (( "(") (identifier "puVar13") (, ",") (identifier "__src") (, ",") (identifier "uVar7") () ")"))) (; ";")) (if_statement "if (param_3 <= param_2) {\n      *(undefined1 *)(param_4 + 0xc) = 0;\n      *(undefined2 *)(param_4 + 0x18) = extraout_CX;\n      puVar2[uVar11 + 1] = 0;\n      puVar2[uVar11 + 2] = 0;\n      puVar2[uVar11 + 3] = *(undefined1 *)(param_4 + 0x19);\n      puVar2[uVar11 + 4] = (char)*(undefined2 *)(param_4 + 0x18);\n      puVar2[uVar11 + 5] = uVar12;\n      puVar2[uVar11 + 6] = uVar10;\n      puVar2[uVar11 + 7] = 0;\n      return 0;\n    }" (if "if") (parenthesized_expression "(param_3 <= param_2)" (( "(") (binary_expression "param_3 <= param_2" (identifier "param_3") (<= "<=") (identifier "param_2")) () ")")) (compound_statement "{\n      *(undefined1 *)(param_4 + 0xc) = 0;\n      *(undefined2 *)(param_4 + 0x18) = extraout_CX;\n      puVar2[uVar11 + 1] = 0;\n      puVar2[uVar11 + 2] = 0;\n      puVar2[uVar11 + 3] = *(undefined1 *)(param_4 + 0x19);\n      puVar2[uVar11 + 4] = (char)*(undefined2 *)(param_4 + 0x18);\n      puVar2[uVar11 + 5] = uVar12;\n      puVar2[uVar11 + 6] = uVar10;\n      puVar2[uVar11 + 7] = 0;\n      return 0;\n    }" ({ "{") (expression_statement "*(undefined1 *)(param_4 + 0xc) = 0;" (assignment_expression "*(undefined1 *)(param_4 + 0xc) = 0" (pointer_expression "*(undefined1 *)(param_4 + 0xc)" (* "*") (cast_expression "(undefined1 *)(param_4 + 0xc)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_4 + 0xc)" (( "(") (binary_expression "param_4 + 0xc" (identifier "param_4") (+ "+") (number_literal "0xc")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined2 *)(param_4 + 0x18) = extraout_CX;" (assignment_expression "*(undefined2 *)(param_4 + 0x18) = extraout_CX" (pointer_expression "*(undefined2 *)(param_4 + 0x18)" (* "*") (cast_expression "(undefined2 *)(param_4 + 0x18)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_4 + 0x18)" (( "(") (binary_expression "param_4 + 0x18" (identifier "param_4") (+ "+") (number_literal "0x18")) () ")")))) (= "=") (identifier "extraout_CX")) (; ";")) (expression_statement "puVar2[uVar11 + 1] = 0;" (assignment_expression "puVar2[uVar11 + 1] = 0" (subscript_expression "puVar2[uVar11 + 1]" (identifier "puVar2") ([ "[") (binary_expression "uVar11 + 1" (identifier "uVar11") (+ "+") (number_literal "1")) (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar2[uVar11 + 2] = 0;" (assignment_expression "puVar2[uVar11 + 2] = 0" (subscript_expression "puVar2[uVar11 + 2]" (identifier "puVar2") ([ "[") (binary_expression "uVar11 + 2" (identifier "uVar11") (+ "+") (number_literal "2")) (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar2[uVar11 + 3] = *(undefined1 *)(param_4 + 0x19);" (assignment_expression "puVar2[uVar11 + 3] = *(undefined1 *)(param_4 + 0x19)" (subscript_expression "puVar2[uVar11 + 3]" (identifier "puVar2") ([ "[") (binary_expression "uVar11 + 3" (identifier "uVar11") (+ "+") (number_literal "3")) (] "]")) (= "=") (pointer_expression "*(undefined1 *)(param_4 + 0x19)" (* "*") (cast_expression "(undefined1 *)(param_4 + 0x19)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_4 + 0x19)" (( "(") (binary_expression "param_4 + 0x19" (identifier "param_4") (+ "+") (number_literal "0x19")) () ")"))))) (; ";")) (expression_statement "puVar2[uVar11 + 4] = (char)*(undefined2 *)(param_4 + 0x18);" (assignment_expression "puVar2[uVar11 + 4] = (char)*(undefined2 *)(param_4 + 0x18)" (subscript_expression "puVar2[uVar11 + 4]" (identifier "puVar2") ([ "[") (binary_expression "uVar11 + 4" (identifier "uVar11") (+ "+") (number_literal "4")) (] "]")) (= "=") (cast_expression "(char)*(undefined2 *)(param_4 + 0x18)" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (pointer_expression "*(undefined2 *)(param_4 + 0x18)" (* "*") (cast_expression "(undefined2 *)(param_4 + 0x18)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_4 + 0x18)" (( "(") (binary_expression "param_4 + 0x18" (identifier "param_4") (+ "+") (number_literal "0x18")) () ")")))))) (; ";")) (expression_statement "puVar2[uVar11 + 5] = uVar12;" (assignment_expression "puVar2[uVar11 + 5] = uVar12" (subscript_expression "puVar2[uVar11 + 5]" (identifier "puVar2") ([ "[") (binary_expression "uVar11 + 5" (identifier "uVar11") (+ "+") (number_literal "5")) (] "]")) (= "=") (identifier "uVar12")) (; ";")) (expression_statement "puVar2[uVar11 + 6] = uVar10;" (assignment_expression "puVar2[uVar11 + 6] = uVar10" (subscript_expression "puVar2[uVar11 + 6]" (identifier "puVar2") ([ "[") (binary_expression "uVar11 + 6" (identifier "uVar11") (+ "+") (number_literal "6")) (] "]")) (= "=") (identifier "uVar10")) (; ";")) (expression_statement "puVar2[uVar11 + 7] = 0;" (assignment_expression "puVar2[uVar11 + 7] = 0" (subscript_expression "puVar2[uVar11 + 7]" (identifier "puVar2") ([ "[") (binary_expression "uVar11 + 7" (identifier "uVar11") (+ "+") (number_literal "7")) (] "]")) (= "=") (number_literal "0")) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "iVar1 = iVar6 + local_50 * 4;" (assignment_expression "iVar1 = iVar6 + local_50 * 4" (identifier "iVar1") (= "=") (binary_expression "iVar6 + local_50 * 4" (identifier "iVar6") (+ "+") (binary_expression "local_50 * 4" (identifier "local_50") (* "*") (number_literal "4")))) (; ";")) (if_statement "if (*(int *)(iVar1 + 0x28) <= param_2) {\n      local_44 = *(undefined1 **)(iVar1 + 0x14);\n      local_50 = local_50 + 1;\n    }" (if "if") (parenthesized_expression "(*(int *)(iVar1 + 0x28) <= param_2)" (( "(") (binary_expression "*(int *)(iVar1 + 0x28) <= param_2" (pointer_expression "*(int *)(iVar1 + 0x28)" (* "*") (cast_expression "(int *)(iVar1 + 0x28)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 + 0x28)" (( "(") (binary_expression "iVar1 + 0x28" (identifier "iVar1") (+ "+") (number_literal "0x28")) () ")")))) (<= "<=") (identifier "param_2")) () ")")) (compound_statement "{\n      local_44 = *(undefined1 **)(iVar1 + 0x14);\n      local_50 = local_50 + 1;\n    }" ({ "{") (expression_statement "local_44 = *(undefined1 **)(iVar1 + 0x14);" (assignment_expression "local_44 = *(undefined1 **)(iVar1 + 0x14)" (identifier "local_44") (= "=") (pointer_expression "*(undefined1 **)(iVar1 + 0x14)" (* "*") (cast_expression "(undefined1 **)(iVar1 + 0x14)" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar1 + 0x14)" (( "(") (binary_expression "iVar1 + 0x14" (identifier "iVar1") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "local_50 = local_50 + 1;" (assignment_expression "local_50 = local_50 + 1" (identifier "local_50") (= "=") (binary_expression "local_50 + 1" (identifier "local_50") (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (expression_statement "local_5c = local_5c + 4;" (assignment_expression "local_5c = local_5c + 4" (identifier "local_5c") (= "=") (binary_expression "local_5c + 4" (identifier "local_5c") (+ "+") (number_literal "4"))) (; ";")) (expression_statement "puVar14 = puVar14 + 2;" (assignment_expression "puVar14 = puVar14 + 2" (identifier "puVar14") (= "=") (binary_expression "puVar14 + 2" (identifier "puVar14") (+ "+") (number_literal "2"))) (; ";")) (} "}"))) (expression_statement "uVar8 = FUN_000383f0();" (assignment_expression "uVar8 = FUN_000383f0()" (identifier "uVar8") (= "=") (call_expression "FUN_000383f0()" (identifier "FUN_000383f0") (argument_list "()" (( "(") () ")")))) (; ";")) (return_statement "return uVar8;" (return "return") (identifier "uVar8") (; ";")) (} "}")))

int __regparm3 function_1(type_1 *pCArray,int var_3,int var_2,type_2 *pPg)

{
  int var_22;
  type_3 *var_4;
  char *var_9;
  type_3 *puVar4;
  int var_15;
  int var_11;
  type_4 var_8;
  char *__dest;
  type_3 *var_16;
  type_5 extraout_CX;
  type_3 *var_17;
  type_3 uVar9;
  type_4 var_7;
  type_3 uVar11;
  int var_21;
  type_3 *var_20;
  type_3 *var_14;
  size_t var_5;
  int var_13;
  int var_12;
  type_3 *var_18;
  
  var_11 = var_1();
  var_21 = var_2 + var_3;
  var_4 = pPg->aData;
  var_5 = pPg->pBt->usableSize;
  var_17 = var_4 + var_5;
  var_7 = (type_4)pPg->hdrOffset;
  var_9 = pPg->pBt->pPager->pTmpSpace;
  puVar4 = pPg->aCellIdx;
  var_8 = (type_4)var_6(var_4[var_7 + 5],var_4[var_7 + 6]);
  __dest = var_9;
  var_20 = var_4;
  if (var_8 <= var_5) {
    var_5 = var_5 - var_8;
    __dest = var_9 + var_8;
    var_20 = var_4 + var_8;
  }
  var_10(__dest,var_20,var_5);
  if (var_3 < *(int *)(var_11 + 0x28)) {
    var_12 = 0;
  }
  else {
    var_12 = 0;
    do {
      var_12 = var_12 + 1;
      if (var_3 < *(int *)(var_11 + 0x28 + var_12 * 4)) break;
    } while (var_12 != 6);
  }
  var_18 = *(type_3 **)(var_11 + 0x10 + var_12 * 4);
  var_13 = var_3 * 4;
  var_15 = var_3 * 2;
  var_20 = var_17;
  var_14 = puVar4;
  do {
    var_16 = *(type_3 **)(*(int *)(var_11 + 8) + var_13);
    var_8 = (type_4)*(type_6 *)(var_14 + (var_15 - (int)puVar4) + *(int *)(var_11 + 0xc));
    if ((var_16 < var_4) || (var_17 <= var_16)) {
      if ((var_16 < var_18) && (var_18 < var_16 + var_8)) {
        var_11 = 0x11724;
        goto LAB_000395cd;
      }
    }
    else {
      if (var_17 < var_16 + var_8) {
        var_11 = var_19(0x1171f);
        return var_11;
      }
      var_16 = (type_3 *)(var_9 + ((int)var_16 - (int)var_4));
    }
    var_20 = var_20 + -var_8;
    uVar9 = (type_3)((int)var_20 - (int)var_4);
    var_14[1] = uVar9;
    uVar11 = (type_3)((type_4)((int)var_20 - (int)var_4) >> 8);
    *var_14 = uVar11;
    if (var_20 < var_14 + 2) {
      var_11 = 0x1172a;
LAB_000395cd:
      var_11 = var_19(var_11);
      return var_11;
    }
    var_3 = var_3 + 1;
    var_10(var_20,var_16,var_8);
    if (var_21 <= var_3) {
      pPg->nOverflow = '\0';
      pPg->var_2 = extraout_CX;
      var_4[var_7 + 1] = '\0';
      var_4[var_7 + 2] = '\0';
      var_4[var_7 + 3] = *(type_3 *)((int)&pPg->var_2 + 1);
      var_4[var_7 + 4] = (type_3)pPg->var_2;
      var_4[var_7 + 5] = uVar11;
      var_4[var_7 + 6] = uVar9;
      var_4[var_7 + 7] = '\0';
      return 0;
    }
    var_22 = var_11 + var_12 * 4;
    if (*(int *)(var_22 + 0x28) <= var_3) {
      var_18 = *(type_3 **)(var_22 + 0x14);
      var_12 = var_12 + 1;
    }
    var_13 = var_13 + 4;
    var_14 = var_14 + 2;
  } while( true );
}


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

undefined4 __regparm3 MASKED(undefined4 param_1,int param_2,int param_3,int param_4)

{
  int iVar1;
  undefined1 *puVar2;
  void *pvVar3;
  undefined1 *puVar4;
  int iVar5;
  int iVar6;
  uint uVar7;
  void *__dest;
  undefined1 *__src;
  undefined4 uVar8;
  undefined2 extraout_CX;
  undefined1 *puVar9;
  undefined1 uVar10;
  uint uVar11;
  undefined1 uVar12;
  undefined1 *puVar13;
  undefined1 *puVar14;
  size_t local_64;
  int local_5c;
  int local_50;
  undefined1 *local_44;
  
  iVar6 = FUN_000a94ff();
  param_3 = param_3 + param_2;
  puVar2 = *(undefined1 **)(param_4 + 0x38);
  local_64 = (*(int **)(param_4 + 0x34))[10];
  puVar9 = puVar2 + local_64;
  uVar11 = (uint)*(byte *)(param_4 + 9);
  pvVar3 = *(void **)(**(int **)(param_4 + 0x34) + 0xcc);
  puVar4 = *(undefined1 **)(param_4 + 0x40);
  uVar7 = (uint)CONCAT11(puVar2[uVar11 + 5],puVar2[uVar11 + 6]);
  __dest = pvVar3;
  puVar13 = puVar2;
  if (uVar7 <= local_64) {
    local_64 = local_64 - uVar7;
    __dest = (void *)(uVar7 + (int)pvVar3);
    puVar13 = puVar2 + uVar7;
  }
  memcpy(__dest,puVar13,local_64);
  if (param_2 < *(int *)(iVar6 + 0x28)) {
    local_50 = 0;
  }
  else {
    local_50 = 0;
    do {
      local_50 = local_50 + 1;
      if (param_2 < *(int *)(iVar6 + 0x28 + local_50 * 4)) break;
    } while (local_50 != 6);
  }
  local_44 = *(undefined1 **)(iVar6 + 0x10 + local_50 * 4);
  local_5c = param_2 * 4;
  iVar5 = param_2 * 2;
  puVar13 = puVar9;
  puVar14 = puVar4;
  while( true ) {
    __src = *(undefined1 **)(*(int *)(iVar6 + 8) + local_5c);
    uVar7 = (uint)*(ushort *)(puVar14 + (iVar5 - (int)puVar4) + *(int *)(iVar6 + 0xc));
    if ((__src < puVar2) || (puVar9 <= __src)) {
      if ((__src < local_44) && (local_44 < __src + uVar7)) break;
    }
    else {
      if (puVar9 < __src + uVar7) {
        uVar8 = FUN_000383f0();
        return uVar8;
      }
      __src = (undefined1 *)(((int)__src - (int)puVar2) + (int)pvVar3);
    }
    puVar13 = puVar13 + -uVar7;
    uVar10 = (undefined1)((int)puVar13 - (int)puVar2);
    puVar14[1] = uVar10;
    uVar12 = (undefined1)((uint)((int)puVar13 - (int)puVar2) >> 8);
    *puVar14 = uVar12;
    if (puVar13 < puVar14 + 2) break;
    param_2 = param_2 + 1;
    memcpy(puVar13,__src,uVar7);
    if (param_3 <= param_2) {
      *(undefined1 *)(param_4 + 0xc) = 0;
      *(undefined2 *)(param_4 + 0x18) = extraout_CX;
      puVar2[uVar11 + 1] = 0;
      puVar2[uVar11 + 2] = 0;
      puVar2[uVar11 + 3] = *(undefined1 *)(param_4 + 0x19);
      puVar2[uVar11 + 4] = (char)*(undefined2 *)(param_4 + 0x18);
      puVar2[uVar11 + 5] = uVar12;
      puVar2[uVar11 + 6] = uVar10;
      puVar2[uVar11 + 7] = 0;
      return 0;
    }
    iVar1 = iVar6 + local_50 * 4;
    if (*(int *)(iVar1 + 0x28) <= param_2) {
      local_44 = *(undefined1 **)(iVar1 + 0x14);
      local_50 = local_50 + 1;
    }
    local_5c = local_5c + 4;
    puVar14 = puVar14 + 2;
  }
  uVar8 = FUN_000383f0();
  return uVar8;
}

