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

int memdbRead(sqlite3_file *pFile,void *zBuf,int iAmt,sqlite_int64 iOfst)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  int local_20;
  
  iVar3 = (iAmt >> 0x1f) + iOfst._4_4_ + (uint)CARRY4(iAmt,(uint)(sqlite3_io_methods *)iOfst);
  uVar1 = (uint)(pFile[1].pMethods <
                (sqlite3_io_methods *)((int)&((sqlite3_io_methods *)iOfst)->iVersion + iAmt));
  iVar2 = (int)pFile[2].pMethods - iVar3;
  if ((SBORROW4((int)pFile[2].pMethods,iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0)
  {
    memcpy(zBuf,(void *)((int)&(pFile[7].pMethods)->iVersion +
                        (int)&((sqlite3_io_methods *)iOfst)->iVersion),iAmt);
    local_20 = 0;
  }
  else {
    memset(zBuf,0,iAmt);
    local_20 = 0x20a;
    uVar1 = (uint)((sqlite3_io_methods *)iOfst < pFile[1].pMethods);
    iVar2 = iOfst._4_4_ - (int)pFile[2].pMethods;
    if ((SBORROW4(iOfst._4_4_,(int)pFile[2].pMethods) != SBORROW4(iVar2,uVar1)) !=
        (int)(iVar2 - uVar1) < 0) {
      local_20 = 0x20a;
      memcpy(zBuf,(void *)((int)&(pFile[7].pMethods)->iVersion +
                          (int)&((sqlite3_io_methods *)iOfst)->iVersion),
             (int)pFile[1].pMethods - (int)(sqlite3_io_methods *)iOfst);
    }
  }
  return local_20;
}



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

undefined4 FUN_00045140(int param_1,void *param_2,uint param_3,uint param_4,int param_5)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  undefined4 local_20;
  
  iVar3 = ((int)param_3 >> 0x1f) + param_5 + (uint)CARRY4(param_3,param_4);
  uVar1 = (uint)(*(uint *)(param_1 + 4) < param_3 + param_4);
  iVar2 = *(int *)(param_1 + 8) - iVar3;
  if ((SBORROW4(*(int *)(param_1 + 8),iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0)
  {
    memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),param_3);
    local_20 = 0;
  }
  else {
    memset(param_2,0,param_3);
    local_20 = 0x20a;
    uVar1 = (uint)(param_4 < *(uint *)(param_1 + 4));
    iVar2 = param_5 - *(int *)(param_1 + 8);
    if ((SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1)) !=
        (int)(iVar2 - uVar1) < 0) {
      local_20 = 0x20a;
      memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4);
    }
  }
  return local_20;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x000172e0
