
/* WARNING: Unknown calling convention */

int rev_xstrcoll_size(V a,V b)

{
  int iVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  
  uVar3 = *(uint *)((int)a + 0x38);
  iVar4 = *(int *)((int)b + 0x3c);
  iVar1 = *(int *)((int)a + 0x3c);
  uVar2 = *(uint *)((int)b + 0x38);
  if ((SBORROW4(iVar1,iVar4) != SBORROW4(iVar1 - iVar4,(uint)(uVar3 < uVar2))) ==
      (int)((iVar1 - iVar4) - (uint)(uVar3 < uVar2)) < 0) {
    if (uVar3 == uVar2 && iVar4 == iVar1) {
                    /* WARNING: Load size is inaccurate */
                    /* WARNING: Load size is inaccurate */
      iVar4 = xstrcoll(*b,*a);
      return iVar4;
    }
    uVar3 = (uint)((SBORROW4(iVar4,iVar1) != SBORROW4(iVar4 - iVar1,(uint)(uVar2 < uVar3))) !=
                  (int)((iVar4 - iVar1) - (uint)(uVar2 < uVar3)) < 0);
  }
  else {
    uVar3 = 0xffffffff;
  }
  return uVar3;
}



uint FUN_00017f90(int param_1,int param_2)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  
  uVar4 = *(uint *)(param_1 + 0x38);
  iVar1 = *(int *)(param_2 + 0x3c);
  iVar2 = *(int *)(param_1 + 0x3c);
  uVar3 = *(uint *)(param_2 + 0x38);
  if ((SBORROW4(iVar2,iVar1) != SBORROW4(iVar2 - iVar1,(uint)(uVar4 < uVar3))) ==
      (int)((iVar2 - iVar1) - (uint)(uVar4 < uVar3)) < 0) {
    if (uVar4 == uVar3 && iVar1 == iVar2) {
      uVar4 = FUN_00014f20();
      return uVar4;
    }
    uVar4 = (uint)((SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))) !=
                  (int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0);
  }
  else {
    uVar4 = 0xffffffff;
  }
  return uVar4;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
