
int moveToLeftmost(BtCursor *pCur)

{
  uint uVar1;
  MemPage *pMVar2;
  int iVar3;
  
  do {
    pMVar2 = pCur->pPage;
    if (pMVar2->leaf != '\0') {
      return 0;
    }
    uVar1 = *(uint *)(pMVar2->aData +
                     ((*(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) << 8 |
                      *(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) >> 8) &
                     pMVar2->maskPage));
    iVar3 = moveToChild(pCur,uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |
                             uVar1 << 0x18);
  } while (iVar3 == 0);
  return iVar3;
}



undefined8 FUN_001451f0(long param_1)

{
  ushort uVar1;
  uint uVar2;
  long lVar3;
  undefined8 uVar4;
  
  do {
    lVar3 = *(long *)(param_1 + 0x88);
    if (*(char *)(lVar3 + 8) != '\0') {
      return 0;
    }
    uVar1 = *(ushort *)
             (*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2));
    uVar2 = *(uint *)(*(long *)(lVar3 + 0x50) +
                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)));
    uVar4 = FUN_00145130(param_1,uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 |
                                 uVar2 << 0x18);
  } while ((int)uVar4 == 0);
  return uVar4;
}


PUSH RBX
MOV RBX,RDI
NOP dword ptr [RAX]
MOV RDX,qword ptr [RBX + 0x88]
CMP byte ptr [RDX + 0x8],0x0
JNZ 0x00145240
MOVZX EAX,word ptr [RBX + 0x56]
MOV RCX,qword ptr [RDX + 0x60]
MOV RDI,RBX
ADD EAX,EAX
CDQE
MOVZX EAX,word ptr [RCX + RAX*0x1]
ROL AX,0x8
AND AX,word ptr [RDX + 0x18]
MOV RDX,qword ptr [RDX + 0x50]
MOVZX EAX,AX
MOV ESI,dword ptr [RDX + RAX*0x1]
BSWAP ESI
CALL 0x00145130
TEST EAX,EAX
JZ 0x001451f8
POP RBX
RET
XOR EAX,EAX
POP RBX
RET
(translation_unit "undefined8 FUN_001451f0(long param_1)\n\n{\n  ushort uVar1;\n  uint uVar2;\n  long lVar3;\n  undefined8 uVar4;\n  \n  do {\n    lVar3 = *(long *)(param_1 + 0x88);\n    if (*(char *)(lVar3 + 8) != '\0') {\n      return 0;\n    }\n    uVar1 = *(ushort *)\n             (*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2));\n    uVar2 = *(uint *)(*(long *)(lVar3 + 0x50) +\n                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)));\n    uVar4 = FUN_00145130(param_1,uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 |\n                                 uVar2 << 0x18);\n  } while ((int)uVar4 == 0);\n  return uVar4;\n}\n\n" (function_definition "undefined8 FUN_001451f0(long param_1)\n\n{\n  ushort uVar1;\n  uint uVar2;\n  long lVar3;\n  undefined8 uVar4;\n  \n  do {\n    lVar3 = *(long *)(param_1 + 0x88);\n    if (*(char *)(lVar3 + 8) != '\0') {\n      return 0;\n    }\n    uVar1 = *(ushort *)\n             (*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2));\n    uVar2 = *(uint *)(*(long *)(lVar3 + 0x50) +\n                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)));\n    uVar4 = FUN_00145130(param_1,uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 |\n                                 uVar2 << 0x18);\n  } while ((int)uVar4 == 0);\n  return uVar4;\n}" type_identifier (function_declarator "FUN_001451f0(long param_1)" identifier (parameter_list "(long param_1)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  ushort uVar1;\n  uint uVar2;\n  long lVar3;\n  undefined8 uVar4;\n  \n  do {\n    lVar3 = *(long *)(param_1 + 0x88);\n    if (*(char *)(lVar3 + 8) != '\0') {\n      return 0;\n    }\n    uVar1 = *(ushort *)\n             (*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2));\n    uVar2 = *(uint *)(*(long *)(lVar3 + 0x50) +\n                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)));\n    uVar4 = FUN_00145130(param_1,uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 |\n                                 uVar2 << 0x18);\n  } while ((int)uVar4 == 0);\n  return uVar4;\n}" { (declaration "ushort uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 uVar4;" type_identifier identifier ;) (do_statement "do {\n    lVar3 = *(long *)(param_1 + 0x88);\n    if (*(char *)(lVar3 + 8) != '\0') {\n      return 0;\n    }\n    uVar1 = *(ushort *)\n             (*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2));\n    uVar2 = *(uint *)(*(long *)(lVar3 + 0x50) +\n                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)));\n    uVar4 = FUN_00145130(param_1,uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 |\n                                 uVar2 << 0x18);\n  } while ((int)uVar4 == 0);" do (compound_statement "{\n    lVar3 = *(long *)(param_1 + 0x88);\n    if (*(char *)(lVar3 + 8) != '\0') {\n      return 0;\n    }\n    uVar1 = *(ushort *)\n             (*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2));\n    uVar2 = *(uint *)(*(long *)(lVar3 + 0x50) +\n                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)));\n    uVar4 = FUN_00145130(param_1,uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 |\n                                 uVar2 << 0x18);\n  }" { (expression_statement "lVar3 = *(long *)(param_1 + 0x88);" (assignment_expression "lVar3 = *(long *)(param_1 + 0x88)" identifier = (pointer_expression "*(long *)(param_1 + 0x88)" * (cast_expression "(long *)(param_1 + 0x88)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x88)" ( (binary_expression "param_1 + 0x88" identifier + number_literal) ))))) ;) (if_statement "if (*(char *)(lVar3 + 8) != '\0') {\n      return 0;\n    }" if (parenthesized_expression "(*(char *)(lVar3 + 8) != '\0')" ( (binary_expression "*(char *)(lVar3 + 8) != '\0'" (pointer_expression "*(char *)(lVar3 + 8)" * (cast_expression "(char *)(lVar3 + 8)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 8)" ( (binary_expression "lVar3 + 8" identifier + number_literal) )))) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar1 = *(ushort *)\n             (*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2));" (assignment_expression "uVar1 = *(ushort *)\n             (*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2))" identifier = (pointer_expression "*(ushort *)\n             (*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2))" * (cast_expression "(ushort *)\n             (*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2))" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2))" ( (binary_expression "*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2)" (pointer_expression "*(long *)(lVar3 + 0x60)" * (cast_expression "(long *)(lVar3 + 0x60)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x60)" ( (binary_expression "lVar3 + 0x60" identifier + number_literal) )))) + (cast_expression "(long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)((uint)*(ushort *)(param_1 + 0x56) * 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((uint)*(ushort *)(param_1 + 0x56) * 2)" ( (binary_expression "(uint)*(ushort *)(param_1 + 0x56) * 2" (binary_expression "(uint)*(ushort *)(param_1 + 0x56)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(param_1 + 0x56)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x56)" ( (binary_expression "param_1 + 0x56" identifier + number_literal) )))) * number_literal) ))))) ))))) ;) (expression_statement "uVar2 = *(uint *)(*(long *)(lVar3 + 0x50) +\n                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)));" (assignment_expression "uVar2 = *(uint *)(*(long *)(lVar3 + 0x50) +\n                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)))" identifier = (pointer_expression "*(uint *)(*(long *)(lVar3 + 0x50) +\n                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)))" * (cast_expression "(uint *)(*(long *)(lVar3 + 0x50) +\n                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)))" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(lVar3 + 0x50) +\n                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)))" ( (binary_expression "*(long *)(lVar3 + 0x50) +\n                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18))" (pointer_expression "*(long *)(lVar3 + 0x50)" * (cast_expression "(long *)(lVar3 + 0x50)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x50)" ( (binary_expression "lVar3 + 0x50" identifier + number_literal) )))) + (call_expression "(ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18))" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18))" ( (binary_expression "(uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)" (parenthesized_expression "(uVar1 << 8 | uVar1 >> 8)" ( (binary_expression "uVar1 << 8 | uVar1 >> 8" (binary_expression "uVar1 << 8" identifier << number_literal) | (binary_expression "uVar1 >> 8" identifier >> number_literal)) )) & (pointer_expression "*(ushort *)(lVar3 + 0x18)" * (cast_expression "(ushort *)(lVar3 + 0x18)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x18)" ( (binary_expression "lVar3 + 0x18" identifier + number_literal) ))))) )))) ))))) ;) (expression_statement "uVar4 = FUN_00145130(param_1,uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 |\n                                 uVar2 << 0x18);" (assignment_expression "uVar4 = FUN_00145130(param_1,uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 |\n                                 uVar2 << 0x18)" identifier = (call_expression "FUN_00145130(param_1,uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 |\n                                 uVar2 << 0x18)" identifier (argument_list "(param_1,uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 |\n                                 uVar2 << 0x18)" ( identifier , (binary_expression "uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 |\n                                 uVar2 << 0x18" (binary_expression "uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8" (binary_expression "uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8" (binary_expression "uVar2 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar2 & 0xff0000) >> 8" (parenthesized_expression "(uVar2 & 0xff0000)" ( (binary_expression "uVar2 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar2 & 0xff00) << 8" (parenthesized_expression "(uVar2 & 0xff00)" ( (binary_expression "uVar2 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar2 << 0x18" identifier << number_literal)) )))) ;) }) while (parenthesized_expression "((int)uVar4 == 0)" ( (binary_expression "(int)uVar4 == 0" (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier) == number_literal) )) ;) (return_statement "return uVar4;" return identifier ;) })))
(translation_unit "int moveToLeftmost(BtCursor *pCur)\n\n{\n  uint uVar1;\n  MemPage *pMVar2;\n  int iVar3;\n  \n  do {\n    pMVar2 = pCur->pPage;\n    if (pMVar2->leaf != '\0') {\n      return 0;\n    }\n    uVar1 = *(uint *)(pMVar2->aData +\n                     ((*(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) << 8 |\n                      *(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) >> 8) &\n                     pMVar2->maskPage));\n    iVar3 = moveToChild(pCur,uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                             uVar1 << 0x18);\n  } while (iVar3 == 0);\n  return iVar3;\n}\n\n" (function_definition "int moveToLeftmost(BtCursor *pCur)\n\n{\n  uint uVar1;\n  MemPage *pMVar2;\n  int iVar3;\n  \n  do {\n    pMVar2 = pCur->pPage;\n    if (pMVar2->leaf != '\0') {\n      return 0;\n    }\n    uVar1 = *(uint *)(pMVar2->aData +\n                     ((*(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) << 8 |\n                      *(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) >> 8) &\n                     pMVar2->maskPage));\n    iVar3 = moveToChild(pCur,uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                             uVar1 << 0x18);\n  } while (iVar3 == 0);\n  return iVar3;\n}" primitive_type (function_declarator "moveToLeftmost(BtCursor *pCur)" identifier (parameter_list "(BtCursor *pCur)" ( (parameter_declaration "BtCursor *pCur" type_identifier (pointer_declarator "*pCur" * identifier)) ))) (compound_statement "{\n  uint uVar1;\n  MemPage *pMVar2;\n  int iVar3;\n  \n  do {\n    pMVar2 = pCur->pPage;\n    if (pMVar2->leaf != '\0') {\n      return 0;\n    }\n    uVar1 = *(uint *)(pMVar2->aData +\n                     ((*(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) << 8 |\n                      *(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) >> 8) &\n                     pMVar2->maskPage));\n    iVar3 = moveToChild(pCur,uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                             uVar1 << 0x18);\n  } while (iVar3 == 0);\n  return iVar3;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "MemPage *pMVar2;" type_identifier (pointer_declarator "*pMVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (do_statement "do {\n    pMVar2 = pCur->pPage;\n    if (pMVar2->leaf != '\0') {\n      return 0;\n    }\n    uVar1 = *(uint *)(pMVar2->aData +\n                     ((*(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) << 8 |\n                      *(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) >> 8) &\n                     pMVar2->maskPage));\n    iVar3 = moveToChild(pCur,uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                             uVar1 << 0x18);\n  } while (iVar3 == 0);" do (compound_statement "{\n    pMVar2 = pCur->pPage;\n    if (pMVar2->leaf != '\0') {\n      return 0;\n    }\n    uVar1 = *(uint *)(pMVar2->aData +\n                     ((*(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) << 8 |\n                      *(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) >> 8) &\n                     pMVar2->maskPage));\n    iVar3 = moveToChild(pCur,uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                             uVar1 << 0x18);\n  }" { (expression_statement "pMVar2 = pCur->pPage;" (assignment_expression "pMVar2 = pCur->pPage" identifier = (field_expression "pCur->pPage" identifier -> field_identifier)) ;) (if_statement "if (pMVar2->leaf != '\0') {\n      return 0;\n    }" if (parenthesized_expression "(pMVar2->leaf != '\0')" ( (binary_expression "pMVar2->leaf != '\0'" (field_expression "pMVar2->leaf" identifier -> field_identifier) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar1 = *(uint *)(pMVar2->aData +\n                     ((*(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) << 8 |\n                      *(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) >> 8) &\n                     pMVar2->maskPage));" (assignment_expression "uVar1 = *(uint *)(pMVar2->aData +\n                     ((*(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) << 8 |\n                      *(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) >> 8) &\n                     pMVar2->maskPage))" identifier = (pointer_expression "*(uint *)(pMVar2->aData +\n                     ((*(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) << 8 |\n                      *(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) >> 8) &\n                     pMVar2->maskPage))" * (cast_expression "(uint *)(pMVar2->aData +\n                     ((*(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) << 8 |\n                      *(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) >> 8) &\n                     pMVar2->maskPage))" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pMVar2->aData +\n                     ((*(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) << 8 |\n                      *(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) >> 8) &\n                     pMVar2->maskPage))" ( (binary_expression "pMVar2->aData +\n                     ((*(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) << 8 |\n                      *(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) >> 8) &\n                     pMVar2->maskPage)" (field_expression "pMVar2->aData" identifier -> field_identifier) + (parenthesized_expression "((*(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) << 8 |\n                      *(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) >> 8) &\n                     pMVar2->maskPage)" ( (binary_expression "(*(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) << 8 |\n                      *(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) >> 8) &\n                     pMVar2->maskPage" (parenthesized_expression "(*(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) << 8 |\n                      *(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) >> 8)" ( (binary_expression "*(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) << 8 |\n                      *(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) >> 8" (binary_expression "*(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) << 8" (pointer_expression "*(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2))" * (cast_expression "(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2))" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2))" ( (binary_expression "pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)" (field_expression "pMVar2->aCellIdx" identifier -> field_identifier) + (cast_expression "(int)((uint)pCur->ix * 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((uint)pCur->ix * 2)" ( (binary_expression "(uint)pCur->ix * 2" (cast_expression "(uint)pCur->ix" ( (type_descriptor "uint" type_identifier) ) (field_expression "pCur->ix" identifier -> field_identifier)) * number_literal) )))) )))) << number_literal) | (binary_expression "*(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)) >> 8" (pointer_expression "*(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2))" * (cast_expression "(ushort *)(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2))" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pMVar2->aCellIdx + (int)((uint)pCur->ix * 2))" ( (binary_expression "pMVar2->aCellIdx + (int)((uint)pCur->ix * 2)" (field_expression "pMVar2->aCellIdx" identifier -> field_identifier) + (cast_expression "(int)((uint)pCur->ix * 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((uint)pCur->ix * 2)" ( (binary_expression "(uint)pCur->ix * 2" (cast_expression "(uint)pCur->ix" ( (type_descriptor "uint" type_identifier) ) (field_expression "pCur->ix" identifier -> field_identifier)) * number_literal) )))) )))) >> number_literal)) )) & (field_expression "pMVar2->maskPage" identifier -> field_identifier)) ))) ))))) ;) (expression_statement "iVar3 = moveToChild(pCur,uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                             uVar1 << 0x18);" (assignment_expression "iVar3 = moveToChild(pCur,uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                             uVar1 << 0x18)" identifier = (call_expression "moveToChild(pCur,uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                             uVar1 << 0x18)" identifier (argument_list "(pCur,uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                             uVar1 << 0x18)" ( identifier , (binary_expression "uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                             uVar1 << 0x18" (binary_expression "uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8" (binary_expression "uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8" (binary_expression "uVar1 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar1 & 0xff0000) >> 8" (parenthesized_expression "(uVar1 & 0xff0000)" ( (binary_expression "uVar1 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar1 & 0xff00) << 8" (parenthesized_expression "(uVar1 & 0xff00)" ( (binary_expression "uVar1 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar1 << 0x18" identifier << number_literal)) )))) ;) }) while (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) ;) (return_statement "return iVar3;" return identifier ;) })))
(translation_unit "undefined8 FUN_001451f0(long param_1)\n\n{\n  ushort uVar1;\n  uint uVar2;\n  long lVar3;\n  undefined8 uVar4;\n  \n  do {\n    lVar3 = *(long *)(param_1 + 0x88);\n    if (*(char *)(lVar3 + 8) != '\0') {\n      return 0;\n    }\n    uVar1 = *(ushort *)\n             (*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2));\n    uVar2 = *(uint *)(*(long *)(lVar3 + 0x50) +\n                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)));\n    uVar4 = FUN_00145130(param_1,uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 |\n                                 uVar2 << 0x18);\n  } while ((int)uVar4 == 0);\n  return uVar4;\n}\n\n" (function_definition "undefined8 FUN_001451f0(long param_1)\n\n{\n  ushort uVar1;\n  uint uVar2;\n  long lVar3;\n  undefined8 uVar4;\n  \n  do {\n    lVar3 = *(long *)(param_1 + 0x88);\n    if (*(char *)(lVar3 + 8) != '\0') {\n      return 0;\n    }\n    uVar1 = *(ushort *)\n             (*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2));\n    uVar2 = *(uint *)(*(long *)(lVar3 + 0x50) +\n                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)));\n    uVar4 = FUN_00145130(param_1,uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 |\n                                 uVar2 << 0x18);\n  } while ((int)uVar4 == 0);\n  return uVar4;\n}" type_identifier (function_declarator "FUN_001451f0(long param_1)" identifier (parameter_list "(long param_1)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  ushort uVar1;\n  uint uVar2;\n  long lVar3;\n  undefined8 uVar4;\n  \n  do {\n    lVar3 = *(long *)(param_1 + 0x88);\n    if (*(char *)(lVar3 + 8) != '\0') {\n      return 0;\n    }\n    uVar1 = *(ushort *)\n             (*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2));\n    uVar2 = *(uint *)(*(long *)(lVar3 + 0x50) +\n                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)));\n    uVar4 = FUN_00145130(param_1,uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 |\n                                 uVar2 << 0x18);\n  } while ((int)uVar4 == 0);\n  return uVar4;\n}" { (declaration "ushort uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 uVar4;" type_identifier identifier ;) (do_statement "do {\n    lVar3 = *(long *)(param_1 + 0x88);\n    if (*(char *)(lVar3 + 8) != '\0') {\n      return 0;\n    }\n    uVar1 = *(ushort *)\n             (*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2));\n    uVar2 = *(uint *)(*(long *)(lVar3 + 0x50) +\n                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)));\n    uVar4 = FUN_00145130(param_1,uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 |\n                                 uVar2 << 0x18);\n  } while ((int)uVar4 == 0);" do (compound_statement "{\n    lVar3 = *(long *)(param_1 + 0x88);\n    if (*(char *)(lVar3 + 8) != '\0') {\n      return 0;\n    }\n    uVar1 = *(ushort *)\n             (*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2));\n    uVar2 = *(uint *)(*(long *)(lVar3 + 0x50) +\n                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)));\n    uVar4 = FUN_00145130(param_1,uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 |\n                                 uVar2 << 0x18);\n  }" { (expression_statement "lVar3 = *(long *)(param_1 + 0x88);" (assignment_expression "lVar3 = *(long *)(param_1 + 0x88)" identifier = (pointer_expression "*(long *)(param_1 + 0x88)" * (cast_expression "(long *)(param_1 + 0x88)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x88)" ( (binary_expression "param_1 + 0x88" identifier + number_literal) ))))) ;) (if_statement "if (*(char *)(lVar3 + 8) != '\0') {\n      return 0;\n    }" if (parenthesized_expression "(*(char *)(lVar3 + 8) != '\0')" ( (binary_expression "*(char *)(lVar3 + 8) != '\0'" (pointer_expression "*(char *)(lVar3 + 8)" * (cast_expression "(char *)(lVar3 + 8)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 8)" ( (binary_expression "lVar3 + 8" identifier + number_literal) )))) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar1 = *(ushort *)\n             (*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2));" (assignment_expression "uVar1 = *(ushort *)\n             (*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2))" identifier = (pointer_expression "*(ushort *)\n             (*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2))" * (cast_expression "(ushort *)\n             (*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2))" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2))" ( (binary_expression "*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2)" (pointer_expression "*(long *)(lVar3 + 0x60)" * (cast_expression "(long *)(lVar3 + 0x60)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x60)" ( (binary_expression "lVar3 + 0x60" identifier + number_literal) )))) + (cast_expression "(long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)((uint)*(ushort *)(param_1 + 0x56) * 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((uint)*(ushort *)(param_1 + 0x56) * 2)" ( (binary_expression "(uint)*(ushort *)(param_1 + 0x56) * 2" (binary_expression "(uint)*(ushort *)(param_1 + 0x56)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(param_1 + 0x56)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x56)" ( (binary_expression "param_1 + 0x56" identifier + number_literal) )))) * number_literal) ))))) ))))) ;) (expression_statement "uVar2 = *(uint *)(*(long *)(lVar3 + 0x50) +\n                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)));" (assignment_expression "uVar2 = *(uint *)(*(long *)(lVar3 + 0x50) +\n                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)))" identifier = (pointer_expression "*(uint *)(*(long *)(lVar3 + 0x50) +\n                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)))" * (cast_expression "(uint *)(*(long *)(lVar3 + 0x50) +\n                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)))" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(lVar3 + 0x50) +\n                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)))" ( (binary_expression "*(long *)(lVar3 + 0x50) +\n                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18))" (pointer_expression "*(long *)(lVar3 + 0x50)" * (cast_expression "(long *)(lVar3 + 0x50)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x50)" ( (binary_expression "lVar3 + 0x50" identifier + number_literal) )))) + (call_expression "(ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18))" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18))" ( (binary_expression "(uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)" (parenthesized_expression "(uVar1 << 8 | uVar1 >> 8)" ( (binary_expression "uVar1 << 8 | uVar1 >> 8" (binary_expression "uVar1 << 8" identifier << number_literal) | (binary_expression "uVar1 >> 8" identifier >> number_literal)) )) & (pointer_expression "*(ushort *)(lVar3 + 0x18)" * (cast_expression "(ushort *)(lVar3 + 0x18)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x18)" ( (binary_expression "lVar3 + 0x18" identifier + number_literal) ))))) )))) ))))) ;) (expression_statement "uVar4 = FUN_00145130(param_1,uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 |\n                                 uVar2 << 0x18);" (assignment_expression "uVar4 = FUN_00145130(param_1,uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 |\n                                 uVar2 << 0x18)" identifier = (call_expression "FUN_00145130(param_1,uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 |\n                                 uVar2 << 0x18)" identifier (argument_list "(param_1,uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 |\n                                 uVar2 << 0x18)" ( identifier , (binary_expression "uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 |\n                                 uVar2 << 0x18" (binary_expression "uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8" (binary_expression "uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8" (binary_expression "uVar2 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar2 & 0xff0000) >> 8" (parenthesized_expression "(uVar2 & 0xff0000)" ( (binary_expression "uVar2 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar2 & 0xff00) << 8" (parenthesized_expression "(uVar2 & 0xff00)" ( (binary_expression "uVar2 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar2 << 0x18" identifier << number_literal)) )))) ;) }) while (parenthesized_expression "((int)uVar4 == 0)" ( (binary_expression "(int)uVar4 == 0" (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier) == number_literal) )) ;) (return_statement "return uVar4;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != (char_literal ' escape_sequence ')) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) * LIT) ))))) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT << LIT) | (binary_expression IDENT >> LIT)) )) & (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )))) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT << LIT)) )))) ;) }) while (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) == LIT) )) ;) (return_statement return IDENT ;) })))
(function_definition "undefined8 FUN_001451f0(long param_1)\n\n{\n  ushort uVar1;\n  uint uVar2;\n  long lVar3;\n  undefined8 uVar4;\n  \n  do {\n    lVar3 = *(long *)(param_1 + 0x88);\n    if (*(char *)(lVar3 + 8) != '\0') {\n      return 0;\n    }\n    uVar1 = *(ushort *)\n             (*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2));\n    uVar2 = *(uint *)(*(long *)(lVar3 + 0x50) +\n                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)));\n    uVar4 = FUN_00145130(param_1,uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 |\n                                 uVar2 << 0x18);\n  } while ((int)uVar4 == 0);\n  return uVar4;\n}" (type_identifier "undefined8") (function_declarator "FUN_001451f0(long param_1)" (identifier "FUN_001451f0") (parameter_list "(long param_1)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) () ")"))) (compound_statement "{\n  ushort uVar1;\n  uint uVar2;\n  long lVar3;\n  undefined8 uVar4;\n  \n  do {\n    lVar3 = *(long *)(param_1 + 0x88);\n    if (*(char *)(lVar3 + 8) != '\0') {\n      return 0;\n    }\n    uVar1 = *(ushort *)\n             (*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2));\n    uVar2 = *(uint *)(*(long *)(lVar3 + 0x50) +\n                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)));\n    uVar4 = FUN_00145130(param_1,uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 |\n                                 uVar2 << 0x18);\n  } while ((int)uVar4 == 0);\n  return uVar4;\n}" ({ "{") (declaration "ushort uVar1;" (type_identifier "ushort") (identifier "uVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (declaration "undefined8 uVar4;" (type_identifier "undefined8") (identifier "uVar4") (; ";")) (do_statement "do {\n    lVar3 = *(long *)(param_1 + 0x88);\n    if (*(char *)(lVar3 + 8) != '\0') {\n      return 0;\n    }\n    uVar1 = *(ushort *)\n             (*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2));\n    uVar2 = *(uint *)(*(long *)(lVar3 + 0x50) +\n                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)));\n    uVar4 = FUN_00145130(param_1,uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 |\n                                 uVar2 << 0x18);\n  } while ((int)uVar4 == 0);" (do "do") (compound_statement "{\n    lVar3 = *(long *)(param_1 + 0x88);\n    if (*(char *)(lVar3 + 8) != '\0') {\n      return 0;\n    }\n    uVar1 = *(ushort *)\n             (*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2));\n    uVar2 = *(uint *)(*(long *)(lVar3 + 0x50) +\n                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)));\n    uVar4 = FUN_00145130(param_1,uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 |\n                                 uVar2 << 0x18);\n  }" ({ "{") (expression_statement "lVar3 = *(long *)(param_1 + 0x88);" (assignment_expression "lVar3 = *(long *)(param_1 + 0x88)" (identifier "lVar3") (= "=") (pointer_expression "*(long *)(param_1 + 0x88)" (* "*") (cast_expression "(long *)(param_1 + 0x88)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x88)" (( "(") (binary_expression "param_1 + 0x88" (identifier "param_1") (+ "+") (number_literal "0x88")) () ")"))))) (; ";")) (if_statement "if (*(char *)(lVar3 + 8) != '\0') {\n      return 0;\n    }" (if "if") (parenthesized_expression "(*(char *)(lVar3 + 8) != '\0')" (( "(") (binary_expression "*(char *)(lVar3 + 8) != '\0'" (pointer_expression "*(char *)(lVar3 + 8)" (* "*") (cast_expression "(char *)(lVar3 + 8)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + 8)" (( "(") (binary_expression "lVar3 + 8" (identifier "lVar3") (+ "+") (number_literal "8")) () ")")))) (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n      return 0;\n    }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "uVar1 = *(ushort *)\n             (*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2));" (assignment_expression "uVar1 = *(ushort *)\n             (*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2))" (identifier "uVar1") (= "=") (pointer_expression "*(ushort *)\n             (*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2))" (* "*") (cast_expression "(ushort *)\n             (*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2))" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2))" (( "(") (binary_expression "*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2)" (pointer_expression "*(long *)(lVar3 + 0x60)" (* "*") (cast_expression "(long *)(lVar3 + 0x60)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + 0x60)" (( "(") (binary_expression "lVar3 + 0x60" (identifier "lVar3") (+ "+") (number_literal "0x60")) () ")")))) (+ "+") (cast_expression "(long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (cast_expression "(int)((uint)*(ushort *)(param_1 + 0x56) * 2)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((uint)*(ushort *)(param_1 + 0x56) * 2)" (( "(") (binary_expression "(uint)*(ushort *)(param_1 + 0x56) * 2" (binary_expression "(uint)*(ushort *)(param_1 + 0x56)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (cast_expression "(ushort *)(param_1 + 0x56)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x56)" (( "(") (binary_expression "param_1 + 0x56" (identifier "param_1") (+ "+") (number_literal "0x56")) () ")")))) (* "*") (number_literal "2")) () ")"))))) () ")"))))) (; ";")) (expression_statement "uVar2 = *(uint *)(*(long *)(lVar3 + 0x50) +\n                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)));" (assignment_expression "uVar2 = *(uint *)(*(long *)(lVar3 + 0x50) +\n                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)))" (identifier "uVar2") (= "=") (pointer_expression "*(uint *)(*(long *)(lVar3 + 0x50) +\n                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)))" (* "*") (cast_expression "(uint *)(*(long *)(lVar3 + 0x50) +\n                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)))" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(lVar3 + 0x50) +\n                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)))" (( "(") (binary_expression "*(long *)(lVar3 + 0x50) +\n                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18))" (pointer_expression "*(long *)(lVar3 + 0x50)" (* "*") (cast_expression "(long *)(lVar3 + 0x50)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + 0x50)" (( "(") (binary_expression "lVar3 + 0x50" (identifier "lVar3") (+ "+") (number_literal "0x50")) () ")")))) (+ "+") (call_expression "(ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18))" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18))" (( "(") (binary_expression "(uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)" (parenthesized_expression "(uVar1 << 8 | uVar1 >> 8)" (( "(") (binary_expression "uVar1 << 8 | uVar1 >> 8" (binary_expression "uVar1 << 8" (identifier "uVar1") (<< "<<") (number_literal "8")) (| "|") (binary_expression "uVar1 >> 8" (identifier "uVar1") (>> ">>") (number_literal "8"))) () ")")) (& "&") (pointer_expression "*(ushort *)(lVar3 + 0x18)" (* "*") (cast_expression "(ushort *)(lVar3 + 0x18)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + 0x18)" (( "(") (binary_expression "lVar3 + 0x18" (identifier "lVar3") (+ "+") (number_literal "0x18")) () ")"))))) () ")")))) () ")"))))) (; ";")) (expression_statement "uVar4 = FUN_00145130(param_1,uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 |\n                                 uVar2 << 0x18);" (assignment_expression "uVar4 = FUN_00145130(param_1,uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 |\n                                 uVar2 << 0x18)" (identifier "uVar4") (= "=") (call_expression "FUN_00145130(param_1,uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 |\n                                 uVar2 << 0x18)" (identifier "FUN_00145130") (argument_list "(param_1,uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 |\n                                 uVar2 << 0x18)" (( "(") (identifier "param_1") (, ",") (binary_expression "uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 |\n                                 uVar2 << 0x18" (binary_expression "uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8" (binary_expression "uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8" (binary_expression "uVar2 >> 0x18" (identifier "uVar2") (>> ">>") (number_literal "0x18")) (| "|") (binary_expression "(uVar2 & 0xff0000) >> 8" (parenthesized_expression "(uVar2 & 0xff0000)" (( "(") (binary_expression "uVar2 & 0xff0000" (identifier "uVar2") (& "&") (number_literal "0xff0000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar2 & 0xff00) << 8" (parenthesized_expression "(uVar2 & 0xff00)" (( "(") (binary_expression "uVar2 & 0xff00" (identifier "uVar2") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "uVar2 << 0x18" (identifier "uVar2") (<< "<<") (number_literal "0x18"))) () ")")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "((int)uVar4 == 0)" (( "(") (binary_expression "(int)uVar4 == 0" (cast_expression "(int)uVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar4")) (== "==") (number_literal "0")) () ")")) (; ";")) (return_statement "return uVar4;" (return "return") (identifier "uVar4") (; ";")) (} "}")))

int function_1(type_1 *pCur)

{
  type_2 var_2;
  type_3 *pMVar2;
  int var_3;
  
  do {
    pMVar2 = pCur->pPage;
    if (pMVar2->leaf != '\0') {
      return 0;
    }
    var_2 = *(type_2 *)(pMVar2->aData +
                     ((*(type_4 *)(pMVar2->aCellIdx + (int)((type_2)pCur->ix * 2)) << 8 |
                      *(type_4 *)(pMVar2->aCellIdx + (int)((type_2)pCur->ix * 2)) >> 8) &
                     pMVar2->maskPage));
    var_3 = var_1(pCur,var_2 >> 0x18 | (var_2 & 0xff0000) >> 8 | (var_2 & 0xff00) << 8 |
                             var_2 << 0x18);
  } while (var_3 == 0);
  return var_3;
}


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

undefined8 MASKED(long param_1)

{
  ushort uVar1;
  uint uVar2;
  long lVar3;
  undefined8 uVar4;
  
  do {
    lVar3 = *(long *)(param_1 + 0x88);
    if (*(char *)(lVar3 + 8) != '\0') {
      return 0;
    }
    uVar1 = *(ushort *)
             (*(long *)(lVar3 + 0x60) + (long)(int)((uint)*(ushort *)(param_1 + 0x56) * 2));
    uVar2 = *(uint *)(*(long *)(lVar3 + 0x50) +
                     (ulong)((uVar1 << 8 | uVar1 >> 8) & *(ushort *)(lVar3 + 0x18)));
    uVar4 = FUN_00145130(param_1,uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 |
                                 uVar2 << 0x18);
  } while ((int)uVar4 == 0);
  return uVar4;
}