ADD EBX,0x175cdf
SUB ESP,0x1c
MOV ESI,dword ptr [ESP + 0x30]
MOV EAX,dword ptr [ESP + 0x38]
MOV EDI,dword ptr [ESP + 0x3c]
MOV EBP,dword ptr [ESP + 0x40]
CDQ
MOV ECX,dword ptr [ESI + 0x8]
ADD EAX,EDI
ADC EDX,EBP
CMP dword ptr [ESI + 0x4],EAX
SBB ECX,EDX
JL 0x00045198
SUB ESP,0x4
ADD EDI,dword ptr [ESI + 0x1c]
PUSH dword ptr [ESP + 0x3c]
PUSH EDI
PUSH dword ptr [ESP + 0x40]
CALL 0x00015130
ADD ESP,0x10
XOR EDX,EDX
ADD ESP,0x1c
MOV EAX,EDX
POP EBX
POP ESI
POP EDI
POP EBP
RET
SUB ESP,0x4
PUSH dword ptr [ESP + 0x3c]
PUSH 0x0
PUSH dword ptr [ESP + 0x40]
CALL 0x00015440
MOV EAX,dword ptr [ESI + 0x4]
ADD ESP,0x10
MOV ECX,EBP
MOV EDX,0x20a
CMP EDI,EAX
SBB ECX,dword ptr [ESI + 0x8]
JGE 0x0004518a
MOV dword ptr [ESP + 0xc],EDX
SUB EAX,EDI
SUB ESP,0x4
ADD EDI,dword ptr [ESI + 0x1c]
PUSH EAX
PUSH EDI
PUSH dword ptr [ESP + 0x40]
CALL 0x00015130
ADD ESP,0x10
MOV EDX,dword ptr [ESP + 0xc]
JMP 0x0004518a
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nundefined4 FUN_00045140(int param_1,void *param_2,uint param_3,uint param_4,int param_5)\n\n{\n  uint uVar1;\n  int iVar2;\n  int iVar3;\n  undefined4 local_20;\n  \n  iVar3 = ((int)param_3 >> 0x1f) + param_5 + (uint)CARRY4(param_3,param_4);\n  uVar1 = (uint)(*(uint *)(param_1 + 4) < param_3 + param_4);\n  iVar2 = *(int *)(param_1 + 8) - iVar3;\n  if ((SBORROW4(*(int *)(param_1 + 8),iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0)\n  {\n    memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),param_3);\n    local_20 = 0;\n  }\n  else {\n    memset(param_2,0,param_3);\n    local_20 = 0x20a;\n    uVar1 = (uint)(param_4 < *(uint *)(param_1 + 4));\n    iVar2 = param_5 - *(int *)(param_1 + 8);\n    if ((SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0) {\n      local_20 = 0x20a;\n      memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4);\n    }\n  }\n  return local_20;\n}\n\n" comment (function_definition "undefined4 FUN_00045140(int param_1,void *param_2,uint param_3,uint param_4,int param_5)\n\n{\n  uint uVar1;\n  int iVar2;\n  int iVar3;\n  undefined4 local_20;\n  \n  iVar3 = ((int)param_3 >> 0x1f) + param_5 + (uint)CARRY4(param_3,param_4);\n  uVar1 = (uint)(*(uint *)(param_1 + 4) < param_3 + param_4);\n  iVar2 = *(int *)(param_1 + 8) - iVar3;\n  if ((SBORROW4(*(int *)(param_1 + 8),iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0)\n  {\n    memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),param_3);\n    local_20 = 0;\n  }\n  else {\n    memset(param_2,0,param_3);\n    local_20 = 0x20a;\n    uVar1 = (uint)(param_4 < *(uint *)(param_1 + 4));\n    iVar2 = param_5 - *(int *)(param_1 + 8);\n    if ((SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0) {\n      local_20 = 0x20a;\n      memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4);\n    }\n  }\n  return local_20;\n}" type_identifier (function_declarator "FUN_00045140(int param_1,void *param_2,uint param_3,uint param_4,int param_5)" identifier (parameter_list "(int param_1,void *param_2,uint param_3,uint param_4,int param_5)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "void *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint param_3" type_identifier identifier) , (parameter_declaration "uint param_4" type_identifier identifier) , (parameter_declaration "int param_5" primitive_type identifier) ))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  int iVar3;\n  undefined4 local_20;\n  \n  iVar3 = ((int)param_3 >> 0x1f) + param_5 + (uint)CARRY4(param_3,param_4);\n  uVar1 = (uint)(*(uint *)(param_1 + 4) < param_3 + param_4);\n  iVar2 = *(int *)(param_1 + 8) - iVar3;\n  if ((SBORROW4(*(int *)(param_1 + 8),iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0)\n  {\n    memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),param_3);\n    local_20 = 0;\n  }\n  else {\n    memset(param_2,0,param_3);\n    local_20 = 0x20a;\n    uVar1 = (uint)(param_4 < *(uint *)(param_1 + 4));\n    iVar2 = param_5 - *(int *)(param_1 + 8);\n    if ((SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0) {\n      local_20 = 0x20a;\n      memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4);\n    }\n  }\n  return local_20;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "undefined4 local_20;" type_identifier identifier ;) (expression_statement "iVar3 = ((int)param_3 >> 0x1f) + param_5 + (uint)CARRY4(param_3,param_4);" (assignment_expression "iVar3 = ((int)param_3 >> 0x1f) + param_5 + (uint)CARRY4(param_3,param_4)" identifier = (binary_expression "((int)param_3 >> 0x1f) + param_5 + (uint)CARRY4(param_3,param_4)" (binary_expression "((int)param_3 >> 0x1f) + param_5" (parenthesized_expression "((int)param_3 >> 0x1f)" ( (binary_expression "(int)param_3 >> 0x1f" (cast_expression "(int)param_3" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )) + identifier) + (cast_expression "(uint)CARRY4(param_3,param_4)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(param_3,param_4)" identifier (argument_list "(param_3,param_4)" ( identifier , identifier )))))) ;) (expression_statement "uVar1 = (uint)(*(uint *)(param_1 + 4) < param_3 + param_4);" (assignment_expression "uVar1 = (uint)(*(uint *)(param_1 + 4) < param_3 + param_4)" identifier = (call_expression "(uint)(*(uint *)(param_1 + 4) < param_3 + param_4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(uint *)(param_1 + 4) < param_3 + param_4)" ( (binary_expression "*(uint *)(param_1 + 4) < param_3 + param_4" (pointer_expression "*(uint *)(param_1 + 4)" * (cast_expression "(uint *)(param_1 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) )))) < (binary_expression "param_3 + param_4" identifier + identifier)) )))) ;) (expression_statement "iVar2 = *(int *)(param_1 + 8) - iVar3;" (assignment_expression "iVar2 = *(int *)(param_1 + 8) - iVar3" identifier = (binary_expression "*(int *)(param_1 + 8) - iVar3" (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) - identifier)) ;) (if_statement "if ((SBORROW4(*(int *)(param_1 + 8),iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0)\n  {\n    memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),param_3);\n    local_20 = 0;\n  }\n  else {\n    memset(param_2,0,param_3);\n    local_20 = 0x20a;\n    uVar1 = (uint)(param_4 < *(uint *)(param_1 + 4));\n    iVar2 = param_5 - *(int *)(param_1 + 8);\n    if ((SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0) {\n      local_20 = 0x20a;\n      memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4);\n    }\n  }" if (parenthesized_expression "((SBORROW4(*(int *)(param_1 + 8),iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0)" ( (binary_expression "(SBORROW4(*(int *)(param_1 + 8),iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0" (parenthesized_expression "(SBORROW4(*(int *)(param_1 + 8),iVar3) != SBORROW4(iVar2,uVar1))" ( (binary_expression "SBORROW4(*(int *)(param_1 + 8),iVar3) != SBORROW4(iVar2,uVar1)" (call_expression "SBORROW4(*(int *)(param_1 + 8),iVar3)" identifier (argument_list "(*(int *)(param_1 + 8),iVar3)" ( (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) , identifier ))) != (call_expression "SBORROW4(iVar2,uVar1)" identifier (argument_list "(iVar2,uVar1)" ( identifier , identifier )))) )) == (binary_expression "(int)(iVar2 - uVar1) < 0" (cast_expression "(int)(iVar2 - uVar1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(iVar2 - uVar1)" ( (binary_expression "iVar2 - uVar1" identifier - identifier) ))) < number_literal)) )) (compound_statement "{\n    memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),param_3);\n    local_20 = 0;\n  }" { (expression_statement "memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),param_3);" (call_expression "memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),param_3)" identifier (argument_list "(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),param_3)" ( identifier , (cast_expression "(void *)(param_4 + *(int *)(param_1 + 0x1c))" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + *(int *)(param_1 + 0x1c))" ( (binary_expression "param_4 + *(int *)(param_1 + 0x1c)" identifier + (pointer_expression "*(int *)(param_1 + 0x1c)" * (cast_expression "(int *)(param_1 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1c)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) ))))) ))) , identifier ))) ;) (expression_statement "local_20 = 0;" (assignment_expression "local_20 = 0" identifier = number_literal) ;) }) (else_clause "else {\n    memset(param_2,0,param_3);\n    local_20 = 0x20a;\n    uVar1 = (uint)(param_4 < *(uint *)(param_1 + 4));\n    iVar2 = param_5 - *(int *)(param_1 + 8);\n    if ((SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0) {\n      local_20 = 0x20a;\n      memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4);\n    }\n  }" else (compound_statement "{\n    memset(param_2,0,param_3);\n    local_20 = 0x20a;\n    uVar1 = (uint)(param_4 < *(uint *)(param_1 + 4));\n    iVar2 = param_5 - *(int *)(param_1 + 8);\n    if ((SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0) {\n      local_20 = 0x20a;\n      memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4);\n    }\n  }" { (expression_statement "memset(param_2,0,param_3);" (call_expression "memset(param_2,0,param_3)" identifier (argument_list "(param_2,0,param_3)" ( identifier , number_literal , identifier ))) ;) (expression_statement "local_20 = 0x20a;" (assignment_expression "local_20 = 0x20a" identifier = number_literal) ;) (expression_statement "uVar1 = (uint)(param_4 < *(uint *)(param_1 + 4));" (assignment_expression "uVar1 = (uint)(param_4 < *(uint *)(param_1 + 4))" identifier = (call_expression "(uint)(param_4 < *(uint *)(param_1 + 4))" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_4 < *(uint *)(param_1 + 4))" ( (binary_expression "param_4 < *(uint *)(param_1 + 4)" identifier < (pointer_expression "*(uint *)(param_1 + 4)" * (cast_expression "(uint *)(param_1 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) ))))) )))) ;) (expression_statement "iVar2 = param_5 - *(int *)(param_1 + 8);" (assignment_expression "iVar2 = param_5 - *(int *)(param_1 + 8)" identifier = (binary_expression "param_5 - *(int *)(param_1 + 8)" identifier - (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))))) ;) (if_statement "if ((SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0) {\n      local_20 = 0x20a;\n      memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4);\n    }" if (parenthesized_expression "((SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0)" ( (binary_expression "(SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0" (parenthesized_expression "(SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1))" ( (binary_expression "SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1)" (call_expression "SBORROW4(param_5,*(int *)(param_1 + 8))" identifier (argument_list "(param_5,*(int *)(param_1 + 8))" ( identifier , (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) ))) != (call_expression "SBORROW4(iVar2,uVar1)" identifier (argument_list "(iVar2,uVar1)" ( identifier , identifier )))) )) != (binary_expression "(int)(iVar2 - uVar1) < 0" (cast_expression "(int)(iVar2 - uVar1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(iVar2 - uVar1)" ( (binary_expression "iVar2 - uVar1" identifier - identifier) ))) < number_literal)) )) (compound_statement "{\n      local_20 = 0x20a;\n      memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4);\n    }" { (expression_statement "local_20 = 0x20a;" (assignment_expression "local_20 = 0x20a" identifier = number_literal) ;) (expression_statement "memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4);" (call_expression "memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4)" identifier (argument_list "(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4)" ( identifier , (cast_expression "(void *)(param_4 + *(int *)(param_1 + 0x1c))" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + *(int *)(param_1 + 0x1c))" ( (binary_expression "param_4 + *(int *)(param_1 + 0x1c)" identifier + (pointer_expression "*(int *)(param_1 + 0x1c)" * (cast_expression "(int *)(param_1 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1c)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) ))))) ))) , (binary_expression "*(uint *)(param_1 + 4) - param_4" (pointer_expression "*(uint *)(param_1 + 4)" * (cast_expression "(uint *)(param_1 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) )))) - identifier) ))) ;) })) }))) (return_statement "return local_20;" return identifier ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n/* WARNING: Unknown calling convention */\n\nint memdbRead(sqlite3_file *pFile,void *zBuf,int iAmt,sqlite_int64 iOfst)\n\n{\n  uint uVar1;\n  int iVar2;\n  int iVar3;\n  int local_20;\n  \n  iVar3 = (iAmt >> 0x1f) + iOfst._4_4_ + (uint)CARRY4(iAmt,(uint)(sqlite3_io_methods *)iOfst);\n  uVar1 = (uint)(pFile[1].pMethods <\n                (sqlite3_io_methods *)((int)&((sqlite3_io_methods *)iOfst)->iVersion + iAmt));\n  iVar2 = (int)pFile[2].pMethods - iVar3;\n  if ((SBORROW4((int)pFile[2].pMethods,iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0)\n  {\n    memcpy(zBuf,(void *)((int)&(pFile[7].pMethods)->iVersion +\n                        (int)&((sqlite3_io_methods *)iOfst)->iVersion),iAmt);\n    local_20 = 0;\n  }\n  else {\n    memset(zBuf,0,iAmt);\n    local_20 = 0x20a;\n    uVar1 = (uint)((sqlite3_io_methods *)iOfst < pFile[1].pMethods);\n    iVar2 = iOfst._4_4_ - (int)pFile[2].pMethods;\n    if ((SBORROW4(iOfst._4_4_,(int)pFile[2].pMethods) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0) {\n      local_20 = 0x20a;\n      memcpy(zBuf,(void *)((int)&(pFile[7].pMethods)->iVersion +\n                          (int)&((sqlite3_io_methods *)iOfst)->iVersion),\n             (int)pFile[1].pMethods - (int)(sqlite3_io_methods *)iOfst);\n    }\n  }\n  return local_20;\n}\n\n" comment comment (function_definition "int memdbRead(sqlite3_file *pFile,void *zBuf,int iAmt,sqlite_int64 iOfst)\n\n{\n  uint uVar1;\n  int iVar2;\n  int iVar3;\n  int local_20;\n  \n  iVar3 = (iAmt >> 0x1f) + iOfst._4_4_ + (uint)CARRY4(iAmt,(uint)(sqlite3_io_methods *)iOfst);\n  uVar1 = (uint)(pFile[1].pMethods <\n                (sqlite3_io_methods *)((int)&((sqlite3_io_methods *)iOfst)->iVersion + iAmt));\n  iVar2 = (int)pFile[2].pMethods - iVar3;\n  if ((SBORROW4((int)pFile[2].pMethods,iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0)\n  {\n    memcpy(zBuf,(void *)((int)&(pFile[7].pMethods)->iVersion +\n                        (int)&((sqlite3_io_methods *)iOfst)->iVersion),iAmt);\n    local_20 = 0;\n  }\n  else {\n    memset(zBuf,0,iAmt);\n    local_20 = 0x20a;\n    uVar1 = (uint)((sqlite3_io_methods *)iOfst < pFile[1].pMethods);\n    iVar2 = iOfst._4_4_ - (int)pFile[2].pMethods;\n    if ((SBORROW4(iOfst._4_4_,(int)pFile[2].pMethods) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0) {\n      local_20 = 0x20a;\n      memcpy(zBuf,(void *)((int)&(pFile[7].pMethods)->iVersion +\n                          (int)&((sqlite3_io_methods *)iOfst)->iVersion),\n             (int)pFile[1].pMethods - (int)(sqlite3_io_methods *)iOfst);\n    }\n  }\n  return local_20;\n}" primitive_type (function_declarator "memdbRead(sqlite3_file *pFile,void *zBuf,int iAmt,sqlite_int64 iOfst)" identifier (parameter_list "(sqlite3_file *pFile,void *zBuf,int iAmt,sqlite_int64 iOfst)" ( (parameter_declaration "sqlite3_file *pFile" type_identifier (pointer_declarator "*pFile" * identifier)) , (parameter_declaration "void *zBuf" primitive_type (pointer_declarator "*zBuf" * identifier)) , (parameter_declaration "int iAmt" primitive_type identifier) , (parameter_declaration "sqlite_int64 iOfst" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  int iVar3;\n  int local_20;\n  \n  iVar3 = (iAmt >> 0x1f) + iOfst._4_4_ + (uint)CARRY4(iAmt,(uint)(sqlite3_io_methods *)iOfst);\n  uVar1 = (uint)(pFile[1].pMethods <\n                (sqlite3_io_methods *)((int)&((sqlite3_io_methods *)iOfst)->iVersion + iAmt));\n  iVar2 = (int)pFile[2].pMethods - iVar3;\n  if ((SBORROW4((int)pFile[2].pMethods,iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0)\n  {\n    memcpy(zBuf,(void *)((int)&(pFile[7].pMethods)->iVersion +\n                        (int)&((sqlite3_io_methods *)iOfst)->iVersion),iAmt);\n    local_20 = 0;\n  }\n  else {\n    memset(zBuf,0,iAmt);\n    local_20 = 0x20a;\n    uVar1 = (uint)((sqlite3_io_methods *)iOfst < pFile[1].pMethods);\n    iVar2 = iOfst._4_4_ - (int)pFile[2].pMethods;\n    if ((SBORROW4(iOfst._4_4_,(int)pFile[2].pMethods) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0) {\n      local_20 = 0x20a;\n      memcpy(zBuf,(void *)((int)&(pFile[7].pMethods)->iVersion +\n                          (int)&((sqlite3_io_methods *)iOfst)->iVersion),\n             (int)pFile[1].pMethods - (int)(sqlite3_io_methods *)iOfst);\n    }\n  }\n  return local_20;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int local_20;" primitive_type identifier ;) (expression_statement "iVar3 = (iAmt >> 0x1f) + iOfst._4_4_ + (uint)CARRY4(iAmt,(uint)(sqlite3_io_methods *)iOfst);" (assignment_expression "iVar3 = (iAmt >> 0x1f) + iOfst._4_4_ + (uint)CARRY4(iAmt,(uint)(sqlite3_io_methods *)iOfst)" identifier = (binary_expression "(iAmt >> 0x1f) + iOfst._4_4_ + (uint)CARRY4(iAmt,(uint)(sqlite3_io_methods *)iOfst)" (binary_expression "(iAmt >> 0x1f) + iOfst._4_4_" (parenthesized_expression "(iAmt >> 0x1f)" ( (binary_expression "iAmt >> 0x1f" identifier >> number_literal) )) + (field_expression "iOfst._4_4_" identifier . field_identifier)) + (cast_expression "(uint)CARRY4(iAmt,(uint)(sqlite3_io_methods *)iOfst)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(iAmt,(uint)(sqlite3_io_methods *)iOfst)" identifier (argument_list "(iAmt,(uint)(sqlite3_io_methods *)iOfst)" ( identifier , (cast_expression "(uint)(sqlite3_io_methods *)iOfst" ( (type_descriptor "uint" type_identifier) ) (cast_expression "(sqlite3_io_methods *)iOfst" ( (type_descriptor "sqlite3_io_methods *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )))))) ;) (expression_statement "uVar1 = (uint)(pFile[1].pMethods <\n                (sqlite3_io_methods *)((int)&((sqlite3_io_methods *)iOfst)->iVersion + iAmt));" (assignment_expression "uVar1 = (uint)(pFile[1].pMethods <\n                (sqlite3_io_methods *)((int)&((sqlite3_io_methods *)iOfst)->iVersion + iAmt))" identifier = (call_expression "(uint)(pFile[1].pMethods <\n                (sqlite3_io_methods *)((int)&((sqlite3_io_methods *)iOfst)->iVersion + iAmt))" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(pFile[1].pMethods <\n                (sqlite3_io_methods *)((int)&((sqlite3_io_methods *)iOfst)->iVersion + iAmt))" ( (binary_expression "pFile[1].pMethods <\n                (sqlite3_io_methods *)((int)&((sqlite3_io_methods *)iOfst)->iVersion + iAmt)" (field_expression "pFile[1].pMethods" (subscript_expression "pFile[1]" identifier [ number_literal ]) . field_identifier) < (cast_expression "(sqlite3_io_methods *)((int)&((sqlite3_io_methods *)iOfst)->iVersion + iAmt)" ( (type_descriptor "sqlite3_io_methods *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&((sqlite3_io_methods *)iOfst)->iVersion + iAmt)" ( (binary_expression "(int)&((sqlite3_io_methods *)iOfst)->iVersion + iAmt" (cast_expression "(int)&((sqlite3_io_methods *)iOfst)->iVersion" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&((sqlite3_io_methods *)iOfst)->iVersion" & (field_expression "((sqlite3_io_methods *)iOfst)->iVersion" (parenthesized_expression "((sqlite3_io_methods *)iOfst)" ( (cast_expression "(sqlite3_io_methods *)iOfst" ( (type_descriptor "sqlite3_io_methods *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) )) -> field_identifier))) + identifier) )))) )))) ;) (expression_statement "iVar2 = (int)pFile[2].pMethods - iVar3;" (assignment_expression "iVar2 = (int)pFile[2].pMethods - iVar3" identifier = (binary_expression "(int)pFile[2].pMethods - iVar3" (cast_expression "(int)pFile[2].pMethods" ( (type_descriptor "int" primitive_type) ) (field_expression "pFile[2].pMethods" (subscript_expression "pFile[2]" identifier [ number_literal ]) . field_identifier)) - identifier)) ;) (if_statement "if ((SBORROW4((int)pFile[2].pMethods,iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0)\n  {\n    memcpy(zBuf,(void *)((int)&(pFile[7].pMethods)->iVersion +\n                        (int)&((sqlite3_io_methods *)iOfst)->iVersion),iAmt);\n    local_20 = 0;\n  }\n  else {\n    memset(zBuf,0,iAmt);\n    local_20 = 0x20a;\n    uVar1 = (uint)((sqlite3_io_methods *)iOfst < pFile[1].pMethods);\n    iVar2 = iOfst._4_4_ - (int)pFile[2].pMethods;\n    if ((SBORROW4(iOfst._4_4_,(int)pFile[2].pMethods) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0) {\n      local_20 = 0x20a;\n      memcpy(zBuf,(void *)((int)&(pFile[7].pMethods)->iVersion +\n                          (int)&((sqlite3_io_methods *)iOfst)->iVersion),\n             (int)pFile[1].pMethods - (int)(sqlite3_io_methods *)iOfst);\n    }\n  }" if (parenthesized_expression "((SBORROW4((int)pFile[2].pMethods,iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0)" ( (binary_expression "(SBORROW4((int)pFile[2].pMethods,iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0" (parenthesized_expression "(SBORROW4((int)pFile[2].pMethods,iVar3) != SBORROW4(iVar2,uVar1))" ( (binary_expression "SBORROW4((int)pFile[2].pMethods,iVar3) != SBORROW4(iVar2,uVar1)" (call_expression "SBORROW4((int)pFile[2].pMethods,iVar3)" identifier (argument_list "((int)pFile[2].pMethods,iVar3)" ( (cast_expression "(int)pFile[2].pMethods" ( (type_descriptor "int" primitive_type) ) (field_expression "pFile[2].pMethods" (subscript_expression "pFile[2]" identifier [ number_literal ]) . field_identifier)) , identifier ))) != (call_expression "SBORROW4(iVar2,uVar1)" identifier (argument_list "(iVar2,uVar1)" ( identifier , identifier )))) )) == (binary_expression "(int)(iVar2 - uVar1) < 0" (cast_expression "(int)(iVar2 - uVar1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(iVar2 - uVar1)" ( (binary_expression "iVar2 - uVar1" identifier - identifier) ))) < number_literal)) )) (compound_statement "{\n    memcpy(zBuf,(void *)((int)&(pFile[7].pMethods)->iVersion +\n                        (int)&((sqlite3_io_methods *)iOfst)->iVersion),iAmt);\n    local_20 = 0;\n  }" { (expression_statement "memcpy(zBuf,(void *)((int)&(pFile[7].pMethods)->iVersion +\n                        (int)&((sqlite3_io_methods *)iOfst)->iVersion),iAmt);" (call_expression "memcpy(zBuf,(void *)((int)&(pFile[7].pMethods)->iVersion +\n                        (int)&((sqlite3_io_methods *)iOfst)->iVersion),iAmt)" identifier (argument_list "(zBuf,(void *)((int)&(pFile[7].pMethods)->iVersion +\n                        (int)&((sqlite3_io_methods *)iOfst)->iVersion),iAmt)" ( identifier , (cast_expression "(void *)((int)&(pFile[7].pMethods)->iVersion +\n                        (int)&((sqlite3_io_methods *)iOfst)->iVersion)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&(pFile[7].pMethods)->iVersion +\n                        (int)&((sqlite3_io_methods *)iOfst)->iVersion)" ( (binary_expression "(int)&(pFile[7].pMethods)->iVersion +\n                        (int)&((sqlite3_io_methods *)iOfst)->iVersion" (cast_expression "(int)&(pFile[7].pMethods)->iVersion" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&(pFile[7].pMethods)->iVersion" & (field_expression "(pFile[7].pMethods)->iVersion" (parenthesized_expression "(pFile[7].pMethods)" ( (field_expression "pFile[7].pMethods" (subscript_expression "pFile[7]" identifier [ number_literal ]) . field_identifier) )) -> field_identifier))) + (cast_expression "(int)&((sqlite3_io_methods *)iOfst)->iVersion" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&((sqlite3_io_methods *)iOfst)->iVersion" & (field_expression "((sqlite3_io_methods *)iOfst)->iVersion" (parenthesized_expression "((sqlite3_io_methods *)iOfst)" ( (cast_expression "(sqlite3_io_methods *)iOfst" ( (type_descriptor "sqlite3_io_methods *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) )) -> field_identifier)))) ))) , identifier ))) ;) (expression_statement "local_20 = 0;" (assignment_expression "local_20 = 0" identifier = number_literal) ;) }) (else_clause "else {\n    memset(zBuf,0,iAmt);\n    local_20 = 0x20a;\n    uVar1 = (uint)((sqlite3_io_methods *)iOfst < pFile[1].pMethods);\n    iVar2 = iOfst._4_4_ - (int)pFile[2].pMethods;\n    if ((SBORROW4(iOfst._4_4_,(int)pFile[2].pMethods) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0) {\n      local_20 = 0x20a;\n      memcpy(zBuf,(void *)((int)&(pFile[7].pMethods)->iVersion +\n                          (int)&((sqlite3_io_methods *)iOfst)->iVersion),\n             (int)pFile[1].pMethods - (int)(sqlite3_io_methods *)iOfst);\n    }\n  }" else (compound_statement "{\n    memset(zBuf,0,iAmt);\n    local_20 = 0x20a;\n    uVar1 = (uint)((sqlite3_io_methods *)iOfst < pFile[1].pMethods);\n    iVar2 = iOfst._4_4_ - (int)pFile[2].pMethods;\n    if ((SBORROW4(iOfst._4_4_,(int)pFile[2].pMethods) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0) {\n      local_20 = 0x20a;\n      memcpy(zBuf,(void *)((int)&(pFile[7].pMethods)->iVersion +\n                          (int)&((sqlite3_io_methods *)iOfst)->iVersion),\n             (int)pFile[1].pMethods - (int)(sqlite3_io_methods *)iOfst);\n    }\n  }" { (expression_statement "memset(zBuf,0,iAmt);" (call_expression "memset(zBuf,0,iAmt)" identifier (argument_list "(zBuf,0,iAmt)" ( identifier , number_literal , identifier ))) ;) (expression_statement "local_20 = 0x20a;" (assignment_expression "local_20 = 0x20a" identifier = number_literal) ;) (expression_statement "uVar1 = (uint)((sqlite3_io_methods *)iOfst < pFile[1].pMethods);" (assignment_expression "uVar1 = (uint)((sqlite3_io_methods *)iOfst < pFile[1].pMethods)" identifier = (call_expression "(uint)((sqlite3_io_methods *)iOfst < pFile[1].pMethods)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((sqlite3_io_methods *)iOfst < pFile[1].pMethods)" ( (binary_expression "(sqlite3_io_methods *)iOfst < pFile[1].pMethods" (cast_expression "(sqlite3_io_methods *)iOfst" ( (type_descriptor "sqlite3_io_methods *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) < (field_expression "pFile[1].pMethods" (subscript_expression "pFile[1]" identifier [ number_literal ]) . field_identifier)) )))) ;) (expression_statement "iVar2 = iOfst._4_4_ - (int)pFile[2].pMethods;" (assignment_expression "iVar2 = iOfst._4_4_ - (int)pFile[2].pMethods" identifier = (binary_expression "iOfst._4_4_ - (int)pFile[2].pMethods" (field_expression "iOfst._4_4_" identifier . field_identifier) - (cast_expression "(int)pFile[2].pMethods" ( (type_descriptor "int" primitive_type) ) (field_expression "pFile[2].pMethods" (subscript_expression "pFile[2]" identifier [ number_literal ]) . field_identifier)))) ;) (if_statement "if ((SBORROW4(iOfst._4_4_,(int)pFile[2].pMethods) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0) {\n      local_20 = 0x20a;\n      memcpy(zBuf,(void *)((int)&(pFile[7].pMethods)->iVersion +\n                          (int)&((sqlite3_io_methods *)iOfst)->iVersion),\n             (int)pFile[1].pMethods - (int)(sqlite3_io_methods *)iOfst);\n    }" if (parenthesized_expression "((SBORROW4(iOfst._4_4_,(int)pFile[2].pMethods) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0)" ( (binary_expression "(SBORROW4(iOfst._4_4_,(int)pFile[2].pMethods) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0" (parenthesized_expression "(SBORROW4(iOfst._4_4_,(int)pFile[2].pMethods) != SBORROW4(iVar2,uVar1))" ( (binary_expression "SBORROW4(iOfst._4_4_,(int)pFile[2].pMethods) != SBORROW4(iVar2,uVar1)" (call_expression "SBORROW4(iOfst._4_4_,(int)pFile[2].pMethods)" identifier (argument_list "(iOfst._4_4_,(int)pFile[2].pMethods)" ( (field_expression "iOfst._4_4_" identifier . field_identifier) , (cast_expression "(int)pFile[2].pMethods" ( (type_descriptor "int" primitive_type) ) (field_expression "pFile[2].pMethods" (subscript_expression "pFile[2]" identifier [ number_literal ]) . field_identifier)) ))) != (call_expression "SBORROW4(iVar2,uVar1)" identifier (argument_list "(iVar2,uVar1)" ( identifier , identifier )))) )) != (binary_expression "(int)(iVar2 - uVar1) < 0" (cast_expression "(int)(iVar2 - uVar1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(iVar2 - uVar1)" ( (binary_expression "iVar2 - uVar1" identifier - identifier) ))) < number_literal)) )) (compound_statement "{\n      local_20 = 0x20a;\n      memcpy(zBuf,(void *)((int)&(pFile[7].pMethods)->iVersion +\n                          (int)&((sqlite3_io_methods *)iOfst)->iVersion),\n             (int)pFile[1].pMethods - (int)(sqlite3_io_methods *)iOfst);\n    }" { (expression_statement "local_20 = 0x20a;" (assignment_expression "local_20 = 0x20a" identifier = number_literal) ;) (expression_statement "memcpy(zBuf,(void *)((int)&(pFile[7].pMethods)->iVersion +\n                          (int)&((sqlite3_io_methods *)iOfst)->iVersion),\n             (int)pFile[1].pMethods - (int)(sqlite3_io_methods *)iOfst);" (call_expression "memcpy(zBuf,(void *)((int)&(pFile[7].pMethods)->iVersion +\n                          (int)&((sqlite3_io_methods *)iOfst)->iVersion),\n             (int)pFile[1].pMethods - (int)(sqlite3_io_methods *)iOfst)" identifier (argument_list "(zBuf,(void *)((int)&(pFile[7].pMethods)->iVersion +\n                          (int)&((sqlite3_io_methods *)iOfst)->iVersion),\n             (int)pFile[1].pMethods - (int)(sqlite3_io_methods *)iOfst)" ( identifier , (cast_expression "(void *)((int)&(pFile[7].pMethods)->iVersion +\n                          (int)&((sqlite3_io_methods *)iOfst)->iVersion)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&(pFile[7].pMethods)->iVersion +\n                          (int)&((sqlite3_io_methods *)iOfst)->iVersion)" ( (binary_expression "(int)&(pFile[7].pMethods)->iVersion +\n                          (int)&((sqlite3_io_methods *)iOfst)->iVersion" (cast_expression "(int)&(pFile[7].pMethods)->iVersion" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&(pFile[7].pMethods)->iVersion" & (field_expression "(pFile[7].pMethods)->iVersion" (parenthesized_expression "(pFile[7].pMethods)" ( (field_expression "pFile[7].pMethods" (subscript_expression "pFile[7]" identifier [ number_literal ]) . field_identifier) )) -> field_identifier))) + (cast_expression "(int)&((sqlite3_io_methods *)iOfst)->iVersion" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&((sqlite3_io_methods *)iOfst)->iVersion" & (field_expression "((sqlite3_io_methods *)iOfst)->iVersion" (parenthesized_expression "((sqlite3_io_methods *)iOfst)" ( (cast_expression "(sqlite3_io_methods *)iOfst" ( (type_descriptor "sqlite3_io_methods *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) )) -> field_identifier)))) ))) , (binary_expression "(int)pFile[1].pMethods - (int)(sqlite3_io_methods *)iOfst" (cast_expression "(int)pFile[1].pMethods" ( (type_descriptor "int" primitive_type) ) (field_expression "pFile[1].pMethods" (subscript_expression "pFile[1]" identifier [ number_literal ]) . field_identifier)) - (cast_expression "(int)(sqlite3_io_methods *)iOfst" ( (type_descriptor "int" primitive_type) ) (cast_expression "(sqlite3_io_methods *)iOfst" ( (type_descriptor "sqlite3_io_methods *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ))) ;) })) }))) (return_statement "return local_20;" return identifier ;) })))
(translation_unit "undefined4 FUN_00045140(int param_1,void *param_2,uint param_3,uint param_4,int param_5)\n\n{\n  uint uVar1;\n  int iVar2;\n  int iVar3;\n  undefined4 local_20;\n  \n  iVar3 = ((int)param_3 >> 0x1f) + param_5 + (uint)CARRY4(param_3,param_4);\n  uVar1 = (uint)(*(uint *)(param_1 + 4) < param_3 + param_4);\n  iVar2 = *(int *)(param_1 + 8) - iVar3;\n  if ((SBORROW4(*(int *)(param_1 + 8),iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0)\n  {\n    memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),param_3);\n    local_20 = 0;\n  }\n  else {\n    memset(param_2,0,param_3);\n    local_20 = 0x20a;\n    uVar1 = (uint)(param_4 < *(uint *)(param_1 + 4));\n    iVar2 = param_5 - *(int *)(param_1 + 8);\n    if ((SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0) {\n      local_20 = 0x20a;\n      memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4);\n    }\n  }\n  return local_20;\n}\n\n" (function_definition "undefined4 FUN_00045140(int param_1,void *param_2,uint param_3,uint param_4,int param_5)\n\n{\n  uint uVar1;\n  int iVar2;\n  int iVar3;\n  undefined4 local_20;\n  \n  iVar3 = ((int)param_3 >> 0x1f) + param_5 + (uint)CARRY4(param_3,param_4);\n  uVar1 = (uint)(*(uint *)(param_1 + 4) < param_3 + param_4);\n  iVar2 = *(int *)(param_1 + 8) - iVar3;\n  if ((SBORROW4(*(int *)(param_1 + 8),iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0)\n  {\n    memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),param_3);\n    local_20 = 0;\n  }\n  else {\n    memset(param_2,0,param_3);\n    local_20 = 0x20a;\n    uVar1 = (uint)(param_4 < *(uint *)(param_1 + 4));\n    iVar2 = param_5 - *(int *)(param_1 + 8);\n    if ((SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0) {\n      local_20 = 0x20a;\n      memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4);\n    }\n  }\n  return local_20;\n}" type_identifier (function_declarator "FUN_00045140(int param_1,void *param_2,uint param_3,uint param_4,int param_5)" identifier (parameter_list "(int param_1,void *param_2,uint param_3,uint param_4,int param_5)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "void *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint param_3" type_identifier identifier) , (parameter_declaration "uint param_4" type_identifier identifier) , (parameter_declaration "int param_5" primitive_type identifier) ))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  int iVar3;\n  undefined4 local_20;\n  \n  iVar3 = ((int)param_3 >> 0x1f) + param_5 + (uint)CARRY4(param_3,param_4);\n  uVar1 = (uint)(*(uint *)(param_1 + 4) < param_3 + param_4);\n  iVar2 = *(int *)(param_1 + 8) - iVar3;\n  if ((SBORROW4(*(int *)(param_1 + 8),iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0)\n  {\n    memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),param_3);\n    local_20 = 0;\n  }\n  else {\n    memset(param_2,0,param_3);\n    local_20 = 0x20a;\n    uVar1 = (uint)(param_4 < *(uint *)(param_1 + 4));\n    iVar2 = param_5 - *(int *)(param_1 + 8);\n    if ((SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0) {\n      local_20 = 0x20a;\n      memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4);\n    }\n  }\n  return local_20;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "undefined4 local_20;" type_identifier identifier ;) (expression_statement "iVar3 = ((int)param_3 >> 0x1f) + param_5 + (uint)CARRY4(param_3,param_4);" (assignment_expression "iVar3 = ((int)param_3 >> 0x1f) + param_5 + (uint)CARRY4(param_3,param_4)" identifier = (binary_expression "((int)param_3 >> 0x1f) + param_5 + (uint)CARRY4(param_3,param_4)" (binary_expression "((int)param_3 >> 0x1f) + param_5" (parenthesized_expression "((int)param_3 >> 0x1f)" ( (binary_expression "(int)param_3 >> 0x1f" (cast_expression "(int)param_3" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )) + identifier) + (cast_expression "(uint)CARRY4(param_3,param_4)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(param_3,param_4)" identifier (argument_list "(param_3,param_4)" ( identifier , identifier )))))) ;) (expression_statement "uVar1 = (uint)(*(uint *)(param_1 + 4) < param_3 + param_4);" (assignment_expression "uVar1 = (uint)(*(uint *)(param_1 + 4) < param_3 + param_4)" identifier = (call_expression "(uint)(*(uint *)(param_1 + 4) < param_3 + param_4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(uint *)(param_1 + 4) < param_3 + param_4)" ( (binary_expression "*(uint *)(param_1 + 4) < param_3 + param_4" (pointer_expression "*(uint *)(param_1 + 4)" * (cast_expression "(uint *)(param_1 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) )))) < (binary_expression "param_3 + param_4" identifier + identifier)) )))) ;) (expression_statement "iVar2 = *(int *)(param_1 + 8) - iVar3;" (assignment_expression "iVar2 = *(int *)(param_1 + 8) - iVar3" identifier = (binary_expression "*(int *)(param_1 + 8) - iVar3" (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) - identifier)) ;) (if_statement "if ((SBORROW4(*(int *)(param_1 + 8),iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0)\n  {\n    memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),param_3);\n    local_20 = 0;\n  }\n  else {\n    memset(param_2,0,param_3);\n    local_20 = 0x20a;\n    uVar1 = (uint)(param_4 < *(uint *)(param_1 + 4));\n    iVar2 = param_5 - *(int *)(param_1 + 8);\n    if ((SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0) {\n      local_20 = 0x20a;\n      memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4);\n    }\n  }" if (parenthesized_expression "((SBORROW4(*(int *)(param_1 + 8),iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0)" ( (binary_expression "(SBORROW4(*(int *)(param_1 + 8),iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0" (parenthesized_expression "(SBORROW4(*(int *)(param_1 + 8),iVar3) != SBORROW4(iVar2,uVar1))" ( (binary_expression "SBORROW4(*(int *)(param_1 + 8),iVar3) != SBORROW4(iVar2,uVar1)" (call_expression "SBORROW4(*(int *)(param_1 + 8),iVar3)" identifier (argument_list "(*(int *)(param_1 + 8),iVar3)" ( (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) , identifier ))) != (call_expression "SBORROW4(iVar2,uVar1)" identifier (argument_list "(iVar2,uVar1)" ( identifier , identifier )))) )) == (binary_expression "(int)(iVar2 - uVar1) < 0" (cast_expression "(int)(iVar2 - uVar1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(iVar2 - uVar1)" ( (binary_expression "iVar2 - uVar1" identifier - identifier) ))) < number_literal)) )) (compound_statement "{\n    memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),param_3);\n    local_20 = 0;\n  }" { (expression_statement "memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),param_3);" (call_expression "memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),param_3)" identifier (argument_list "(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),param_3)" ( identifier , (cast_expression "(void *)(param_4 + *(int *)(param_1 + 0x1c))" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + *(int *)(param_1 + 0x1c))" ( (binary_expression "param_4 + *(int *)(param_1 + 0x1c)" identifier + (pointer_expression "*(int *)(param_1 + 0x1c)" * (cast_expression "(int *)(param_1 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1c)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) ))))) ))) , identifier ))) ;) (expression_statement "local_20 = 0;" (assignment_expression "local_20 = 0" identifier = number_literal) ;) }) (else_clause "else {\n    memset(param_2,0,param_3);\n    local_20 = 0x20a;\n    uVar1 = (uint)(param_4 < *(uint *)(param_1 + 4));\n    iVar2 = param_5 - *(int *)(param_1 + 8);\n    if ((SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0) {\n      local_20 = 0x20a;\n      memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4);\n    }\n  }" else (compound_statement "{\n    memset(param_2,0,param_3);\n    local_20 = 0x20a;\n    uVar1 = (uint)(param_4 < *(uint *)(param_1 + 4));\n    iVar2 = param_5 - *(int *)(param_1 + 8);\n    if ((SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0) {\n      local_20 = 0x20a;\n      memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4);\n    }\n  }" { (expression_statement "memset(param_2,0,param_3);" (call_expression "memset(param_2,0,param_3)" identifier (argument_list "(param_2,0,param_3)" ( identifier , number_literal , identifier ))) ;) (expression_statement "local_20 = 0x20a;" (assignment_expression "local_20 = 0x20a" identifier = number_literal) ;) (expression_statement "uVar1 = (uint)(param_4 < *(uint *)(param_1 + 4));" (assignment_expression "uVar1 = (uint)(param_4 < *(uint *)(param_1 + 4))" identifier = (call_expression "(uint)(param_4 < *(uint *)(param_1 + 4))" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_4 < *(uint *)(param_1 + 4))" ( (binary_expression "param_4 < *(uint *)(param_1 + 4)" identifier < (pointer_expression "*(uint *)(param_1 + 4)" * (cast_expression "(uint *)(param_1 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) ))))) )))) ;) (expression_statement "iVar2 = param_5 - *(int *)(param_1 + 8);" (assignment_expression "iVar2 = param_5 - *(int *)(param_1 + 8)" identifier = (binary_expression "param_5 - *(int *)(param_1 + 8)" identifier - (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))))) ;) (if_statement "if ((SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0) {\n      local_20 = 0x20a;\n      memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4);\n    }" if (parenthesized_expression "((SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0)" ( (binary_expression "(SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0" (parenthesized_expression "(SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1))" ( (binary_expression "SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1)" (call_expression "SBORROW4(param_5,*(int *)(param_1 + 8))" identifier (argument_list "(param_5,*(int *)(param_1 + 8))" ( identifier , (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) ))) != (call_expression "SBORROW4(iVar2,uVar1)" identifier (argument_list "(iVar2,uVar1)" ( identifier , identifier )))) )) != (binary_expression "(int)(iVar2 - uVar1) < 0" (cast_expression "(int)(iVar2 - uVar1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(iVar2 - uVar1)" ( (binary_expression "iVar2 - uVar1" identifier - identifier) ))) < number_literal)) )) (compound_statement "{\n      local_20 = 0x20a;\n      memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4);\n    }" { (expression_statement "local_20 = 0x20a;" (assignment_expression "local_20 = 0x20a" identifier = number_literal) ;) (expression_statement "memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4);" (call_expression "memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4)" identifier (argument_list "(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4)" ( identifier , (cast_expression "(void *)(param_4 + *(int *)(param_1 + 0x1c))" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + *(int *)(param_1 + 0x1c))" ( (binary_expression "param_4 + *(int *)(param_1 + 0x1c)" identifier + (pointer_expression "*(int *)(param_1 + 0x1c)" * (cast_expression "(int *)(param_1 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1c)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) ))))) ))) , (binary_expression "*(uint *)(param_1 + 4) - param_4" (pointer_expression "*(uint *)(param_1 + 4)" * (cast_expression "(uint *)(param_1 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) )))) - identifier) ))) ;) })) }))) (return_statement "return local_20;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )) + IDENT) + (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( IDENT , IDENT )))))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) < (binary_expression IDENT + IDENT)) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) - IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , IDENT ))) != (call_expression IDENT (argument_list ( IDENT , IDENT )))) )) == (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT - IDENT) ))) < LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ))) , IDENT ))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) != (call_expression IDENT (argument_list ( IDENT , IDENT )))) )) != (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT - IDENT) ))) < LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ))) , (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) - IDENT) ))) ;) })) }))) (return_statement return IDENT ;) })))
(function_definition "undefined4 FUN_00045140(int param_1,void *param_2,uint param_3,uint param_4,int param_5)\n\n{\n  uint uVar1;\n  int iVar2;\n  int iVar3;\n  undefined4 local_20;\n  \n  iVar3 = ((int)param_3 >> 0x1f) + param_5 + (uint)CARRY4(param_3,param_4);\n  uVar1 = (uint)(*(uint *)(param_1 + 4) < param_3 + param_4);\n  iVar2 = *(int *)(param_1 + 8) - iVar3;\n  if ((SBORROW4(*(int *)(param_1 + 8),iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0)\n  {\n    memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),param_3);\n    local_20 = 0;\n  }\n  else {\n    memset(param_2,0,param_3);\n    local_20 = 0x20a;\n    uVar1 = (uint)(param_4 < *(uint *)(param_1 + 4));\n    iVar2 = param_5 - *(int *)(param_1 + 8);\n    if ((SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0) {\n      local_20 = 0x20a;\n      memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4);\n    }\n  }\n  return local_20;\n}" (type_identifier "undefined4") (function_declarator "FUN_00045140(int param_1,void *param_2,uint param_3,uint param_4,int param_5)" (identifier "FUN_00045140") (parameter_list "(int param_1,void *param_2,uint param_3,uint param_4,int param_5)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "void *param_2" (primitive_type "void") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "uint param_3" (type_identifier "uint") (identifier "param_3")) (, ",") (parameter_declaration "uint param_4" (type_identifier "uint") (identifier "param_4")) (, ",") (parameter_declaration "int param_5" (primitive_type "int") (identifier "param_5")) () ")"))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  int iVar3;\n  undefined4 local_20;\n  \n  iVar3 = ((int)param_3 >> 0x1f) + param_5 + (uint)CARRY4(param_3,param_4);\n  uVar1 = (uint)(*(uint *)(param_1 + 4) < param_3 + param_4);\n  iVar2 = *(int *)(param_1 + 8) - iVar3;\n  if ((SBORROW4(*(int *)(param_1 + 8),iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0)\n  {\n    memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),param_3);\n    local_20 = 0;\n  }\n  else {\n    memset(param_2,0,param_3);\n    local_20 = 0x20a;\n    uVar1 = (uint)(param_4 < *(uint *)(param_1 + 4));\n    iVar2 = param_5 - *(int *)(param_1 + 8);\n    if ((SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0) {\n      local_20 = 0x20a;\n      memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4);\n    }\n  }\n  return local_20;\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "undefined4 local_20;" (type_identifier "undefined4") (identifier "local_20") (; ";")) (expression_statement "iVar3 = ((int)param_3 >> 0x1f) + param_5 + (uint)CARRY4(param_3,param_4);" (assignment_expression "iVar3 = ((int)param_3 >> 0x1f) + param_5 + (uint)CARRY4(param_3,param_4)" (identifier "iVar3") (= "=") (binary_expression "((int)param_3 >> 0x1f) + param_5 + (uint)CARRY4(param_3,param_4)" (binary_expression "((int)param_3 >> 0x1f) + param_5" (parenthesized_expression "((int)param_3 >> 0x1f)" (( "(") (binary_expression "(int)param_3 >> 0x1f" (cast_expression "(int)param_3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_3")) (>> ">>") (number_literal "0x1f")) () ")")) (+ "+") (identifier "param_5")) (+ "+") (cast_expression "(uint)CARRY4(param_3,param_4)" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CARRY4(param_3,param_4)" (identifier "CARRY4") (argument_list "(param_3,param_4)" (( "(") (identifier "param_3") (, ",") (identifier "param_4") () ")")))))) (; ";")) (expression_statement "uVar1 = (uint)(*(uint *)(param_1 + 4) < param_3 + param_4);" (assignment_expression "uVar1 = (uint)(*(uint *)(param_1 + 4) < param_3 + param_4)" (identifier "uVar1") (= "=") (call_expression "(uint)(*(uint *)(param_1 + 4) < param_3 + param_4)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(*(uint *)(param_1 + 4) < param_3 + param_4)" (( "(") (binary_expression "*(uint *)(param_1 + 4) < param_3 + param_4" (pointer_expression "*(uint *)(param_1 + 4)" (* "*") (cast_expression "(uint *)(param_1 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 4)" (( "(") (binary_expression "param_1 + 4" (identifier "param_1") (+ "+") (number_literal "4")) () ")")))) (< "<") (binary_expression "param_3 + param_4" (identifier "param_3") (+ "+") (identifier "param_4"))) () ")")))) (; ";")) (expression_statement "iVar2 = *(int *)(param_1 + 8) - iVar3;" (assignment_expression "iVar2 = *(int *)(param_1 + 8) - iVar3" (identifier "iVar2") (= "=") (binary_expression "*(int *)(param_1 + 8) - iVar3" (pointer_expression "*(int *)(param_1 + 8)" (* "*") (cast_expression "(int *)(param_1 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (- "-") (identifier "iVar3"))) (; ";")) (if_statement "if ((SBORROW4(*(int *)(param_1 + 8),iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0)\n  {\n    memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),param_3);\n    local_20 = 0;\n  }\n  else {\n    memset(param_2,0,param_3);\n    local_20 = 0x20a;\n    uVar1 = (uint)(param_4 < *(uint *)(param_1 + 4));\n    iVar2 = param_5 - *(int *)(param_1 + 8);\n    if ((SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0) {\n      local_20 = 0x20a;\n      memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4);\n    }\n  }" (if "if") (parenthesized_expression "((SBORROW4(*(int *)(param_1 + 8),iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0)" (( "(") (binary_expression "(SBORROW4(*(int *)(param_1 + 8),iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0" (parenthesized_expression "(SBORROW4(*(int *)(param_1 + 8),iVar3) != SBORROW4(iVar2,uVar1))" (( "(") (binary_expression "SBORROW4(*(int *)(param_1 + 8),iVar3) != SBORROW4(iVar2,uVar1)" (call_expression "SBORROW4(*(int *)(param_1 + 8),iVar3)" (identifier "SBORROW4") (argument_list "(*(int *)(param_1 + 8),iVar3)" (( "(") (pointer_expression "*(int *)(param_1 + 8)" (* "*") (cast_expression "(int *)(param_1 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (, ",") (identifier "iVar3") () ")"))) (!= "!=") (call_expression "SBORROW4(iVar2,uVar1)" (identifier "SBORROW4") (argument_list "(iVar2,uVar1)" (( "(") (identifier "iVar2") (, ",") (identifier "uVar1") () ")")))) () ")")) (== "==") (binary_expression "(int)(iVar2 - uVar1) < 0" (cast_expression "(int)(iVar2 - uVar1)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(iVar2 - uVar1)" (( "(") (binary_expression "iVar2 - uVar1" (identifier "iVar2") (- "-") (identifier "uVar1")) () ")"))) (< "<") (number_literal "0"))) () ")")) (compound_statement "{\n    memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),param_3);\n    local_20 = 0;\n  }" ({ "{") (expression_statement "memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),param_3);" (call_expression "memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),param_3)" (identifier "memcpy") (argument_list "(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),param_3)" (( "(") (identifier "param_2") (, ",") (cast_expression "(void *)(param_4 + *(int *)(param_1 + 0x1c))" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_4 + *(int *)(param_1 + 0x1c))" (( "(") (binary_expression "param_4 + *(int *)(param_1 + 0x1c)" (identifier "param_4") (+ "+") (pointer_expression "*(int *)(param_1 + 0x1c)" (* "*") (cast_expression "(int *)(param_1 + 0x1c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1c)" (( "(") (binary_expression "param_1 + 0x1c" (identifier "param_1") (+ "+") (number_literal "0x1c")) () ")"))))) () ")"))) (, ",") (identifier "param_3") () ")"))) (; ";")) (expression_statement "local_20 = 0;" (assignment_expression "local_20 = 0" (identifier "local_20") (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n    memset(param_2,0,param_3);\n    local_20 = 0x20a;\n    uVar1 = (uint)(param_4 < *(uint *)(param_1 + 4));\n    iVar2 = param_5 - *(int *)(param_1 + 8);\n    if ((SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0) {\n      local_20 = 0x20a;\n      memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4);\n    }\n  }" (else "else") (compound_statement "{\n    memset(param_2,0,param_3);\n    local_20 = 0x20a;\n    uVar1 = (uint)(param_4 < *(uint *)(param_1 + 4));\n    iVar2 = param_5 - *(int *)(param_1 + 8);\n    if ((SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0) {\n      local_20 = 0x20a;\n      memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4);\n    }\n  }" ({ "{") (expression_statement "memset(param_2,0,param_3);" (call_expression "memset(param_2,0,param_3)" (identifier "memset") (argument_list "(param_2,0,param_3)" (( "(") (identifier "param_2") (, ",") (number_literal "0") (, ",") (identifier "param_3") () ")"))) (; ";")) (expression_statement "local_20 = 0x20a;" (assignment_expression "local_20 = 0x20a" (identifier "local_20") (= "=") (number_literal "0x20a")) (; ";")) (expression_statement "uVar1 = (uint)(param_4 < *(uint *)(param_1 + 4));" (assignment_expression "uVar1 = (uint)(param_4 < *(uint *)(param_1 + 4))" (identifier "uVar1") (= "=") (call_expression "(uint)(param_4 < *(uint *)(param_1 + 4))" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(param_4 < *(uint *)(param_1 + 4))" (( "(") (binary_expression "param_4 < *(uint *)(param_1 + 4)" (identifier "param_4") (< "<") (pointer_expression "*(uint *)(param_1 + 4)" (* "*") (cast_expression "(uint *)(param_1 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 4)" (( "(") (binary_expression "param_1 + 4" (identifier "param_1") (+ "+") (number_literal "4")) () ")"))))) () ")")))) (; ";")) (expression_statement "iVar2 = param_5 - *(int *)(param_1 + 8);" (assignment_expression "iVar2 = param_5 - *(int *)(param_1 + 8)" (identifier "iVar2") (= "=") (binary_expression "param_5 - *(int *)(param_1 + 8)" (identifier "param_5") (- "-") (pointer_expression "*(int *)(param_1 + 8)" (* "*") (cast_expression "(int *)(param_1 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))))) (; ";")) (if_statement "if ((SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0) {\n      local_20 = 0x20a;\n      memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4);\n    }" (if "if") (parenthesized_expression "((SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0)" (( "(") (binary_expression "(SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1)) !=\n        (int)(iVar2 - uVar1) < 0" (parenthesized_expression "(SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1))" (( "(") (binary_expression "SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1)" (call_expression "SBORROW4(param_5,*(int *)(param_1 + 8))" (identifier "SBORROW4") (argument_list "(param_5,*(int *)(param_1 + 8))" (( "(") (identifier "param_5") (, ",") (pointer_expression "*(int *)(param_1 + 8)" (* "*") (cast_expression "(int *)(param_1 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) () ")"))) (!= "!=") (call_expression "SBORROW4(iVar2,uVar1)" (identifier "SBORROW4") (argument_list "(iVar2,uVar1)" (( "(") (identifier "iVar2") (, ",") (identifier "uVar1") () ")")))) () ")")) (!= "!=") (binary_expression "(int)(iVar2 - uVar1) < 0" (cast_expression "(int)(iVar2 - uVar1)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(iVar2 - uVar1)" (( "(") (binary_expression "iVar2 - uVar1" (identifier "iVar2") (- "-") (identifier "uVar1")) () ")"))) (< "<") (number_literal "0"))) () ")")) (compound_statement "{\n      local_20 = 0x20a;\n      memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4);\n    }" ({ "{") (expression_statement "local_20 = 0x20a;" (assignment_expression "local_20 = 0x20a" (identifier "local_20") (= "=") (number_literal "0x20a")) (; ";")) (expression_statement "memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4);" (call_expression "memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4)" (identifier "memcpy") (argument_list "(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4)" (( "(") (identifier "param_2") (, ",") (cast_expression "(void *)(param_4 + *(int *)(param_1 + 0x1c))" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_4 + *(int *)(param_1 + 0x1c))" (( "(") (binary_expression "param_4 + *(int *)(param_1 + 0x1c)" (identifier "param_4") (+ "+") (pointer_expression "*(int *)(param_1 + 0x1c)" (* "*") (cast_expression "(int *)(param_1 + 0x1c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1c)" (( "(") (binary_expression "param_1 + 0x1c" (identifier "param_1") (+ "+") (number_literal "0x1c")) () ")"))))) () ")"))) (, ",") (binary_expression "*(uint *)(param_1 + 4) - param_4" (pointer_expression "*(uint *)(param_1 + 4)" (* "*") (cast_expression "(uint *)(param_1 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 4)" (( "(") (binary_expression "param_1 + 4" (identifier "param_1") (+ "+") (number_literal "4")) () ")")))) (- "-") (identifier "param_4")) () ")"))) (; ";")) (} "}"))) (} "}")))) (return_statement "return local_20;" (return "return") (identifier "local_20") (; ";")) (} "}")))

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