SUB ESP,0x1c
MOV EDX,dword ptr [ESP + 0x30]
MOV EAX,dword ptr [ESP + 0x34]
MOV EDI,dword ptr [EDX + 0x38]
MOV ECX,dword ptr [EAX + 0x3c]
MOV EBX,dword ptr [EDX + 0x3c]
MOV ESI,dword ptr [EAX + 0x38]
MOV EBP,ECX
CMP EDI,ESI
MOV ECX,EBX
MOV dword ptr [ESP + 0xc],EBP
SBB ECX,EBP
JL 0x00017ff0
MOV EBP,EDI
XOR EBP,ESI
MOV ECX,EBP
MOV EBP,dword ptr [ESP + 0xc]
XOR EBP,EBX
OR ECX,EBP
JZ 0x00017fe0
MOV ECX,dword ptr [ESP + 0xc]
CMP ESI,EDI
SBB ECX,EBX
SETL AL
MOVZX EAX,AL
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EDX,dword ptr [EDX]
MOV EAX,dword ptr [EAX]
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
JMP 0x00014f20
MOV EAX,0xffffffff
JMP 0x00017fd7
(translation_unit "uint FUN_00017f90(int param_1,int param_2)\n\n{\n  int iVar1;\n  int iVar2;\n  uint uVar3;\n  uint uVar4;\n  \n  uVar4 = *(uint *)(param_1 + 0x38);\n  iVar1 = *(int *)(param_2 + 0x3c);\n  iVar2 = *(int *)(param_1 + 0x3c);\n  uVar3 = *(uint *)(param_2 + 0x38);\n  if ((SBORROW4(iVar2,iVar1) != SBORROW4(iVar2 - iVar1,(uint)(uVar4 < uVar3))) ==\n      (int)((iVar2 - iVar1) - (uint)(uVar4 < uVar3)) < 0) {\n    if (uVar4 == uVar3 && iVar1 == iVar2) {\n      uVar4 = FUN_00014f20();\n      return uVar4;\n    }\n    uVar4 = (uint)((SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))) !=\n                  (int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0);\n  }\n  else {\n    uVar4 = 0xffffffff;\n  }\n  return uVar4;\n}\n\n" (function_definition "uint FUN_00017f90(int param_1,int param_2)\n\n{\n  int iVar1;\n  int iVar2;\n  uint uVar3;\n  uint uVar4;\n  \n  uVar4 = *(uint *)(param_1 + 0x38);\n  iVar1 = *(int *)(param_2 + 0x3c);\n  iVar2 = *(int *)(param_1 + 0x3c);\n  uVar3 = *(uint *)(param_2 + 0x38);\n  if ((SBORROW4(iVar2,iVar1) != SBORROW4(iVar2 - iVar1,(uint)(uVar4 < uVar3))) ==\n      (int)((iVar2 - iVar1) - (uint)(uVar4 < uVar3)) < 0) {\n    if (uVar4 == uVar3 && iVar1 == iVar2) {\n      uVar4 = FUN_00014f20();\n      return uVar4;\n    }\n    uVar4 = (uint)((SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))) !=\n                  (int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0);\n  }\n  else {\n    uVar4 = 0xffffffff;\n  }\n  return uVar4;\n}" type_identifier (function_declarator "FUN_00017f90(int param_1,int param_2)" identifier (parameter_list "(int param_1,int param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  uint uVar3;\n  uint uVar4;\n  \n  uVar4 = *(uint *)(param_1 + 0x38);\n  iVar1 = *(int *)(param_2 + 0x3c);\n  iVar2 = *(int *)(param_1 + 0x3c);\n  uVar3 = *(uint *)(param_2 + 0x38);\n  if ((SBORROW4(iVar2,iVar1) != SBORROW4(iVar2 - iVar1,(uint)(uVar4 < uVar3))) ==\n      (int)((iVar2 - iVar1) - (uint)(uVar4 < uVar3)) < 0) {\n    if (uVar4 == uVar3 && iVar1 == iVar2) {\n      uVar4 = FUN_00014f20();\n      return uVar4;\n    }\n    uVar4 = (uint)((SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))) !=\n                  (int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0);\n  }\n  else {\n    uVar4 = 0xffffffff;\n  }\n  return uVar4;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (expression_statement "uVar4 = *(uint *)(param_1 + 0x38);" (assignment_expression "uVar4 = *(uint *)(param_1 + 0x38)" identifier = (pointer_expression "*(uint *)(param_1 + 0x38)" * (cast_expression "(uint *)(param_1 + 0x38)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x38)" ( (binary_expression "param_1 + 0x38" identifier + number_literal) ))))) ;) (expression_statement "iVar1 = *(int *)(param_2 + 0x3c);" (assignment_expression "iVar1 = *(int *)(param_2 + 0x3c)" identifier = (pointer_expression "*(int *)(param_2 + 0x3c)" * (cast_expression "(int *)(param_2 + 0x3c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x3c)" ( (binary_expression "param_2 + 0x3c" identifier + number_literal) ))))) ;) (expression_statement "iVar2 = *(int *)(param_1 + 0x3c);" (assignment_expression "iVar2 = *(int *)(param_1 + 0x3c)" identifier = (pointer_expression "*(int *)(param_1 + 0x3c)" * (cast_expression "(int *)(param_1 + 0x3c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x3c)" ( (binary_expression "param_1 + 0x3c" identifier + number_literal) ))))) ;) (expression_statement "uVar3 = *(uint *)(param_2 + 0x38);" (assignment_expression "uVar3 = *(uint *)(param_2 + 0x38)" identifier = (pointer_expression "*(uint *)(param_2 + 0x38)" * (cast_expression "(uint *)(param_2 + 0x38)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x38)" ( (binary_expression "param_2 + 0x38" identifier + number_literal) ))))) ;) (if_statement "if ((SBORROW4(iVar2,iVar1) != SBORROW4(iVar2 - iVar1,(uint)(uVar4 < uVar3))) ==\n      (int)((iVar2 - iVar1) - (uint)(uVar4 < uVar3)) < 0) {\n    if (uVar4 == uVar3 && iVar1 == iVar2) {\n      uVar4 = FUN_00014f20();\n      return uVar4;\n    }\n    uVar4 = (uint)((SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))) !=\n                  (int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0);\n  }\n  else {\n    uVar4 = 0xffffffff;\n  }" if (parenthesized_expression "((SBORROW4(iVar2,iVar1) != SBORROW4(iVar2 - iVar1,(uint)(uVar4 < uVar3))) ==\n      (int)((iVar2 - iVar1) - (uint)(uVar4 < uVar3)) < 0)" ( (binary_expression "(SBORROW4(iVar2,iVar1) != SBORROW4(iVar2 - iVar1,(uint)(uVar4 < uVar3))) ==\n      (int)((iVar2 - iVar1) - (uint)(uVar4 < uVar3)) < 0" (parenthesized_expression "(SBORROW4(iVar2,iVar1) != SBORROW4(iVar2 - iVar1,(uint)(uVar4 < uVar3)))" ( (binary_expression "SBORROW4(iVar2,iVar1) != SBORROW4(iVar2 - iVar1,(uint)(uVar4 < uVar3))" (call_expression "SBORROW4(iVar2,iVar1)" identifier (argument_list "(iVar2,iVar1)" ( identifier , identifier ))) != (call_expression "SBORROW4(iVar2 - iVar1,(uint)(uVar4 < uVar3))" identifier (argument_list "(iVar2 - iVar1,(uint)(uVar4 < uVar3))" ( (binary_expression "iVar2 - iVar1" identifier - identifier) , (call_expression "(uint)(uVar4 < uVar3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < uVar3)" ( (binary_expression "uVar4 < uVar3" identifier < identifier) ))) )))) )) == (binary_expression "(int)((iVar2 - iVar1) - (uint)(uVar4 < uVar3)) < 0" (cast_expression "(int)((iVar2 - iVar1) - (uint)(uVar4 < uVar3))" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((iVar2 - iVar1) - (uint)(uVar4 < uVar3))" ( (binary_expression "(iVar2 - iVar1) - (uint)(uVar4 < uVar3)" (parenthesized_expression "(iVar2 - iVar1)" ( (binary_expression "iVar2 - iVar1" identifier - identifier) )) - (call_expression "(uint)(uVar4 < uVar3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < uVar3)" ( (binary_expression "uVar4 < uVar3" identifier < identifier) )))) ))) < number_literal)) )) (compound_statement "{\n    if (uVar4 == uVar3 && iVar1 == iVar2) {\n      uVar4 = FUN_00014f20();\n      return uVar4;\n    }\n    uVar4 = (uint)((SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))) !=\n                  (int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0);\n  }" { (if_statement "if (uVar4 == uVar3 && iVar1 == iVar2) {\n      uVar4 = FUN_00014f20();\n      return uVar4;\n    }" if (parenthesized_expression "(uVar4 == uVar3 && iVar1 == iVar2)" ( (binary_expression "uVar4 == uVar3 && iVar1 == iVar2" (binary_expression "uVar4 == uVar3" identifier == identifier) && (binary_expression "iVar1 == iVar2" identifier == identifier)) )) (compound_statement "{\n      uVar4 = FUN_00014f20();\n      return uVar4;\n    }" { (expression_statement "uVar4 = FUN_00014f20();" (assignment_expression "uVar4 = FUN_00014f20()" identifier = (call_expression "FUN_00014f20()" identifier (argument_list "()" ( )))) ;) (return_statement "return uVar4;" return identifier ;) })) (expression_statement "uVar4 = (uint)((SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))) !=\n                  (int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0);" (assignment_expression "uVar4 = (uint)((SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))) !=\n                  (int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0)" identifier = (call_expression "(uint)((SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))) !=\n                  (int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))) !=\n                  (int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0)" ( (binary_expression "(SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))) !=\n                  (int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0" (parenthesized_expression "(SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4)))" ( (binary_expression "SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))" (call_expression "SBORROW4(iVar1,iVar2)" identifier (argument_list "(iVar1,iVar2)" ( identifier , identifier ))) != (call_expression "SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))" identifier (argument_list "(iVar1 - iVar2,(uint)(uVar3 < uVar4))" ( (binary_expression "iVar1 - iVar2" identifier - identifier) , (call_expression "(uint)(uVar3 < uVar4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar3 < uVar4)" ( (binary_expression "uVar3 < uVar4" identifier < identifier) ))) )))) )) != (binary_expression "(int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0" (cast_expression "(int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4))" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((iVar1 - iVar2) - (uint)(uVar3 < uVar4))" ( (binary_expression "(iVar1 - iVar2) - (uint)(uVar3 < uVar4)" (parenthesized_expression "(iVar1 - iVar2)" ( (binary_expression "iVar1 - iVar2" identifier - identifier) )) - (call_expression "(uint)(uVar3 < uVar4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar3 < uVar4)" ( (binary_expression "uVar3 < uVar4" identifier < identifier) )))) ))) < number_literal)) )))) ;) }) (else_clause "else {\n    uVar4 = 0xffffffff;\n  }" else (compound_statement "{\n    uVar4 = 0xffffffff;\n  }" { (expression_statement "uVar4 = 0xffffffff;" (assignment_expression "uVar4 = 0xffffffff" identifier = number_literal) ;) }))) (return_statement "return uVar4;" return identifier ;) })))
(translation_unit "/* WARNING: Unknown calling convention */\n\nint rev_xstrcoll_size(V a,V b)\n\n{\n  int iVar1;\n  uint uVar2;\n  uint uVar3;\n  int iVar4;\n  \n  uVar3 = *(uint *)((int)a + 0x38);\n  iVar4 = *(int *)((int)b + 0x3c);\n  iVar1 = *(int *)((int)a + 0x3c);\n  uVar2 = *(uint *)((int)b + 0x38);\n  if ((SBORROW4(iVar1,iVar4) != SBORROW4(iVar1 - iVar4,(uint)(uVar3 < uVar2))) ==\n      (int)((iVar1 - iVar4) - (uint)(uVar3 < uVar2)) < 0) {\n    if (uVar3 == uVar2 && iVar4 == iVar1) {\n                    /* WARNING: Load size is inaccurate */\n                    /* WARNING: Load size is inaccurate */\n      iVar4 = xstrcoll(*b,*a);\n      return iVar4;\n    }\n    uVar3 = (uint)((SBORROW4(iVar4,iVar1) != SBORROW4(iVar4 - iVar1,(uint)(uVar2 < uVar3))) !=\n                  (int)((iVar4 - iVar1) - (uint)(uVar2 < uVar3)) < 0);\n  }\n  else {\n    uVar3 = 0xffffffff;\n  }\n  return uVar3;\n}\n\n" comment (function_definition "int rev_xstrcoll_size(V a,V b)\n\n{\n  int iVar1;\n  uint uVar2;\n  uint uVar3;\n  int iVar4;\n  \n  uVar3 = *(uint *)((int)a + 0x38);\n  iVar4 = *(int *)((int)b + 0x3c);\n  iVar1 = *(int *)((int)a + 0x3c);\n  uVar2 = *(uint *)((int)b + 0x38);\n  if ((SBORROW4(iVar1,iVar4) != SBORROW4(iVar1 - iVar4,(uint)(uVar3 < uVar2))) ==\n      (int)((iVar1 - iVar4) - (uint)(uVar3 < uVar2)) < 0) {\n    if (uVar3 == uVar2 && iVar4 == iVar1) {\n                    /* WARNING: Load size is inaccurate */\n                    /* WARNING: Load size is inaccurate */\n      iVar4 = xstrcoll(*b,*a);\n      return iVar4;\n    }\n    uVar3 = (uint)((SBORROW4(iVar4,iVar1) != SBORROW4(iVar4 - iVar1,(uint)(uVar2 < uVar3))) !=\n                  (int)((iVar4 - iVar1) - (uint)(uVar2 < uVar3)) < 0);\n  }\n  else {\n    uVar3 = 0xffffffff;\n  }\n  return uVar3;\n}" primitive_type (function_declarator "rev_xstrcoll_size(V a,V b)" identifier (parameter_list "(V a,V b)" ( (parameter_declaration "V a" type_identifier identifier) , (parameter_declaration "V b" type_identifier identifier) ))) (compound_statement "{\n  int iVar1;\n  uint uVar2;\n  uint uVar3;\n  int iVar4;\n  \n  uVar3 = *(uint *)((int)a + 0x38);\n  iVar4 = *(int *)((int)b + 0x3c);\n  iVar1 = *(int *)((int)a + 0x3c);\n  uVar2 = *(uint *)((int)b + 0x38);\n  if ((SBORROW4(iVar1,iVar4) != SBORROW4(iVar1 - iVar4,(uint)(uVar3 < uVar2))) ==\n      (int)((iVar1 - iVar4) - (uint)(uVar3 < uVar2)) < 0) {\n    if (uVar3 == uVar2 && iVar4 == iVar1) {\n                    /* WARNING: Load size is inaccurate */\n                    /* WARNING: Load size is inaccurate */\n      iVar4 = xstrcoll(*b,*a);\n      return iVar4;\n    }\n    uVar3 = (uint)((SBORROW4(iVar4,iVar1) != SBORROW4(iVar4 - iVar1,(uint)(uVar2 < uVar3))) !=\n                  (int)((iVar4 - iVar1) - (uint)(uVar2 < uVar3)) < 0);\n  }\n  else {\n    uVar3 = 0xffffffff;\n  }\n  return uVar3;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (expression_statement "uVar3 = *(uint *)((int)a + 0x38);" (assignment_expression "uVar3 = *(uint *)((int)a + 0x38)" identifier = (pointer_expression "*(uint *)((int)a + 0x38)" * (cast_expression "(uint *)((int)a + 0x38)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)a + 0x38)" ( (binary_expression "(int)a + 0x38" (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;) (expression_statement "iVar4 = *(int *)((int)b + 0x3c);" (assignment_expression "iVar4 = *(int *)((int)b + 0x3c)" identifier = (pointer_expression "*(int *)((int)b + 0x3c)" * (cast_expression "(int *)((int)b + 0x3c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)b + 0x3c)" ( (binary_expression "(int)b + 0x3c" (cast_expression "(int)b" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;) (expression_statement "iVar1 = *(int *)((int)a + 0x3c);" (assignment_expression "iVar1 = *(int *)((int)a + 0x3c)" identifier = (pointer_expression "*(int *)((int)a + 0x3c)" * (cast_expression "(int *)((int)a + 0x3c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)a + 0x3c)" ( (binary_expression "(int)a + 0x3c" (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;) (expression_statement "uVar2 = *(uint *)((int)b + 0x38);" (assignment_expression "uVar2 = *(uint *)((int)b + 0x38)" identifier = (pointer_expression "*(uint *)((int)b + 0x38)" * (cast_expression "(uint *)((int)b + 0x38)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)b + 0x38)" ( (binary_expression "(int)b + 0x38" (cast_expression "(int)b" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;) (if_statement "if ((SBORROW4(iVar1,iVar4) != SBORROW4(iVar1 - iVar4,(uint)(uVar3 < uVar2))) ==\n      (int)((iVar1 - iVar4) - (uint)(uVar3 < uVar2)) < 0) {\n    if (uVar3 == uVar2 && iVar4 == iVar1) {\n                    /* WARNING: Load size is inaccurate */\n                    /* WARNING: Load size is inaccurate */\n      iVar4 = xstrcoll(*b,*a);\n      return iVar4;\n    }\n    uVar3 = (uint)((SBORROW4(iVar4,iVar1) != SBORROW4(iVar4 - iVar1,(uint)(uVar2 < uVar3))) !=\n                  (int)((iVar4 - iVar1) - (uint)(uVar2 < uVar3)) < 0);\n  }\n  else {\n    uVar3 = 0xffffffff;\n  }" if (parenthesized_expression "((SBORROW4(iVar1,iVar4) != SBORROW4(iVar1 - iVar4,(uint)(uVar3 < uVar2))) ==\n      (int)((iVar1 - iVar4) - (uint)(uVar3 < uVar2)) < 0)" ( (binary_expression "(SBORROW4(iVar1,iVar4) != SBORROW4(iVar1 - iVar4,(uint)(uVar3 < uVar2))) ==\n      (int)((iVar1 - iVar4) - (uint)(uVar3 < uVar2)) < 0" (parenthesized_expression "(SBORROW4(iVar1,iVar4) != SBORROW4(iVar1 - iVar4,(uint)(uVar3 < uVar2)))" ( (binary_expression "SBORROW4(iVar1,iVar4) != SBORROW4(iVar1 - iVar4,(uint)(uVar3 < uVar2))" (call_expression "SBORROW4(iVar1,iVar4)" identifier (argument_list "(iVar1,iVar4)" ( identifier , identifier ))) != (call_expression "SBORROW4(iVar1 - iVar4,(uint)(uVar3 < uVar2))" identifier (argument_list "(iVar1 - iVar4,(uint)(uVar3 < uVar2))" ( (binary_expression "iVar1 - iVar4" identifier - identifier) , (call_expression "(uint)(uVar3 < uVar2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar3 < uVar2)" ( (binary_expression "uVar3 < uVar2" identifier < identifier) ))) )))) )) == (binary_expression "(int)((iVar1 - iVar4) - (uint)(uVar3 < uVar2)) < 0" (cast_expression "(int)((iVar1 - iVar4) - (uint)(uVar3 < uVar2))" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((iVar1 - iVar4) - (uint)(uVar3 < uVar2))" ( (binary_expression "(iVar1 - iVar4) - (uint)(uVar3 < uVar2)" (parenthesized_expression "(iVar1 - iVar4)" ( (binary_expression "iVar1 - iVar4" identifier - identifier) )) - (call_expression "(uint)(uVar3 < uVar2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar3 < uVar2)" ( (binary_expression "uVar3 < uVar2" identifier < identifier) )))) ))) < number_literal)) )) (compound_statement "{\n    if (uVar3 == uVar2 && iVar4 == iVar1) {\n                    /* WARNING: Load size is inaccurate */\n                    /* WARNING: Load size is inaccurate */\n      iVar4 = xstrcoll(*b,*a);\n      return iVar4;\n    }\n    uVar3 = (uint)((SBORROW4(iVar4,iVar1) != SBORROW4(iVar4 - iVar1,(uint)(uVar2 < uVar3))) !=\n                  (int)((iVar4 - iVar1) - (uint)(uVar2 < uVar3)) < 0);\n  }" { (if_statement "if (uVar3 == uVar2 && iVar4 == iVar1) {\n                    /* WARNING: Load size is inaccurate */\n                    /* WARNING: Load size is inaccurate */\n      iVar4 = xstrcoll(*b,*a);\n      return iVar4;\n    }" if (parenthesized_expression "(uVar3 == uVar2 && iVar4 == iVar1)" ( (binary_expression "uVar3 == uVar2 && iVar4 == iVar1" (binary_expression "uVar3 == uVar2" identifier == identifier) && (binary_expression "iVar4 == iVar1" identifier == identifier)) )) (compound_statement "{\n                    /* WARNING: Load size is inaccurate */\n                    /* WARNING: Load size is inaccurate */\n      iVar4 = xstrcoll(*b,*a);\n      return iVar4;\n    }" { comment comment (expression_statement "iVar4 = xstrcoll(*b,*a);" (assignment_expression "iVar4 = xstrcoll(*b,*a)" identifier = (call_expression "xstrcoll(*b,*a)" identifier (argument_list "(*b,*a)" ( (pointer_expression "*b" * identifier) , (pointer_expression "*a" * identifier) )))) ;) (return_statement "return iVar4;" return identifier ;) })) (expression_statement "uVar3 = (uint)((SBORROW4(iVar4,iVar1) != SBORROW4(iVar4 - iVar1,(uint)(uVar2 < uVar3))) !=\n                  (int)((iVar4 - iVar1) - (uint)(uVar2 < uVar3)) < 0);" (assignment_expression "uVar3 = (uint)((SBORROW4(iVar4,iVar1) != SBORROW4(iVar4 - iVar1,(uint)(uVar2 < uVar3))) !=\n                  (int)((iVar4 - iVar1) - (uint)(uVar2 < uVar3)) < 0)" identifier = (call_expression "(uint)((SBORROW4(iVar4,iVar1) != SBORROW4(iVar4 - iVar1,(uint)(uVar2 < uVar3))) !=\n                  (int)((iVar4 - iVar1) - (uint)(uVar2 < uVar3)) < 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((SBORROW4(iVar4,iVar1) != SBORROW4(iVar4 - iVar1,(uint)(uVar2 < uVar3))) !=\n                  (int)((iVar4 - iVar1) - (uint)(uVar2 < uVar3)) < 0)" ( (binary_expression "(SBORROW4(iVar4,iVar1) != SBORROW4(iVar4 - iVar1,(uint)(uVar2 < uVar3))) !=\n                  (int)((iVar4 - iVar1) - (uint)(uVar2 < uVar3)) < 0" (parenthesized_expression "(SBORROW4(iVar4,iVar1) != SBORROW4(iVar4 - iVar1,(uint)(uVar2 < uVar3)))" ( (binary_expression "SBORROW4(iVar4,iVar1) != SBORROW4(iVar4 - iVar1,(uint)(uVar2 < uVar3))" (call_expression "SBORROW4(iVar4,iVar1)" identifier (argument_list "(iVar4,iVar1)" ( identifier , identifier ))) != (call_expression "SBORROW4(iVar4 - iVar1,(uint)(uVar2 < uVar3))" identifier (argument_list "(iVar4 - iVar1,(uint)(uVar2 < uVar3))" ( (binary_expression "iVar4 - iVar1" identifier - identifier) , (call_expression "(uint)(uVar2 < uVar3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar2 < uVar3)" ( (binary_expression "uVar2 < uVar3" identifier < identifier) ))) )))) )) != (binary_expression "(int)((iVar4 - iVar1) - (uint)(uVar2 < uVar3)) < 0" (cast_expression "(int)((iVar4 - iVar1) - (uint)(uVar2 < uVar3))" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((iVar4 - iVar1) - (uint)(uVar2 < uVar3))" ( (binary_expression "(iVar4 - iVar1) - (uint)(uVar2 < uVar3)" (parenthesized_expression "(iVar4 - iVar1)" ( (binary_expression "iVar4 - iVar1" identifier - identifier) )) - (call_expression "(uint)(uVar2 < uVar3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar2 < uVar3)" ( (binary_expression "uVar2 < uVar3" identifier < identifier) )))) ))) < number_literal)) )))) ;) }) (else_clause "else {\n    uVar3 = 0xffffffff;\n  }" else (compound_statement "{\n    uVar3 = 0xffffffff;\n  }" { (expression_statement "uVar3 = 0xffffffff;" (assignment_expression "uVar3 = 0xffffffff" identifier = number_literal) ;) }))) (return_statement "return uVar3;" return identifier ;) })))
(translation_unit "uint FUN_00017f90(int param_1,int param_2)\n\n{\n  int iVar1;\n  int iVar2;\n  uint uVar3;\n  uint uVar4;\n  \n  uVar4 = *(uint *)(param_1 + 0x38);\n  iVar1 = *(int *)(param_2 + 0x3c);\n  iVar2 = *(int *)(param_1 + 0x3c);\n  uVar3 = *(uint *)(param_2 + 0x38);\n  if ((SBORROW4(iVar2,iVar1) != SBORROW4(iVar2 - iVar1,(uint)(uVar4 < uVar3))) ==\n      (int)((iVar2 - iVar1) - (uint)(uVar4 < uVar3)) < 0) {\n    if (uVar4 == uVar3 && iVar1 == iVar2) {\n      uVar4 = FUN_00014f20();\n      return uVar4;\n    }\n    uVar4 = (uint)((SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))) !=\n                  (int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0);\n  }\n  else {\n    uVar4 = 0xffffffff;\n  }\n  return uVar4;\n}\n\n" (function_definition "uint FUN_00017f90(int param_1,int param_2)\n\n{\n  int iVar1;\n  int iVar2;\n  uint uVar3;\n  uint uVar4;\n  \n  uVar4 = *(uint *)(param_1 + 0x38);\n  iVar1 = *(int *)(param_2 + 0x3c);\n  iVar2 = *(int *)(param_1 + 0x3c);\n  uVar3 = *(uint *)(param_2 + 0x38);\n  if ((SBORROW4(iVar2,iVar1) != SBORROW4(iVar2 - iVar1,(uint)(uVar4 < uVar3))) ==\n      (int)((iVar2 - iVar1) - (uint)(uVar4 < uVar3)) < 0) {\n    if (uVar4 == uVar3 && iVar1 == iVar2) {\n      uVar4 = FUN_00014f20();\n      return uVar4;\n    }\n    uVar4 = (uint)((SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))) !=\n                  (int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0);\n  }\n  else {\n    uVar4 = 0xffffffff;\n  }\n  return uVar4;\n}" type_identifier (function_declarator "FUN_00017f90(int param_1,int param_2)" identifier (parameter_list "(int param_1,int param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  uint uVar3;\n  uint uVar4;\n  \n  uVar4 = *(uint *)(param_1 + 0x38);\n  iVar1 = *(int *)(param_2 + 0x3c);\n  iVar2 = *(int *)(param_1 + 0x3c);\n  uVar3 = *(uint *)(param_2 + 0x38);\n  if ((SBORROW4(iVar2,iVar1) != SBORROW4(iVar2 - iVar1,(uint)(uVar4 < uVar3))) ==\n      (int)((iVar2 - iVar1) - (uint)(uVar4 < uVar3)) < 0) {\n    if (uVar4 == uVar3 && iVar1 == iVar2) {\n      uVar4 = FUN_00014f20();\n      return uVar4;\n    }\n    uVar4 = (uint)((SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))) !=\n                  (int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0);\n  }\n  else {\n    uVar4 = 0xffffffff;\n  }\n  return uVar4;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (expression_statement "uVar4 = *(uint *)(param_1 + 0x38);" (assignment_expression "uVar4 = *(uint *)(param_1 + 0x38)" identifier = (pointer_expression "*(uint *)(param_1 + 0x38)" * (cast_expression "(uint *)(param_1 + 0x38)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x38)" ( (binary_expression "param_1 + 0x38" identifier + number_literal) ))))) ;) (expression_statement "iVar1 = *(int *)(param_2 + 0x3c);" (assignment_expression "iVar1 = *(int *)(param_2 + 0x3c)" identifier = (pointer_expression "*(int *)(param_2 + 0x3c)" * (cast_expression "(int *)(param_2 + 0x3c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x3c)" ( (binary_expression "param_2 + 0x3c" identifier + number_literal) ))))) ;) (expression_statement "iVar2 = *(int *)(param_1 + 0x3c);" (assignment_expression "iVar2 = *(int *)(param_1 + 0x3c)" identifier = (pointer_expression "*(int *)(param_1 + 0x3c)" * (cast_expression "(int *)(param_1 + 0x3c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x3c)" ( (binary_expression "param_1 + 0x3c" identifier + number_literal) ))))) ;) (expression_statement "uVar3 = *(uint *)(param_2 + 0x38);" (assignment_expression "uVar3 = *(uint *)(param_2 + 0x38)" identifier = (pointer_expression "*(uint *)(param_2 + 0x38)" * (cast_expression "(uint *)(param_2 + 0x38)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x38)" ( (binary_expression "param_2 + 0x38" identifier + number_literal) ))))) ;) (if_statement "if ((SBORROW4(iVar2,iVar1) != SBORROW4(iVar2 - iVar1,(uint)(uVar4 < uVar3))) ==\n      (int)((iVar2 - iVar1) - (uint)(uVar4 < uVar3)) < 0) {\n    if (uVar4 == uVar3 && iVar1 == iVar2) {\n      uVar4 = FUN_00014f20();\n      return uVar4;\n    }\n    uVar4 = (uint)((SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))) !=\n                  (int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0);\n  }\n  else {\n    uVar4 = 0xffffffff;\n  }" if (parenthesized_expression "((SBORROW4(iVar2,iVar1) != SBORROW4(iVar2 - iVar1,(uint)(uVar4 < uVar3))) ==\n      (int)((iVar2 - iVar1) - (uint)(uVar4 < uVar3)) < 0)" ( (binary_expression "(SBORROW4(iVar2,iVar1) != SBORROW4(iVar2 - iVar1,(uint)(uVar4 < uVar3))) ==\n      (int)((iVar2 - iVar1) - (uint)(uVar4 < uVar3)) < 0" (parenthesized_expression "(SBORROW4(iVar2,iVar1) != SBORROW4(iVar2 - iVar1,(uint)(uVar4 < uVar3)))" ( (binary_expression "SBORROW4(iVar2,iVar1) != SBORROW4(iVar2 - iVar1,(uint)(uVar4 < uVar3))" (call_expression "SBORROW4(iVar2,iVar1)" identifier (argument_list "(iVar2,iVar1)" ( identifier , identifier ))) != (call_expression "SBORROW4(iVar2 - iVar1,(uint)(uVar4 < uVar3))" identifier (argument_list "(iVar2 - iVar1,(uint)(uVar4 < uVar3))" ( (binary_expression "iVar2 - iVar1" identifier - identifier) , (call_expression "(uint)(uVar4 < uVar3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < uVar3)" ( (binary_expression "uVar4 < uVar3" identifier < identifier) ))) )))) )) == (binary_expression "(int)((iVar2 - iVar1) - (uint)(uVar4 < uVar3)) < 0" (cast_expression "(int)((iVar2 - iVar1) - (uint)(uVar4 < uVar3))" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((iVar2 - iVar1) - (uint)(uVar4 < uVar3))" ( (binary_expression "(iVar2 - iVar1) - (uint)(uVar4 < uVar3)" (parenthesized_expression "(iVar2 - iVar1)" ( (binary_expression "iVar2 - iVar1" identifier - identifier) )) - (call_expression "(uint)(uVar4 < uVar3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < uVar3)" ( (binary_expression "uVar4 < uVar3" identifier < identifier) )))) ))) < number_literal)) )) (compound_statement "{\n    if (uVar4 == uVar3 && iVar1 == iVar2) {\n      uVar4 = FUN_00014f20();\n      return uVar4;\n    }\n    uVar4 = (uint)((SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))) !=\n                  (int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0);\n  }" { (if_statement "if (uVar4 == uVar3 && iVar1 == iVar2) {\n      uVar4 = FUN_00014f20();\n      return uVar4;\n    }" if (parenthesized_expression "(uVar4 == uVar3 && iVar1 == iVar2)" ( (binary_expression "uVar4 == uVar3 && iVar1 == iVar2" (binary_expression "uVar4 == uVar3" identifier == identifier) && (binary_expression "iVar1 == iVar2" identifier == identifier)) )) (compound_statement "{\n      uVar4 = FUN_00014f20();\n      return uVar4;\n    }" { (expression_statement "uVar4 = FUN_00014f20();" (assignment_expression "uVar4 = FUN_00014f20()" identifier = (call_expression "FUN_00014f20()" identifier (argument_list "()" ( )))) ;) (return_statement "return uVar4;" return identifier ;) })) (expression_statement "uVar4 = (uint)((SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))) !=\n                  (int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0);" (assignment_expression "uVar4 = (uint)((SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))) !=\n                  (int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0)" identifier = (call_expression "(uint)((SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))) !=\n                  (int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))) !=\n                  (int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0)" ( (binary_expression "(SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))) !=\n                  (int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0" (parenthesized_expression "(SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4)))" ( (binary_expression "SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))" (call_expression "SBORROW4(iVar1,iVar2)" identifier (argument_list "(iVar1,iVar2)" ( identifier , identifier ))) != (call_expression "SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))" identifier (argument_list "(iVar1 - iVar2,(uint)(uVar3 < uVar4))" ( (binary_expression "iVar1 - iVar2" identifier - identifier) , (call_expression "(uint)(uVar3 < uVar4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar3 < uVar4)" ( (binary_expression "uVar3 < uVar4" identifier < identifier) ))) )))) )) != (binary_expression "(int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0" (cast_expression "(int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4))" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((iVar1 - iVar2) - (uint)(uVar3 < uVar4))" ( (binary_expression "(iVar1 - iVar2) - (uint)(uVar3 < uVar4)" (parenthesized_expression "(iVar1 - iVar2)" ( (binary_expression "iVar1 - iVar2" identifier - identifier) )) - (call_expression "(uint)(uVar3 < uVar4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar3 < uVar4)" ( (binary_expression "uVar3 < uVar4" identifier < identifier) )))) ))) < number_literal)) )))) ;) }) (else_clause "else {\n    uVar4 = 0xffffffff;\n  }" else (compound_statement "{\n    uVar4 = 0xffffffff;\n  }" { (expression_statement "uVar4 = 0xffffffff;" (assignment_expression "uVar4 = 0xffffffff" identifier = number_literal) ;) }))) (return_statement "return uVar4;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (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 = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (call_expression IDENT (argument_list ( IDENT , IDENT ))) != (call_expression IDENT (argument_list ( (binary_expression IDENT - IDENT) , (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) ))) )))) )) == (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) )))) ))) < LIT)) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT == IDENT) && (binary_expression IDENT == IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression (call_expression IDENT (argument_list ( IDENT , IDENT ))) != (call_expression IDENT (argument_list ( (binary_expression IDENT - IDENT) , (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) ))) )))) )) != (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) )))) ))) < LIT)) )))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }))) (return_statement return IDENT ;) })))
(function_definition "uint FUN_00017f90(int param_1,int param_2)\n\n{\n  int iVar1;\n  int iVar2;\n  uint uVar3;\n  uint uVar4;\n  \n  uVar4 = *(uint *)(param_1 + 0x38);\n  iVar1 = *(int *)(param_2 + 0x3c);\n  iVar2 = *(int *)(param_1 + 0x3c);\n  uVar3 = *(uint *)(param_2 + 0x38);\n  if ((SBORROW4(iVar2,iVar1) != SBORROW4(iVar2 - iVar1,(uint)(uVar4 < uVar3))) ==\n      (int)((iVar2 - iVar1) - (uint)(uVar4 < uVar3)) < 0) {\n    if (uVar4 == uVar3 && iVar1 == iVar2) {\n      uVar4 = FUN_00014f20();\n      return uVar4;\n    }\n    uVar4 = (uint)((SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))) !=\n                  (int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0);\n  }\n  else {\n    uVar4 = 0xffffffff;\n  }\n  return uVar4;\n}" (type_identifier "uint") (function_declarator "FUN_00017f90(int param_1,int param_2)" (identifier "FUN_00017f90") (parameter_list "(int param_1,int param_2)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) () ")"))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  uint uVar3;\n  uint uVar4;\n  \n  uVar4 = *(uint *)(param_1 + 0x38);\n  iVar1 = *(int *)(param_2 + 0x3c);\n  iVar2 = *(int *)(param_1 + 0x3c);\n  uVar3 = *(uint *)(param_2 + 0x38);\n  if ((SBORROW4(iVar2,iVar1) != SBORROW4(iVar2 - iVar1,(uint)(uVar4 < uVar3))) ==\n      (int)((iVar2 - iVar1) - (uint)(uVar4 < uVar3)) < 0) {\n    if (uVar4 == uVar3 && iVar1 == iVar2) {\n      uVar4 = FUN_00014f20();\n      return uVar4;\n    }\n    uVar4 = (uint)((SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))) !=\n                  (int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0);\n  }\n  else {\n    uVar4 = 0xffffffff;\n  }\n  return uVar4;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (expression_statement "uVar4 = *(uint *)(param_1 + 0x38);" (assignment_expression "uVar4 = *(uint *)(param_1 + 0x38)" (identifier "uVar4") (= "=") (pointer_expression "*(uint *)(param_1 + 0x38)" (* "*") (cast_expression "(uint *)(param_1 + 0x38)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x38)" (( "(") (binary_expression "param_1 + 0x38" (identifier "param_1") (+ "+") (number_literal "0x38")) () ")"))))) (; ";")) (expression_statement "iVar1 = *(int *)(param_2 + 0x3c);" (assignment_expression "iVar1 = *(int *)(param_2 + 0x3c)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(param_2 + 0x3c)" (* "*") (cast_expression "(int *)(param_2 + 0x3c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x3c)" (( "(") (binary_expression "param_2 + 0x3c" (identifier "param_2") (+ "+") (number_literal "0x3c")) () ")"))))) (; ";")) (expression_statement "iVar2 = *(int *)(param_1 + 0x3c);" (assignment_expression "iVar2 = *(int *)(param_1 + 0x3c)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(param_1 + 0x3c)" (* "*") (cast_expression "(int *)(param_1 + 0x3c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x3c)" (( "(") (binary_expression "param_1 + 0x3c" (identifier "param_1") (+ "+") (number_literal "0x3c")) () ")"))))) (; ";")) (expression_statement "uVar3 = *(uint *)(param_2 + 0x38);" (assignment_expression "uVar3 = *(uint *)(param_2 + 0x38)" (identifier "uVar3") (= "=") (pointer_expression "*(uint *)(param_2 + 0x38)" (* "*") (cast_expression "(uint *)(param_2 + 0x38)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x38)" (( "(") (binary_expression "param_2 + 0x38" (identifier "param_2") (+ "+") (number_literal "0x38")) () ")"))))) (; ";")) (if_statement "if ((SBORROW4(iVar2,iVar1) != SBORROW4(iVar2 - iVar1,(uint)(uVar4 < uVar3))) ==\n      (int)((iVar2 - iVar1) - (uint)(uVar4 < uVar3)) < 0) {\n    if (uVar4 == uVar3 && iVar1 == iVar2) {\n      uVar4 = FUN_00014f20();\n      return uVar4;\n    }\n    uVar4 = (uint)((SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))) !=\n                  (int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0);\n  }\n  else {\n    uVar4 = 0xffffffff;\n  }" (if "if") (parenthesized_expression "((SBORROW4(iVar2,iVar1) != SBORROW4(iVar2 - iVar1,(uint)(uVar4 < uVar3))) ==\n      (int)((iVar2 - iVar1) - (uint)(uVar4 < uVar3)) < 0)" (( "(") (binary_expression "(SBORROW4(iVar2,iVar1) != SBORROW4(iVar2 - iVar1,(uint)(uVar4 < uVar3))) ==\n      (int)((iVar2 - iVar1) - (uint)(uVar4 < uVar3)) < 0" (parenthesized_expression "(SBORROW4(iVar2,iVar1) != SBORROW4(iVar2 - iVar1,(uint)(uVar4 < uVar3)))" (( "(") (binary_expression "SBORROW4(iVar2,iVar1) != SBORROW4(iVar2 - iVar1,(uint)(uVar4 < uVar3))" (call_expression "SBORROW4(iVar2,iVar1)" (identifier "SBORROW4") (argument_list "(iVar2,iVar1)" (( "(") (identifier "iVar2") (, ",") (identifier "iVar1") () ")"))) (!= "!=") (call_expression "SBORROW4(iVar2 - iVar1,(uint)(uVar4 < uVar3))" (identifier "SBORROW4") (argument_list "(iVar2 - iVar1,(uint)(uVar4 < uVar3))" (( "(") (binary_expression "iVar2 - iVar1" (identifier "iVar2") (- "-") (identifier "iVar1")) (, ",") (call_expression "(uint)(uVar4 < uVar3)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar4 < uVar3)" (( "(") (binary_expression "uVar4 < uVar3" (identifier "uVar4") (< "<") (identifier "uVar3")) () ")"))) () ")")))) () ")")) (== "==") (binary_expression "(int)((iVar2 - iVar1) - (uint)(uVar4 < uVar3)) < 0" (cast_expression "(int)((iVar2 - iVar1) - (uint)(uVar4 < uVar3))" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((iVar2 - iVar1) - (uint)(uVar4 < uVar3))" (( "(") (binary_expression "(iVar2 - iVar1) - (uint)(uVar4 < uVar3)" (parenthesized_expression "(iVar2 - iVar1)" (( "(") (binary_expression "iVar2 - iVar1" (identifier "iVar2") (- "-") (identifier "iVar1")) () ")")) (- "-") (call_expression "(uint)(uVar4 < uVar3)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar4 < uVar3)" (( "(") (binary_expression "uVar4 < uVar3" (identifier "uVar4") (< "<") (identifier "uVar3")) () ")")))) () ")"))) (< "<") (number_literal "0"))) () ")")) (compound_statement "{\n    if (uVar4 == uVar3 && iVar1 == iVar2) {\n      uVar4 = FUN_00014f20();\n      return uVar4;\n    }\n    uVar4 = (uint)((SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))) !=\n                  (int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0);\n  }" ({ "{") (if_statement "if (uVar4 == uVar3 && iVar1 == iVar2) {\n      uVar4 = FUN_00014f20();\n      return uVar4;\n    }" (if "if") (parenthesized_expression "(uVar4 == uVar3 && iVar1 == iVar2)" (( "(") (binary_expression "uVar4 == uVar3 && iVar1 == iVar2" (binary_expression "uVar4 == uVar3" (identifier "uVar4") (== "==") (identifier "uVar3")) (&& "&&") (binary_expression "iVar1 == iVar2" (identifier "iVar1") (== "==") (identifier "iVar2"))) () ")")) (compound_statement "{\n      uVar4 = FUN_00014f20();\n      return uVar4;\n    }" ({ "{") (expression_statement "uVar4 = FUN_00014f20();" (assignment_expression "uVar4 = FUN_00014f20()" (identifier "uVar4") (= "=") (call_expression "FUN_00014f20()" (identifier "FUN_00014f20") (argument_list "()" (( "(") () ")")))) (; ";")) (return_statement "return uVar4;" (return "return") (identifier "uVar4") (; ";")) (} "}"))) (expression_statement "uVar4 = (uint)((SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))) !=\n                  (int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0);" (assignment_expression "uVar4 = (uint)((SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))) !=\n                  (int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0)" (identifier "uVar4") (= "=") (call_expression "(uint)((SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))) !=\n                  (int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))) !=\n                  (int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0)" (( "(") (binary_expression "(SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))) !=\n                  (int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0" (parenthesized_expression "(SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4)))" (( "(") (binary_expression "SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))" (call_expression "SBORROW4(iVar1,iVar2)" (identifier "SBORROW4") (argument_list "(iVar1,iVar2)" (( "(") (identifier "iVar1") (, ",") (identifier "iVar2") () ")"))) (!= "!=") (call_expression "SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))" (identifier "SBORROW4") (argument_list "(iVar1 - iVar2,(uint)(uVar3 < uVar4))" (( "(") (binary_expression "iVar1 - iVar2" (identifier "iVar1") (- "-") (identifier "iVar2")) (, ",") (call_expression "(uint)(uVar3 < uVar4)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar3 < uVar4)" (( "(") (binary_expression "uVar3 < uVar4" (identifier "uVar3") (< "<") (identifier "uVar4")) () ")"))) () ")")))) () ")")) (!= "!=") (binary_expression "(int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0" (cast_expression "(int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4))" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((iVar1 - iVar2) - (uint)(uVar3 < uVar4))" (( "(") (binary_expression "(iVar1 - iVar2) - (uint)(uVar3 < uVar4)" (parenthesized_expression "(iVar1 - iVar2)" (( "(") (binary_expression "iVar1 - iVar2" (identifier "iVar1") (- "-") (identifier "iVar2")) () ")")) (- "-") (call_expression "(uint)(uVar3 < uVar4)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar3 < uVar4)" (( "(") (binary_expression "uVar3 < uVar4" (identifier "uVar3") (< "<") (identifier "uVar4")) () ")")))) () ")"))) (< "<") (number_literal "0"))) () ")")))) (; ";")) (} "}")) (else_clause "else {\n    uVar4 = 0xffffffff;\n  }" (else "else") (compound_statement "{\n    uVar4 = 0xffffffff;\n  }" ({ "{") (expression_statement "uVar4 = 0xffffffff;" (assignment_expression "uVar4 = 0xffffffff" (identifier "uVar4") (= "=") (number_literal "0xffffffff")) (; ";")) (} "}")))) (return_statement "return uVar4;" (return "return") (identifier "uVar4") (; ";")) (} "}")))

/* WARNING: Unknown calling convention */

int function_1(type_1 a,type_1 b)

{
  int var_2;
  type_2 var_5;
  type_2 var_4;
  int var_3;
  
  var_4 = *(type_2 *)((int)a + 0x38);
  var_3 = *(int *)((int)b + 0x3c);
  var_2 = *(int *)((int)a + 0x3c);
  var_5 = *(type_2 *)((int)b + 0x38);
  if ((var_1(var_2,var_3) != var_1(var_2 - var_3,(type_2)(var_4 < var_5))) ==
      (int)((var_2 - var_3) - (type_2)(var_4 < var_5)) < 0) {
    if (var_4 == var_5 && var_3 == var_2) {
                    /* WARNING: Load size is inaccurate */
                    /* WARNING: Load size is inaccurate */
      var_3 = var_6(*b,*a);
      return var_3;
    }
    var_4 = (type_2)((var_1(var_3,var_2) != var_1(var_3 - var_2,(type_2)(var_5 < var_4))) !=
                  (int)((var_3 - var_2) - (type_2)(var_5 < var_4)) < 0);
  }
  else {
    var_4 = 0xffffffff;
  }
  return var_4;
}


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

uint MASKED(int param_1,int param_2)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  
  uVar4 = *(uint *)(param_1 + 0x38);
  iVar1 = *(int *)(param_2 + 0x3c);
  iVar2 = *(int *)(param_1 + 0x3c);
  uVar3 = *(uint *)(param_2 + 0x38);
  if ((SBORROW4(iVar2,iVar1) != SBORROW4(iVar2 - iVar1,(uint)(uVar4 < uVar3))) ==
      (int)((iVar2 - iVar1) - (uint)(uVar4 < uVar3)) < 0) {
    if (uVar4 == uVar3 && iVar1 == iVar2) {
      uVar4 = FUN_00014f20();
      return uVar4;
    }
    uVar4 = (uint)((SBORROW4(iVar1,iVar2) != SBORROW4(iVar1 - iVar2,(uint)(uVar3 < uVar4))) !=
                  (int)((iVar1 - iVar2) - (uint)(uVar3 < uVar4)) < 0);
  }
  else {
    uVar4 = 0xffffffff;
  }
  return uVar4;
}