int function_1(type_1 *pFile,void *zBuf,int var_1,type_2 iOfst)

{
  type_3 var_6;
  int var_5;
  int var_3;
  int local_20;
  
  var_3 = (var_1 >> 0x1f) + iOfst._4_4_ + (type_3)var_2(var_1,(type_3)(type_4 *)iOfst);
  var_6 = (type_3)(pFile[1].pMethods <
                (type_4 *)((int)&((type_4 *)iOfst)->iVersion + var_1));
  var_5 = (int)pFile[2].pMethods - var_3;
  if ((var_4((int)pFile[2].pMethods,var_3) != var_4(var_5,var_6)) == (int)(var_5 - var_6) < 0)
  {
    var_7(zBuf,(void *)((int)&(pFile[7].pMethods)->iVersion +
                        (int)&((type_4 *)iOfst)->iVersion),var_1);
    local_20 = 0;
  }
  else {
    var_8(zBuf,0,var_1);
    local_20 = 0x20a;
    var_6 = (type_3)((type_4 *)iOfst < pFile[1].pMethods);
    var_5 = iOfst._4_4_ - (int)pFile[2].pMethods;
    if ((var_4(iOfst._4_4_,(int)pFile[2].pMethods) != var_4(var_5,var_6)) !=
        (int)(var_5 - var_6) < 0) {
      local_20 = 0x20a;
      var_7(zBuf,(void *)((int)&(pFile[7].pMethods)->iVersion +
                          (int)&((type_4 *)iOfst)->iVersion),
             (int)pFile[1].pMethods - (int)(type_4 *)iOfst);
    }
  }
  return local_20;
}


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

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

undefined4 MASKED(int param_1,void *param_2,uint param_3,uint param_4,int param_5)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  undefined4 local_20;
  
  iVar3 = ((int)param_3 >> 0x1f) + param_5 + (uint)CARRY4(param_3,param_4);
  uVar1 = (uint)(*(uint *)(param_1 + 4) < param_3 + param_4);
  iVar2 = *(int *)(param_1 + 8) - iVar3;
  if ((SBORROW4(*(int *)(param_1 + 8),iVar3) != SBORROW4(iVar2,uVar1)) == (int)(iVar2 - uVar1) < 0)
  {
    memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),param_3);
    local_20 = 0;
  }
  else {
    memset(param_2,0,param_3);
    local_20 = 0x20a;
    uVar1 = (uint)(param_4 < *(uint *)(param_1 + 4));
    iVar2 = param_5 - *(int *)(param_1 + 8);
    if ((SBORROW4(param_5,*(int *)(param_1 + 8)) != SBORROW4(iVar2,uVar1)) !=
        (int)(iVar2 - uVar1) < 0) {
      local_20 = 0x20a;
      memcpy(param_2,(void *)(param_4 + *(int *)(param_1 + 0x1c)),*(uint *)(param_1 + 4) - param_4);
    }
  }
  return local_20;
}

