
/* WARNING: Removing unreachable block (ram,0x00025427) */

ulonglong __umoddi3(uint param_1,uint param_2,uint param_3,uint param_4)

{
  ulonglong uVar1;
  byte bVar2;
  byte bVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  bool bVar7;
  
  if (param_4 == 0) {
    if (param_2 < param_3) {
      uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);
    }
    else {
      if (param_3 == 0) {
        param_3 = 1 / 0;
      }
      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %
                    (ulonglong)param_3);
    }
    return (ulonglong)uVar4;
  }
  if (param_2 < param_4) {
    return CONCAT44(param_2,param_1);
  }
  uVar4 = 0x1f;
  if (param_4 != 0) {
    for (; param_4 >> uVar4 == 0; uVar4 = uVar4 - 1) {
    }
  }
  if ((uVar4 ^ 0x1f) == 0) {
    if ((param_4 < param_2) || (param_3 <= param_1)) {
      bVar7 = param_1 < param_3;
      param_1 = param_1 - param_3;
      param_2 = (param_2 - param_4) - (uint)bVar7;
    }
    return CONCAT44(param_2,param_1);
  }
  bVar2 = (byte)(uVar4 ^ 0x1f);
  bVar3 = 0x20 - bVar2;
  uVar4 = param_4 << (bVar2 & 0x1f) | param_3 >> (bVar3 & 0x1f);
  param_3 = param_3 << (bVar2 & 0x1f);
  uVar6 = param_1 << (bVar2 & 0x1f);
  uVar1 = CONCAT44(param_2 >> (bVar3 & 0x1f),param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f));
  iVar5 = (int)(uVar1 % (ulonglong)uVar4);
  uVar1 = (uVar1 / uVar4 & 0xffffffff) * (ulonglong)param_3;
  if (CONCAT44(iVar5,uVar6) < uVar1) {
    uVar1 = uVar1 - CONCAT44(uVar4,param_3);
  }
  uVar4 = (iVar5 - (int)(uVar1 >> 0x20)) - (uint)(uVar6 < (uint)uVar1);
  return CONCAT44(uVar4 >> (bVar2 & 0x1f),
                  uVar4 << (bVar3 & 0x1f) | uVar6 - (uint)uVar1 >> (bVar2 & 0x1f));
}



/* WARNING: Removing unreachable block (ram,0x00025427) */

ulonglong FUN_00025330(uint param_1,uint param_2,uint param_3,uint param_4)

{
  ulonglong uVar1;
  byte bVar2;
  byte bVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  bool bVar7;
  
  if (param_4 == 0) {
    if (param_2 < param_3) {
      uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);
    }
    else {
      if (param_3 == 0) {
        param_3 = 1 / 0;
      }
      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %
                    (ulonglong)param_3);
    }
    return (ulonglong)uVar4;
  }
  if (param_2 < param_4) {
    return CONCAT44(param_2,param_1);
  }
  uVar4 = 0x1f;
  if (param_4 != 0) {
    for (; param_4 >> uVar4 == 0; uVar4 = uVar4 - 1) {
    }
  }
  if ((uVar4 ^ 0x1f) == 0) {
    if ((param_4 < param_2) || (param_3 <= param_1)) {
      bVar7 = param_1 < param_3;
      param_1 = param_1 - param_3;
      param_2 = (param_2 - param_4) - (uint)bVar7;
    }
    return CONCAT44(param_2,param_1);
  }
  bVar2 = (byte)(uVar4 ^ 0x1f);
  bVar3 = 0x20 - bVar2;
  uVar4 = param_4 << (bVar2 & 0x1f) | param_3 >> (bVar3 & 0x1f);
  param_3 = param_3 << (bVar2 & 0x1f);
  uVar6 = param_1 << (bVar2 & 0x1f);
  uVar1 = CONCAT44(param_2 >> (bVar3 & 0x1f),param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f));
  iVar5 = (int)(uVar1 % (ulonglong)uVar4);
  uVar1 = (uVar1 / uVar4 & 0xffffffff) * (ulonglong)param_3;
  if (CONCAT44(iVar5,uVar6) < uVar1) {
    uVar1 = uVar1 - CONCAT44(uVar4,param_3);
  }
  uVar4 = (iVar5 - (int)(uVar1 >> 0x20)) - (uint)(uVar6 < (uint)uVar1);
  return CONCAT44(uVar4 >> (bVar2 & 0x1f),
                  uVar4 << (bVar3 & 0x1f) | uVar6 - (uint)uVar1 >> (bVar2 & 0x1f));
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
SUB ESP,0x1c
MOV EBX,dword ptr [ESP + 0x34]
MOV EAX,dword ptr [ESP + 0x3c]
MOV ESI,dword ptr [ESP + 0x30]
MOV EDI,dword ptr [ESP + 0x38]
MOV EDX,EBX
TEST EAX,EAX
JNZ 0x00025390
CMP EDI,EBX
JBE 0x00025368
MOV EAX,ESI
DIV EDI
MOV EAX,EDX
XOR EDX,EDX
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EBP,EDI
TEST EDI,EDI
JNZ 0x00025379
MOV EAX,0x1
XOR EDX,EDX
DIV EDI
MOV EBP,EAX
MOV EAX,EBX
XOR EDX,EDX
DIV EBP
MOV EAX,ESI
DIV EBP
MOV EAX,EDX
JMP 0x00025357
MOV ECX,ESI
CMP EAX,EBX
JBE 0x000253a0
MOV EAX,ESI
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
BSR EBP,EAX
XOR EBP,0x1f
JNZ 0x000253c8
CMP EAX,EBX
JC 0x00025460
CMP EDI,ESI
JBE 0x00025460
MOV EAX,ECX
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV ECX,EBP
MOV EDX,0x20
SUB EDX,EBP
SHL EAX,CL
MOV dword ptr [ESP + 0x8],EAX
MOV ECX,EDX
MOV EAX,EDI
SHR EAX,CL
MOV ECX,dword ptr [ESP + 0x8]
MOV dword ptr [ESP + 0x4],EDX
MOV EDX,dword ptr [ESP + 0x4]
OR ECX,EAX
MOV EAX,EBX
MOV dword ptr [ESP + 0x8],ECX
MOV ECX,EBP
SHL EDI,CL
MOV ECX,EDX
SHR EAX,CL
MOV ECX,EBP
MOV dword ptr [ESP + 0xc],EDI
SHL EBX,CL
MOV EDI,EAX
MOV ECX,EDX
MOV EAX,ESI
SHR EAX,CL
MOV ECX,EBP
MOV EDX,EDI
SHL ESI,CL
OR EAX,EBX
DIV dword ptr [ESP + 0x8]
MOV ECX,EDX
MOV EBX,ESI
MUL dword ptr [ESP + 0xc]
MOV ESI,EAX
MOV EDI,EDX
CMP ECX,EDX
JC 0x0002542b
JNZ 0x00025437
CMP EBX,EAX
JNC 0x00025437
SUB EAX,dword ptr [ESP + 0xc]
SBB EDX,dword ptr [ESP + 0x8]
MOV EDI,EDX
MOV ESI,EAX
MOV EDX,ECX
MOVZX ECX,byte ptr [ESP + 0x4]
SUB EBX,ESI
SBB EDX,EDI
MOV EAX,EDX
SHL EAX,CL
MOV ECX,EBP
SHR EBX,CL
SHR EDX,CL
OR EAX,EBX
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EDX,EBX
SUB ESI,EDI
SBB EDX,EAX
MOV ECX,ESI
MOV EAX,ECX
JMP 0x000253ba
(translation_unit "/* WARNING: Removing unreachable block (ram,0x00025427) */\n\nulonglong FUN_00025330(uint param_1,uint param_2,uint param_3,uint param_4)\n\n{\n  ulonglong uVar1;\n  byte bVar2;\n  byte bVar3;\n  uint uVar4;\n  int iVar5;\n  uint uVar6;\n  bool bVar7;\n  \n  if (param_4 == 0) {\n    if (param_2 < param_3) {\n      uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);\n    }\n    else {\n      if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }\n      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);\n    }\n    return (ulonglong)uVar4;\n  }\n  if (param_2 < param_4) {\n    return CONCAT44(param_2,param_1);\n  }\n  uVar4 = 0x1f;\n  if (param_4 != 0) {\n    for (; param_4 >> uVar4 == 0; uVar4 = uVar4 - 1) {\n    }\n  }\n  if ((uVar4 ^ 0x1f) == 0) {\n    if ((param_4 < param_2) || (param_3 <= param_1)) {\n      bVar7 = param_1 < param_3;\n      param_1 = param_1 - param_3;\n      param_2 = (param_2 - param_4) - (uint)bVar7;\n    }\n    return CONCAT44(param_2,param_1);\n  }\n  bVar2 = (byte)(uVar4 ^ 0x1f);\n  bVar3 = 0x20 - bVar2;\n  uVar4 = param_4 << (bVar2 & 0x1f) | param_3 >> (bVar3 & 0x1f);\n  param_3 = param_3 << (bVar2 & 0x1f);\n  uVar6 = param_1 << (bVar2 & 0x1f);\n  uVar1 = CONCAT44(param_2 >> (bVar3 & 0x1f),param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f));\n  iVar5 = (int)(uVar1 % (ulonglong)uVar4);\n  uVar1 = (uVar1 / uVar4 & 0xffffffff) * (ulonglong)param_3;\n  if (CONCAT44(iVar5,uVar6) < uVar1) {\n    uVar1 = uVar1 - CONCAT44(uVar4,param_3);\n  }\n  uVar4 = (iVar5 - (int)(uVar1 >> 0x20)) - (uint)(uVar6 < (uint)uVar1);\n  return CONCAT44(uVar4 >> (bVar2 & 0x1f),\n                  uVar4 << (bVar3 & 0x1f) | uVar6 - (uint)uVar1 >> (bVar2 & 0x1f));\n}\n\n" comment (function_definition "ulonglong FUN_00025330(uint param_1,uint param_2,uint param_3,uint param_4)\n\n{\n  ulonglong uVar1;\n  byte bVar2;\n  byte bVar3;\n  uint uVar4;\n  int iVar5;\n  uint uVar6;\n  bool bVar7;\n  \n  if (param_4 == 0) {\n    if (param_2 < param_3) {\n      uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);\n    }\n    else {\n      if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }\n      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);\n    }\n    return (ulonglong)uVar4;\n  }\n  if (param_2 < param_4) {\n    return CONCAT44(param_2,param_1);\n  }\n  uVar4 = 0x1f;\n  if (param_4 != 0) {\n    for (; param_4 >> uVar4 == 0; uVar4 = uVar4 - 1) {\n    }\n  }\n  if ((uVar4 ^ 0x1f) == 0) {\n    if ((param_4 < param_2) || (param_3 <= param_1)) {\n      bVar7 = param_1 < param_3;\n      param_1 = param_1 - param_3;\n      param_2 = (param_2 - param_4) - (uint)bVar7;\n    }\n    return CONCAT44(param_2,param_1);\n  }\n  bVar2 = (byte)(uVar4 ^ 0x1f);\n  bVar3 = 0x20 - bVar2;\n  uVar4 = param_4 << (bVar2 & 0x1f) | param_3 >> (bVar3 & 0x1f);\n  param_3 = param_3 << (bVar2 & 0x1f);\n  uVar6 = param_1 << (bVar2 & 0x1f);\n  uVar1 = CONCAT44(param_2 >> (bVar3 & 0x1f),param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f));\n  iVar5 = (int)(uVar1 % (ulonglong)uVar4);\n  uVar1 = (uVar1 / uVar4 & 0xffffffff) * (ulonglong)param_3;\n  if (CONCAT44(iVar5,uVar6) < uVar1) {\n    uVar1 = uVar1 - CONCAT44(uVar4,param_3);\n  }\n  uVar4 = (iVar5 - (int)(uVar1 >> 0x20)) - (uint)(uVar6 < (uint)uVar1);\n  return CONCAT44(uVar4 >> (bVar2 & 0x1f),\n                  uVar4 << (bVar3 & 0x1f) | uVar6 - (uint)uVar1 >> (bVar2 & 0x1f));\n}" type_identifier (function_declarator "FUN_00025330(uint param_1,uint param_2,uint param_3,uint param_4)" identifier (parameter_list "(uint param_1,uint param_2,uint param_3,uint param_4)" ( (parameter_declaration "uint param_1" type_identifier identifier) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "uint param_3" type_identifier identifier) , (parameter_declaration "uint param_4" type_identifier identifier) ))) (compound_statement "{\n  ulonglong uVar1;\n  byte bVar2;\n  byte bVar3;\n  uint uVar4;\n  int iVar5;\n  uint uVar6;\n  bool bVar7;\n  \n  if (param_4 == 0) {\n    if (param_2 < param_3) {\n      uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);\n    }\n    else {\n      if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }\n      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);\n    }\n    return (ulonglong)uVar4;\n  }\n  if (param_2 < param_4) {\n    return CONCAT44(param_2,param_1);\n  }\n  uVar4 = 0x1f;\n  if (param_4 != 0) {\n    for (; param_4 >> uVar4 == 0; uVar4 = uVar4 - 1) {\n    }\n  }\n  if ((uVar4 ^ 0x1f) == 0) {\n    if ((param_4 < param_2) || (param_3 <= param_1)) {\n      bVar7 = param_1 < param_3;\n      param_1 = param_1 - param_3;\n      param_2 = (param_2 - param_4) - (uint)bVar7;\n    }\n    return CONCAT44(param_2,param_1);\n  }\n  bVar2 = (byte)(uVar4 ^ 0x1f);\n  bVar3 = 0x20 - bVar2;\n  uVar4 = param_4 << (bVar2 & 0x1f) | param_3 >> (bVar3 & 0x1f);\n  param_3 = param_3 << (bVar2 & 0x1f);\n  uVar6 = param_1 << (bVar2 & 0x1f);\n  uVar1 = CONCAT44(param_2 >> (bVar3 & 0x1f),param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f));\n  iVar5 = (int)(uVar1 % (ulonglong)uVar4);\n  uVar1 = (uVar1 / uVar4 & 0xffffffff) * (ulonglong)param_3;\n  if (CONCAT44(iVar5,uVar6) < uVar1) {\n    uVar1 = uVar1 - CONCAT44(uVar4,param_3);\n  }\n  uVar4 = (iVar5 - (int)(uVar1 >> 0x20)) - (uint)(uVar6 < (uint)uVar1);\n  return CONCAT44(uVar4 >> (bVar2 & 0x1f),\n                  uVar4 << (bVar3 & 0x1f) | uVar6 - (uint)uVar1 >> (bVar2 & 0x1f));\n}" { (declaration "ulonglong uVar1;" type_identifier identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "bool bVar7;" primitive_type identifier ;) (if_statement "if (param_4 == 0) {\n    if (param_2 < param_3) {\n      uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);\n    }\n    else {\n      if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }\n      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);\n    }\n    return (ulonglong)uVar4;\n  }" if (parenthesized_expression "(param_4 == 0)" ( (binary_expression "param_4 == 0" identifier == number_literal) )) (compound_statement "{\n    if (param_2 < param_3) {\n      uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);\n    }\n    else {\n      if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }\n      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);\n    }\n    return (ulonglong)uVar4;\n  }" { (if_statement "if (param_2 < param_3) {\n      uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);\n    }\n    else {\n      if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }\n      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);\n    }" if (parenthesized_expression "(param_2 < param_3)" ( (binary_expression "param_2 < param_3" identifier < identifier) )) (compound_statement "{\n      uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);\n    }" { (expression_statement "uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);" (assignment_expression "uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3)" identifier = (call_expression "(uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(CONCAT44(param_2,param_1) % (ulonglong)param_3)" ( (binary_expression "CONCAT44(param_2,param_1) % (ulonglong)param_3" (call_expression "CONCAT44(param_2,param_1)" identifier (argument_list "(param_2,param_1)" ( identifier , identifier ))) % (cast_expression "(ulonglong)param_3" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) )))) ;) }) (else_clause "else {\n      if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }\n      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);\n    }" else (compound_statement "{\n      if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }\n      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);\n    }" { (if_statement "if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (compound_statement "{\n        param_3 = 1 / 0;\n      }" { (expression_statement "param_3 = 1 / 0;" (assignment_expression "param_3 = 1 / 0" identifier = (binary_expression "1 / 0" number_literal / number_literal)) ;) })) (expression_statement "uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);" (assignment_expression "uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3)" identifier = (call_expression "(uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3)" ( (binary_expression "((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3" (parenthesized_expression "((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1)" ( (binary_expression "(ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1" (binary_expression "(ulonglong)param_2 % (ulonglong)param_3 << 0x20" (binary_expression "(ulonglong)param_2 % (ulonglong)param_3" (cast_expression "(ulonglong)param_2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) % (cast_expression "(ulonglong)param_3" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) << number_literal) | (cast_expression "(ulonglong)param_1" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) )) % (cast_expression "(ulonglong)param_3" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) )))) ;) }))) (return_statement "return (ulonglong)uVar4;" return (cast_expression "(ulonglong)uVar4" ( (type_descriptor "ulonglong" type_identifier) ) identifier) ;) })) (if_statement "if (param_2 < param_4) {\n    return CONCAT44(param_2,param_1);\n  }" if (parenthesized_expression "(param_2 < param_4)" ( (binary_expression "param_2 < param_4" identifier < identifier) )) (compound_statement "{\n    return CONCAT44(param_2,param_1);\n  }" { (return_statement "return CONCAT44(param_2,param_1);" return (call_expression "CONCAT44(param_2,param_1)" identifier (argument_list "(param_2,param_1)" ( identifier , identifier ))) ;) })) (expression_statement "uVar4 = 0x1f;" (assignment_expression "uVar4 = 0x1f" identifier = number_literal) ;) (if_statement "if (param_4 != 0) {\n    for (; param_4 >> uVar4 == 0; uVar4 = uVar4 - 1) {\n    }\n  }" if (parenthesized_expression "(param_4 != 0)" ( (binary_expression "param_4 != 0" identifier != number_literal) )) (compound_statement "{\n    for (; param_4 >> uVar4 == 0; uVar4 = uVar4 - 1) {\n    }\n  }" { (for_statement "for (; param_4 >> uVar4 == 0; uVar4 = uVar4 - 1) {\n    }" for ( ; (binary_expression "param_4 >> uVar4 == 0" (binary_expression "param_4 >> uVar4" identifier >> identifier) == number_literal) ; (assignment_expression "uVar4 = uVar4 - 1" identifier = (binary_expression "uVar4 - 1" identifier - number_literal)) ) (compound_statement "{\n    }" { })) })) (if_statement "if ((uVar4 ^ 0x1f) == 0) {\n    if ((param_4 < param_2) || (param_3 <= param_1)) {\n      bVar7 = param_1 < param_3;\n      param_1 = param_1 - param_3;\n      param_2 = (param_2 - param_4) - (uint)bVar7;\n    }\n    return CONCAT44(param_2,param_1);\n  }" if (parenthesized_expression "((uVar4 ^ 0x1f) == 0)" ( (binary_expression "(uVar4 ^ 0x1f) == 0" (parenthesized_expression "(uVar4 ^ 0x1f)" ( (binary_expression "uVar4 ^ 0x1f" identifier ^ number_literal) )) == number_literal) )) (compound_statement "{\n    if ((param_4 < param_2) || (param_3 <= param_1)) {\n      bVar7 = param_1 < param_3;\n      param_1 = param_1 - param_3;\n      param_2 = (param_2 - param_4) - (uint)bVar7;\n    }\n    return CONCAT44(param_2,param_1);\n  }" { (if_statement "if ((param_4 < param_2) || (param_3 <= param_1)) {\n      bVar7 = param_1 < param_3;\n      param_1 = param_1 - param_3;\n      param_2 = (param_2 - param_4) - (uint)bVar7;\n    }" if (parenthesized_expression "((param_4 < param_2) || (param_3 <= param_1))" ( (binary_expression "(param_4 < param_2) || (param_3 <= param_1)" (parenthesized_expression "(param_4 < param_2)" ( (binary_expression "param_4 < param_2" identifier < identifier) )) || (parenthesized_expression "(param_3 <= param_1)" ( (binary_expression "param_3 <= param_1" identifier <= identifier) ))) )) (compound_statement "{\n      bVar7 = param_1 < param_3;\n      param_1 = param_1 - param_3;\n      param_2 = (param_2 - param_4) - (uint)bVar7;\n    }" { (expression_statement "bVar7 = param_1 < param_3;" (assignment_expression "bVar7 = param_1 < param_3" identifier = (binary_expression "param_1 < param_3" identifier < identifier)) ;) (expression_statement "param_1 = param_1 - param_3;" (assignment_expression "param_1 = param_1 - param_3" identifier = (binary_expression "param_1 - param_3" identifier - identifier)) ;) (expression_statement "param_2 = (param_2 - param_4) - (uint)bVar7;" (assignment_expression "param_2 = (param_2 - param_4) - (uint)bVar7" identifier = (binary_expression "(param_2 - param_4) - (uint)bVar7" (parenthesized_expression "(param_2 - param_4)" ( (binary_expression "param_2 - param_4" identifier - identifier) )) - (cast_expression "(uint)bVar7" ( (type_descriptor "uint" type_identifier) ) identifier))) ;) })) (return_statement "return CONCAT44(param_2,param_1);" return (call_expression "CONCAT44(param_2,param_1)" identifier (argument_list "(param_2,param_1)" ( identifier , identifier ))) ;) })) (expression_statement "bVar2 = (byte)(uVar4 ^ 0x1f);" (assignment_expression "bVar2 = (byte)(uVar4 ^ 0x1f)" identifier = (call_expression "(byte)(uVar4 ^ 0x1f)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar4 ^ 0x1f)" ( (binary_expression "uVar4 ^ 0x1f" identifier ^ number_literal) )))) ;) (expression_statement "bVar3 = 0x20 - bVar2;" (assignment_expression "bVar3 = 0x20 - bVar2" identifier = (binary_expression "0x20 - bVar2" number_literal - identifier)) ;) (expression_statement "uVar4 = param_4 << (bVar2 & 0x1f) | param_3 >> (bVar3 & 0x1f);" (assignment_expression "uVar4 = param_4 << (bVar2 & 0x1f) | param_3 >> (bVar3 & 0x1f)" identifier = (binary_expression "param_4 << (bVar2 & 0x1f) | param_3 >> (bVar3 & 0x1f)" (binary_expression "param_4 << (bVar2 & 0x1f)" identifier << (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) ))) | (binary_expression "param_3 >> (bVar3 & 0x1f)" identifier >> (parenthesized_expression "(bVar3 & 0x1f)" ( (binary_expression "bVar3 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "param_3 = param_3 << (bVar2 & 0x1f);" (assignment_expression "param_3 = param_3 << (bVar2 & 0x1f)" identifier = (binary_expression "param_3 << (bVar2 & 0x1f)" identifier << (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar6 = param_1 << (bVar2 & 0x1f);" (assignment_expression "uVar6 = param_1 << (bVar2 & 0x1f)" identifier = (binary_expression "param_1 << (bVar2 & 0x1f)" identifier << (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar1 = CONCAT44(param_2 >> (bVar3 & 0x1f),param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f));" (assignment_expression "uVar1 = CONCAT44(param_2 >> (bVar3 & 0x1f),param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f))" identifier = (call_expression "CONCAT44(param_2 >> (bVar3 & 0x1f),param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f))" identifier (argument_list "(param_2 >> (bVar3 & 0x1f),param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f))" ( (binary_expression "param_2 >> (bVar3 & 0x1f)" identifier >> (parenthesized_expression "(bVar3 & 0x1f)" ( (binary_expression "bVar3 & 0x1f" identifier & number_literal) ))) , (binary_expression "param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f)" (binary_expression "param_1 >> (bVar3 & 0x1f)" identifier >> (parenthesized_expression "(bVar3 & 0x1f)" ( (binary_expression "bVar3 & 0x1f" identifier & number_literal) ))) | (binary_expression "param_2 << (bVar2 & 0x1f)" identifier << (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) )))) )))) ;) (expression_statement "iVar5 = (int)(uVar1 % (ulonglong)uVar4);" (assignment_expression "iVar5 = (int)(uVar1 % (ulonglong)uVar4)" identifier = (cast_expression "(int)(uVar1 % (ulonglong)uVar4)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar1 % (ulonglong)uVar4)" ( (binary_expression "uVar1 % (ulonglong)uVar4" identifier % (cast_expression "(ulonglong)uVar4" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) )))) ;) (expression_statement "uVar1 = (uVar1 / uVar4 & 0xffffffff) * (ulonglong)param_3;" (assignment_expression "uVar1 = (uVar1 / uVar4 & 0xffffffff) * (ulonglong)param_3" identifier = (binary_expression "(uVar1 / uVar4 & 0xffffffff) * (ulonglong)param_3" (parenthesized_expression "(uVar1 / uVar4 & 0xffffffff)" ( (binary_expression "uVar1 / uVar4 & 0xffffffff" (binary_expression "uVar1 / uVar4" identifier / identifier) & number_literal) )) * (cast_expression "(ulonglong)param_3" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (if_statement "if (CONCAT44(iVar5,uVar6) < uVar1) {\n    uVar1 = uVar1 - CONCAT44(uVar4,param_3);\n  }" if (parenthesized_expression "(CONCAT44(iVar5,uVar6) < uVar1)" ( (binary_expression "CONCAT44(iVar5,uVar6) < uVar1" (call_expression "CONCAT44(iVar5,uVar6)" identifier (argument_list "(iVar5,uVar6)" ( identifier , identifier ))) < identifier) )) (compound_statement "{\n    uVar1 = uVar1 - CONCAT44(uVar4,param_3);\n  }" { (expression_statement "uVar1 = uVar1 - CONCAT44(uVar4,param_3);" (assignment_expression "uVar1 = uVar1 - CONCAT44(uVar4,param_3)" identifier = (binary_expression "uVar1 - CONCAT44(uVar4,param_3)" identifier - (call_expression "CONCAT44(uVar4,param_3)" identifier (argument_list "(uVar4,param_3)" ( identifier , identifier ))))) ;) })) (expression_statement "uVar4 = (iVar5 - (int)(uVar1 >> 0x20)) - (uint)(uVar6 < (uint)uVar1);" (assignment_expression "uVar4 = (iVar5 - (int)(uVar1 >> 0x20)) - (uint)(uVar6 < (uint)uVar1)" identifier = (binary_expression "(iVar5 - (int)(uVar1 >> 0x20)) - (uint)(uVar6 < (uint)uVar1)" (parenthesized_expression "(iVar5 - (int)(uVar1 >> 0x20))" ( (binary_expression "iVar5 - (int)(uVar1 >> 0x20)" identifier - (cast_expression "(int)(uVar1 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar1 >> 0x20)" ( (binary_expression "uVar1 >> 0x20" identifier >> number_literal) )))) )) - (call_expression "(uint)(uVar6 < (uint)uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar6 < (uint)uVar1)" ( (binary_expression "uVar6 < (uint)uVar1" identifier < (cast_expression "(uint)uVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ))))) ;) (return_statement "return CONCAT44(uVar4 >> (bVar2 & 0x1f),\n                  uVar4 << (bVar3 & 0x1f) | uVar6 - (uint)uVar1 >> (bVar2 & 0x1f));" return (call_expression "CONCAT44(uVar4 >> (bVar2 & 0x1f),\n                  uVar4 << (bVar3 & 0x1f) | uVar6 - (uint)uVar1 >> (bVar2 & 0x1f))" identifier (argument_list "(uVar4 >> (bVar2 & 0x1f),\n                  uVar4 << (bVar3 & 0x1f) | uVar6 - (uint)uVar1 >> (bVar2 & 0x1f))" ( (binary_expression "uVar4 >> (bVar2 & 0x1f)" identifier >> (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) ))) , (binary_expression "uVar4 << (bVar3 & 0x1f) | uVar6 - (uint)uVar1 >> (bVar2 & 0x1f)" (binary_expression "uVar4 << (bVar3 & 0x1f)" identifier << (parenthesized_expression "(bVar3 & 0x1f)" ( (binary_expression "bVar3 & 0x1f" identifier & number_literal) ))) | (binary_expression "uVar6 - (uint)uVar1 >> (bVar2 & 0x1f)" (binary_expression "uVar6 - (uint)uVar1" identifier - (cast_expression "(uint)uVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) >> (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) )))) ))) ;) })))
(translation_unit "/* WARNING: Removing unreachable block (ram,0x00025427) */\n\nulonglong __umoddi3(uint param_1,uint param_2,uint param_3,uint param_4)\n\n{\n  ulonglong uVar1;\n  byte bVar2;\n  byte bVar3;\n  uint uVar4;\n  int iVar5;\n  uint uVar6;\n  bool bVar7;\n  \n  if (param_4 == 0) {\n    if (param_2 < param_3) {\n      uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);\n    }\n    else {\n      if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }\n      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);\n    }\n    return (ulonglong)uVar4;\n  }\n  if (param_2 < param_4) {\n    return CONCAT44(param_2,param_1);\n  }\n  uVar4 = 0x1f;\n  if (param_4 != 0) {\n    for (; param_4 >> uVar4 == 0; uVar4 = uVar4 - 1) {\n    }\n  }\n  if ((uVar4 ^ 0x1f) == 0) {\n    if ((param_4 < param_2) || (param_3 <= param_1)) {\n      bVar7 = param_1 < param_3;\n      param_1 = param_1 - param_3;\n      param_2 = (param_2 - param_4) - (uint)bVar7;\n    }\n    return CONCAT44(param_2,param_1);\n  }\n  bVar2 = (byte)(uVar4 ^ 0x1f);\n  bVar3 = 0x20 - bVar2;\n  uVar4 = param_4 << (bVar2 & 0x1f) | param_3 >> (bVar3 & 0x1f);\n  param_3 = param_3 << (bVar2 & 0x1f);\n  uVar6 = param_1 << (bVar2 & 0x1f);\n  uVar1 = CONCAT44(param_2 >> (bVar3 & 0x1f),param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f));\n  iVar5 = (int)(uVar1 % (ulonglong)uVar4);\n  uVar1 = (uVar1 / uVar4 & 0xffffffff) * (ulonglong)param_3;\n  if (CONCAT44(iVar5,uVar6) < uVar1) {\n    uVar1 = uVar1 - CONCAT44(uVar4,param_3);\n  }\n  uVar4 = (iVar5 - (int)(uVar1 >> 0x20)) - (uint)(uVar6 < (uint)uVar1);\n  return CONCAT44(uVar4 >> (bVar2 & 0x1f),\n                  uVar4 << (bVar3 & 0x1f) | uVar6 - (uint)uVar1 >> (bVar2 & 0x1f));\n}\n\n" comment (function_definition "ulonglong __umoddi3(uint param_1,uint param_2,uint param_3,uint param_4)\n\n{\n  ulonglong uVar1;\n  byte bVar2;\n  byte bVar3;\n  uint uVar4;\n  int iVar5;\n  uint uVar6;\n  bool bVar7;\n  \n  if (param_4 == 0) {\n    if (param_2 < param_3) {\n      uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);\n    }\n    else {\n      if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }\n      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);\n    }\n    return (ulonglong)uVar4;\n  }\n  if (param_2 < param_4) {\n    return CONCAT44(param_2,param_1);\n  }\n  uVar4 = 0x1f;\n  if (param_4 != 0) {\n    for (; param_4 >> uVar4 == 0; uVar4 = uVar4 - 1) {\n    }\n  }\n  if ((uVar4 ^ 0x1f) == 0) {\n    if ((param_4 < param_2) || (param_3 <= param_1)) {\n      bVar7 = param_1 < param_3;\n      param_1 = param_1 - param_3;\n      param_2 = (param_2 - param_4) - (uint)bVar7;\n    }\n    return CONCAT44(param_2,param_1);\n  }\n  bVar2 = (byte)(uVar4 ^ 0x1f);\n  bVar3 = 0x20 - bVar2;\n  uVar4 = param_4 << (bVar2 & 0x1f) | param_3 >> (bVar3 & 0x1f);\n  param_3 = param_3 << (bVar2 & 0x1f);\n  uVar6 = param_1 << (bVar2 & 0x1f);\n  uVar1 = CONCAT44(param_2 >> (bVar3 & 0x1f),param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f));\n  iVar5 = (int)(uVar1 % (ulonglong)uVar4);\n  uVar1 = (uVar1 / uVar4 & 0xffffffff) * (ulonglong)param_3;\n  if (CONCAT44(iVar5,uVar6) < uVar1) {\n    uVar1 = uVar1 - CONCAT44(uVar4,param_3);\n  }\n  uVar4 = (iVar5 - (int)(uVar1 >> 0x20)) - (uint)(uVar6 < (uint)uVar1);\n  return CONCAT44(uVar4 >> (bVar2 & 0x1f),\n                  uVar4 << (bVar3 & 0x1f) | uVar6 - (uint)uVar1 >> (bVar2 & 0x1f));\n}" type_identifier (function_declarator "__umoddi3(uint param_1,uint param_2,uint param_3,uint param_4)" identifier (parameter_list "(uint param_1,uint param_2,uint param_3,uint param_4)" ( (parameter_declaration "uint param_1" type_identifier identifier) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "uint param_3" type_identifier identifier) , (parameter_declaration "uint param_4" type_identifier identifier) ))) (compound_statement "{\n  ulonglong uVar1;\n  byte bVar2;\n  byte bVar3;\n  uint uVar4;\n  int iVar5;\n  uint uVar6;\n  bool bVar7;\n  \n  if (param_4 == 0) {\n    if (param_2 < param_3) {\n      uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);\n    }\n    else {\n      if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }\n      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);\n    }\n    return (ulonglong)uVar4;\n  }\n  if (param_2 < param_4) {\n    return CONCAT44(param_2,param_1);\n  }\n  uVar4 = 0x1f;\n  if (param_4 != 0) {\n    for (; param_4 >> uVar4 == 0; uVar4 = uVar4 - 1) {\n    }\n  }\n  if ((uVar4 ^ 0x1f) == 0) {\n    if ((param_4 < param_2) || (param_3 <= param_1)) {\n      bVar7 = param_1 < param_3;\n      param_1 = param_1 - param_3;\n      param_2 = (param_2 - param_4) - (uint)bVar7;\n    }\n    return CONCAT44(param_2,param_1);\n  }\n  bVar2 = (byte)(uVar4 ^ 0x1f);\n  bVar3 = 0x20 - bVar2;\n  uVar4 = param_4 << (bVar2 & 0x1f) | param_3 >> (bVar3 & 0x1f);\n  param_3 = param_3 << (bVar2 & 0x1f);\n  uVar6 = param_1 << (bVar2 & 0x1f);\n  uVar1 = CONCAT44(param_2 >> (bVar3 & 0x1f),param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f));\n  iVar5 = (int)(uVar1 % (ulonglong)uVar4);\n  uVar1 = (uVar1 / uVar4 & 0xffffffff) * (ulonglong)param_3;\n  if (CONCAT44(iVar5,uVar6) < uVar1) {\n    uVar1 = uVar1 - CONCAT44(uVar4,param_3);\n  }\n  uVar4 = (iVar5 - (int)(uVar1 >> 0x20)) - (uint)(uVar6 < (uint)uVar1);\n  return CONCAT44(uVar4 >> (bVar2 & 0x1f),\n                  uVar4 << (bVar3 & 0x1f) | uVar6 - (uint)uVar1 >> (bVar2 & 0x1f));\n}" { (declaration "ulonglong uVar1;" type_identifier identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "bool bVar7;" primitive_type identifier ;) (if_statement "if (param_4 == 0) {\n    if (param_2 < param_3) {\n      uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);\n    }\n    else {\n      if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }\n      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);\n    }\n    return (ulonglong)uVar4;\n  }" if (parenthesized_expression "(param_4 == 0)" ( (binary_expression "param_4 == 0" identifier == number_literal) )) (compound_statement "{\n    if (param_2 < param_3) {\n      uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);\n    }\n    else {\n      if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }\n      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);\n    }\n    return (ulonglong)uVar4;\n  }" { (if_statement "if (param_2 < param_3) {\n      uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);\n    }\n    else {\n      if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }\n      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);\n    }" if (parenthesized_expression "(param_2 < param_3)" ( (binary_expression "param_2 < param_3" identifier < identifier) )) (compound_statement "{\n      uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);\n    }" { (expression_statement "uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);" (assignment_expression "uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3)" identifier = (call_expression "(uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(CONCAT44(param_2,param_1) % (ulonglong)param_3)" ( (binary_expression "CONCAT44(param_2,param_1) % (ulonglong)param_3" (call_expression "CONCAT44(param_2,param_1)" identifier (argument_list "(param_2,param_1)" ( identifier , identifier ))) % (cast_expression "(ulonglong)param_3" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) )))) ;) }) (else_clause "else {\n      if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }\n      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);\n    }" else (compound_statement "{\n      if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }\n      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);\n    }" { (if_statement "if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (compound_statement "{\n        param_3 = 1 / 0;\n      }" { (expression_statement "param_3 = 1 / 0;" (assignment_expression "param_3 = 1 / 0" identifier = (binary_expression "1 / 0" number_literal / number_literal)) ;) })) (expression_statement "uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);" (assignment_expression "uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3)" identifier = (call_expression "(uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3)" ( (binary_expression "((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3" (parenthesized_expression "((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1)" ( (binary_expression "(ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1" (binary_expression "(ulonglong)param_2 % (ulonglong)param_3 << 0x20" (binary_expression "(ulonglong)param_2 % (ulonglong)param_3" (cast_expression "(ulonglong)param_2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) % (cast_expression "(ulonglong)param_3" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) << number_literal) | (cast_expression "(ulonglong)param_1" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) )) % (cast_expression "(ulonglong)param_3" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) )))) ;) }))) (return_statement "return (ulonglong)uVar4;" return (cast_expression "(ulonglong)uVar4" ( (type_descriptor "ulonglong" type_identifier) ) identifier) ;) })) (if_statement "if (param_2 < param_4) {\n    return CONCAT44(param_2,param_1);\n  }" if (parenthesized_expression "(param_2 < param_4)" ( (binary_expression "param_2 < param_4" identifier < identifier) )) (compound_statement "{\n    return CONCAT44(param_2,param_1);\n  }" { (return_statement "return CONCAT44(param_2,param_1);" return (call_expression "CONCAT44(param_2,param_1)" identifier (argument_list "(param_2,param_1)" ( identifier , identifier ))) ;) })) (expression_statement "uVar4 = 0x1f;" (assignment_expression "uVar4 = 0x1f" identifier = number_literal) ;) (if_statement "if (param_4 != 0) {\n    for (; param_4 >> uVar4 == 0; uVar4 = uVar4 - 1) {\n    }\n  }" if (parenthesized_expression "(param_4 != 0)" ( (binary_expression "param_4 != 0" identifier != number_literal) )) (compound_statement "{\n    for (; param_4 >> uVar4 == 0; uVar4 = uVar4 - 1) {\n    }\n  }" { (for_statement "for (; param_4 >> uVar4 == 0; uVar4 = uVar4 - 1) {\n    }" for ( ; (binary_expression "param_4 >> uVar4 == 0" (binary_expression "param_4 >> uVar4" identifier >> identifier) == number_literal) ; (assignment_expression "uVar4 = uVar4 - 1" identifier = (binary_expression "uVar4 - 1" identifier - number_literal)) ) (compound_statement "{\n    }" { })) })) (if_statement "if ((uVar4 ^ 0x1f) == 0) {\n    if ((param_4 < param_2) || (param_3 <= param_1)) {\n      bVar7 = param_1 < param_3;\n      param_1 = param_1 - param_3;\n      param_2 = (param_2 - param_4) - (uint)bVar7;\n    }\n    return CONCAT44(param_2,param_1);\n  }" if (parenthesized_expression "((uVar4 ^ 0x1f) == 0)" ( (binary_expression "(uVar4 ^ 0x1f) == 0" (parenthesized_expression "(uVar4 ^ 0x1f)" ( (binary_expression "uVar4 ^ 0x1f" identifier ^ number_literal) )) == number_literal) )) (compound_statement "{\n    if ((param_4 < param_2) || (param_3 <= param_1)) {\n      bVar7 = param_1 < param_3;\n      param_1 = param_1 - param_3;\n      param_2 = (param_2 - param_4) - (uint)bVar7;\n    }\n    return CONCAT44(param_2,param_1);\n  }" { (if_statement "if ((param_4 < param_2) || (param_3 <= param_1)) {\n      bVar7 = param_1 < param_3;\n      param_1 = param_1 - param_3;\n      param_2 = (param_2 - param_4) - (uint)bVar7;\n    }" if (parenthesized_expression "((param_4 < param_2) || (param_3 <= param_1))" ( (binary_expression "(param_4 < param_2) || (param_3 <= param_1)" (parenthesized_expression "(param_4 < param_2)" ( (binary_expression "param_4 < param_2" identifier < identifier) )) || (parenthesized_expression "(param_3 <= param_1)" ( (binary_expression "param_3 <= param_1" identifier <= identifier) ))) )) (compound_statement "{\n      bVar7 = param_1 < param_3;\n      param_1 = param_1 - param_3;\n      param_2 = (param_2 - param_4) - (uint)bVar7;\n    }" { (expression_statement "bVar7 = param_1 < param_3;" (assignment_expression "bVar7 = param_1 < param_3" identifier = (binary_expression "param_1 < param_3" identifier < identifier)) ;) (expression_statement "param_1 = param_1 - param_3;" (assignment_expression "param_1 = param_1 - param_3" identifier = (binary_expression "param_1 - param_3" identifier - identifier)) ;) (expression_statement "param_2 = (param_2 - param_4) - (uint)bVar7;" (assignment_expression "param_2 = (param_2 - param_4) - (uint)bVar7" identifier = (binary_expression "(param_2 - param_4) - (uint)bVar7" (parenthesized_expression "(param_2 - param_4)" ( (binary_expression "param_2 - param_4" identifier - identifier) )) - (cast_expression "(uint)bVar7" ( (type_descriptor "uint" type_identifier) ) identifier))) ;) })) (return_statement "return CONCAT44(param_2,param_1);" return (call_expression "CONCAT44(param_2,param_1)" identifier (argument_list "(param_2,param_1)" ( identifier , identifier ))) ;) })) (expression_statement "bVar2 = (byte)(uVar4 ^ 0x1f);" (assignment_expression "bVar2 = (byte)(uVar4 ^ 0x1f)" identifier = (call_expression "(byte)(uVar4 ^ 0x1f)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar4 ^ 0x1f)" ( (binary_expression "uVar4 ^ 0x1f" identifier ^ number_literal) )))) ;) (expression_statement "bVar3 = 0x20 - bVar2;" (assignment_expression "bVar3 = 0x20 - bVar2" identifier = (binary_expression "0x20 - bVar2" number_literal - identifier)) ;) (expression_statement "uVar4 = param_4 << (bVar2 & 0x1f) | param_3 >> (bVar3 & 0x1f);" (assignment_expression "uVar4 = param_4 << (bVar2 & 0x1f) | param_3 >> (bVar3 & 0x1f)" identifier = (binary_expression "param_4 << (bVar2 & 0x1f) | param_3 >> (bVar3 & 0x1f)" (binary_expression "param_4 << (bVar2 & 0x1f)" identifier << (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) ))) | (binary_expression "param_3 >> (bVar3 & 0x1f)" identifier >> (parenthesized_expression "(bVar3 & 0x1f)" ( (binary_expression "bVar3 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "param_3 = param_3 << (bVar2 & 0x1f);" (assignment_expression "param_3 = param_3 << (bVar2 & 0x1f)" identifier = (binary_expression "param_3 << (bVar2 & 0x1f)" identifier << (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar6 = param_1 << (bVar2 & 0x1f);" (assignment_expression "uVar6 = param_1 << (bVar2 & 0x1f)" identifier = (binary_expression "param_1 << (bVar2 & 0x1f)" identifier << (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar1 = CONCAT44(param_2 >> (bVar3 & 0x1f),param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f));" (assignment_expression "uVar1 = CONCAT44(param_2 >> (bVar3 & 0x1f),param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f))" identifier = (call_expression "CONCAT44(param_2 >> (bVar3 & 0x1f),param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f))" identifier (argument_list "(param_2 >> (bVar3 & 0x1f),param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f))" ( (binary_expression "param_2 >> (bVar3 & 0x1f)" identifier >> (parenthesized_expression "(bVar3 & 0x1f)" ( (binary_expression "bVar3 & 0x1f" identifier & number_literal) ))) , (binary_expression "param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f)" (binary_expression "param_1 >> (bVar3 & 0x1f)" identifier >> (parenthesized_expression "(bVar3 & 0x1f)" ( (binary_expression "bVar3 & 0x1f" identifier & number_literal) ))) | (binary_expression "param_2 << (bVar2 & 0x1f)" identifier << (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) )))) )))) ;) (expression_statement "iVar5 = (int)(uVar1 % (ulonglong)uVar4);" (assignment_expression "iVar5 = (int)(uVar1 % (ulonglong)uVar4)" identifier = (cast_expression "(int)(uVar1 % (ulonglong)uVar4)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar1 % (ulonglong)uVar4)" ( (binary_expression "uVar1 % (ulonglong)uVar4" identifier % (cast_expression "(ulonglong)uVar4" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) )))) ;) (expression_statement "uVar1 = (uVar1 / uVar4 & 0xffffffff) * (ulonglong)param_3;" (assignment_expression "uVar1 = (uVar1 / uVar4 & 0xffffffff) * (ulonglong)param_3" identifier = (binary_expression "(uVar1 / uVar4 & 0xffffffff) * (ulonglong)param_3" (parenthesized_expression "(uVar1 / uVar4 & 0xffffffff)" ( (binary_expression "uVar1 / uVar4 & 0xffffffff" (binary_expression "uVar1 / uVar4" identifier / identifier) & number_literal) )) * (cast_expression "(ulonglong)param_3" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (if_statement "if (CONCAT44(iVar5,uVar6) < uVar1) {\n    uVar1 = uVar1 - CONCAT44(uVar4,param_3);\n  }" if (parenthesized_expression "(CONCAT44(iVar5,uVar6) < uVar1)" ( (binary_expression "CONCAT44(iVar5,uVar6) < uVar1" (call_expression "CONCAT44(iVar5,uVar6)" identifier (argument_list "(iVar5,uVar6)" ( identifier , identifier ))) < identifier) )) (compound_statement "{\n    uVar1 = uVar1 - CONCAT44(uVar4,param_3);\n  }" { (expression_statement "uVar1 = uVar1 - CONCAT44(uVar4,param_3);" (assignment_expression "uVar1 = uVar1 - CONCAT44(uVar4,param_3)" identifier = (binary_expression "uVar1 - CONCAT44(uVar4,param_3)" identifier - (call_expression "CONCAT44(uVar4,param_3)" identifier (argument_list "(uVar4,param_3)" ( identifier , identifier ))))) ;) })) (expression_statement "uVar4 = (iVar5 - (int)(uVar1 >> 0x20)) - (uint)(uVar6 < (uint)uVar1);" (assignment_expression "uVar4 = (iVar5 - (int)(uVar1 >> 0x20)) - (uint)(uVar6 < (uint)uVar1)" identifier = (binary_expression "(iVar5 - (int)(uVar1 >> 0x20)) - (uint)(uVar6 < (uint)uVar1)" (parenthesized_expression "(iVar5 - (int)(uVar1 >> 0x20))" ( (binary_expression "iVar5 - (int)(uVar1 >> 0x20)" identifier - (cast_expression "(int)(uVar1 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar1 >> 0x20)" ( (binary_expression "uVar1 >> 0x20" identifier >> number_literal) )))) )) - (call_expression "(uint)(uVar6 < (uint)uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar6 < (uint)uVar1)" ( (binary_expression "uVar6 < (uint)uVar1" identifier < (cast_expression "(uint)uVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ))))) ;) (return_statement "return CONCAT44(uVar4 >> (bVar2 & 0x1f),\n                  uVar4 << (bVar3 & 0x1f) | uVar6 - (uint)uVar1 >> (bVar2 & 0x1f));" return (call_expression "CONCAT44(uVar4 >> (bVar2 & 0x1f),\n                  uVar4 << (bVar3 & 0x1f) | uVar6 - (uint)uVar1 >> (bVar2 & 0x1f))" identifier (argument_list "(uVar4 >> (bVar2 & 0x1f),\n                  uVar4 << (bVar3 & 0x1f) | uVar6 - (uint)uVar1 >> (bVar2 & 0x1f))" ( (binary_expression "uVar4 >> (bVar2 & 0x1f)" identifier >> (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) ))) , (binary_expression "uVar4 << (bVar3 & 0x1f) | uVar6 - (uint)uVar1 >> (bVar2 & 0x1f)" (binary_expression "uVar4 << (bVar3 & 0x1f)" identifier << (parenthesized_expression "(bVar3 & 0x1f)" ( (binary_expression "bVar3 & 0x1f" identifier & number_literal) ))) | (binary_expression "uVar6 - (uint)uVar1 >> (bVar2 & 0x1f)" (binary_expression "uVar6 - (uint)uVar1" identifier - (cast_expression "(uint)uVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) >> (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) )))) ))) ;) })))
(translation_unit "ulonglong FUN_00025330(uint param_1,uint param_2,uint param_3,uint param_4)\n\n{\n  ulonglong uVar1;\n  byte bVar2;\n  byte bVar3;\n  uint uVar4;\n  int iVar5;\n  uint uVar6;\n  bool bVar7;\n  \n  if (param_4 == 0) {\n    if (param_2 < param_3) {\n      uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);\n    }\n    else {\n      if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }\n      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);\n    }\n    return (ulonglong)uVar4;\n  }\n  if (param_2 < param_4) {\n    return CONCAT44(param_2,param_1);\n  }\n  uVar4 = 0x1f;\n  if (param_4 != 0) {\n    for (; param_4 >> uVar4 == 0; uVar4 = uVar4 - 1) {\n    }\n  }\n  if ((uVar4 ^ 0x1f) == 0) {\n    if ((param_4 < param_2) || (param_3 <= param_1)) {\n      bVar7 = param_1 < param_3;\n      param_1 = param_1 - param_3;\n      param_2 = (param_2 - param_4) - (uint)bVar7;\n    }\n    return CONCAT44(param_2,param_1);\n  }\n  bVar2 = (byte)(uVar4 ^ 0x1f);\n  bVar3 = 0x20 - bVar2;\n  uVar4 = param_4 << (bVar2 & 0x1f) | param_3 >> (bVar3 & 0x1f);\n  param_3 = param_3 << (bVar2 & 0x1f);\n  uVar6 = param_1 << (bVar2 & 0x1f);\n  uVar1 = CONCAT44(param_2 >> (bVar3 & 0x1f),param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f));\n  iVar5 = (int)(uVar1 % (ulonglong)uVar4);\n  uVar1 = (uVar1 / uVar4 & 0xffffffff) * (ulonglong)param_3;\n  if (CONCAT44(iVar5,uVar6) < uVar1) {\n    uVar1 = uVar1 - CONCAT44(uVar4,param_3);\n  }\n  uVar4 = (iVar5 - (int)(uVar1 >> 0x20)) - (uint)(uVar6 < (uint)uVar1);\n  return CONCAT44(uVar4 >> (bVar2 & 0x1f),\n                  uVar4 << (bVar3 & 0x1f) | uVar6 - (uint)uVar1 >> (bVar2 & 0x1f));\n}\n\n" (function_definition "ulonglong FUN_00025330(uint param_1,uint param_2,uint param_3,uint param_4)\n\n{\n  ulonglong uVar1;\n  byte bVar2;\n  byte bVar3;\n  uint uVar4;\n  int iVar5;\n  uint uVar6;\n  bool bVar7;\n  \n  if (param_4 == 0) {\n    if (param_2 < param_3) {\n      uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);\n    }\n    else {\n      if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }\n      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);\n    }\n    return (ulonglong)uVar4;\n  }\n  if (param_2 < param_4) {\n    return CONCAT44(param_2,param_1);\n  }\n  uVar4 = 0x1f;\n  if (param_4 != 0) {\n    for (; param_4 >> uVar4 == 0; uVar4 = uVar4 - 1) {\n    }\n  }\n  if ((uVar4 ^ 0x1f) == 0) {\n    if ((param_4 < param_2) || (param_3 <= param_1)) {\n      bVar7 = param_1 < param_3;\n      param_1 = param_1 - param_3;\n      param_2 = (param_2 - param_4) - (uint)bVar7;\n    }\n    return CONCAT44(param_2,param_1);\n  }\n  bVar2 = (byte)(uVar4 ^ 0x1f);\n  bVar3 = 0x20 - bVar2;\n  uVar4 = param_4 << (bVar2 & 0x1f) | param_3 >> (bVar3 & 0x1f);\n  param_3 = param_3 << (bVar2 & 0x1f);\n  uVar6 = param_1 << (bVar2 & 0x1f);\n  uVar1 = CONCAT44(param_2 >> (bVar3 & 0x1f),param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f));\n  iVar5 = (int)(uVar1 % (ulonglong)uVar4);\n  uVar1 = (uVar1 / uVar4 & 0xffffffff) * (ulonglong)param_3;\n  if (CONCAT44(iVar5,uVar6) < uVar1) {\n    uVar1 = uVar1 - CONCAT44(uVar4,param_3);\n  }\n  uVar4 = (iVar5 - (int)(uVar1 >> 0x20)) - (uint)(uVar6 < (uint)uVar1);\n  return CONCAT44(uVar4 >> (bVar2 & 0x1f),\n                  uVar4 << (bVar3 & 0x1f) | uVar6 - (uint)uVar1 >> (bVar2 & 0x1f));\n}" type_identifier (function_declarator "FUN_00025330(uint param_1,uint param_2,uint param_3,uint param_4)" identifier (parameter_list "(uint param_1,uint param_2,uint param_3,uint param_4)" ( (parameter_declaration "uint param_1" type_identifier identifier) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "uint param_3" type_identifier identifier) , (parameter_declaration "uint param_4" type_identifier identifier) ))) (compound_statement "{\n  ulonglong uVar1;\n  byte bVar2;\n  byte bVar3;\n  uint uVar4;\n  int iVar5;\n  uint uVar6;\n  bool bVar7;\n  \n  if (param_4 == 0) {\n    if (param_2 < param_3) {\n      uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);\n    }\n    else {\n      if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }\n      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);\n    }\n    return (ulonglong)uVar4;\n  }\n  if (param_2 < param_4) {\n    return CONCAT44(param_2,param_1);\n  }\n  uVar4 = 0x1f;\n  if (param_4 != 0) {\n    for (; param_4 >> uVar4 == 0; uVar4 = uVar4 - 1) {\n    }\n  }\n  if ((uVar4 ^ 0x1f) == 0) {\n    if ((param_4 < param_2) || (param_3 <= param_1)) {\n      bVar7 = param_1 < param_3;\n      param_1 = param_1 - param_3;\n      param_2 = (param_2 - param_4) - (uint)bVar7;\n    }\n    return CONCAT44(param_2,param_1);\n  }\n  bVar2 = (byte)(uVar4 ^ 0x1f);\n  bVar3 = 0x20 - bVar2;\n  uVar4 = param_4 << (bVar2 & 0x1f) | param_3 >> (bVar3 & 0x1f);\n  param_3 = param_3 << (bVar2 & 0x1f);\n  uVar6 = param_1 << (bVar2 & 0x1f);\n  uVar1 = CONCAT44(param_2 >> (bVar3 & 0x1f),param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f));\n  iVar5 = (int)(uVar1 % (ulonglong)uVar4);\n  uVar1 = (uVar1 / uVar4 & 0xffffffff) * (ulonglong)param_3;\n  if (CONCAT44(iVar5,uVar6) < uVar1) {\n    uVar1 = uVar1 - CONCAT44(uVar4,param_3);\n  }\n  uVar4 = (iVar5 - (int)(uVar1 >> 0x20)) - (uint)(uVar6 < (uint)uVar1);\n  return CONCAT44(uVar4 >> (bVar2 & 0x1f),\n                  uVar4 << (bVar3 & 0x1f) | uVar6 - (uint)uVar1 >> (bVar2 & 0x1f));\n}" { (declaration "ulonglong uVar1;" type_identifier identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "bool bVar7;" primitive_type identifier ;) (if_statement "if (param_4 == 0) {\n    if (param_2 < param_3) {\n      uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);\n    }\n    else {\n      if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }\n      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);\n    }\n    return (ulonglong)uVar4;\n  }" if (parenthesized_expression "(param_4 == 0)" ( (binary_expression "param_4 == 0" identifier == number_literal) )) (compound_statement "{\n    if (param_2 < param_3) {\n      uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);\n    }\n    else {\n      if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }\n      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);\n    }\n    return (ulonglong)uVar4;\n  }" { (if_statement "if (param_2 < param_3) {\n      uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);\n    }\n    else {\n      if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }\n      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);\n    }" if (parenthesized_expression "(param_2 < param_3)" ( (binary_expression "param_2 < param_3" identifier < identifier) )) (compound_statement "{\n      uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);\n    }" { (expression_statement "uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);" (assignment_expression "uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3)" identifier = (call_expression "(uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(CONCAT44(param_2,param_1) % (ulonglong)param_3)" ( (binary_expression "CONCAT44(param_2,param_1) % (ulonglong)param_3" (call_expression "CONCAT44(param_2,param_1)" identifier (argument_list "(param_2,param_1)" ( identifier , identifier ))) % (cast_expression "(ulonglong)param_3" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) )))) ;) }) (else_clause "else {\n      if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }\n      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);\n    }" else (compound_statement "{\n      if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }\n      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);\n    }" { (if_statement "if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (compound_statement "{\n        param_3 = 1 / 0;\n      }" { (expression_statement "param_3 = 1 / 0;" (assignment_expression "param_3 = 1 / 0" identifier = (binary_expression "1 / 0" number_literal / number_literal)) ;) })) (expression_statement "uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);" (assignment_expression "uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3)" identifier = (call_expression "(uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3)" ( (binary_expression "((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3" (parenthesized_expression "((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1)" ( (binary_expression "(ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1" (binary_expression "(ulonglong)param_2 % (ulonglong)param_3 << 0x20" (binary_expression "(ulonglong)param_2 % (ulonglong)param_3" (cast_expression "(ulonglong)param_2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) % (cast_expression "(ulonglong)param_3" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) << number_literal) | (cast_expression "(ulonglong)param_1" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) )) % (cast_expression "(ulonglong)param_3" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) )))) ;) }))) (return_statement "return (ulonglong)uVar4;" return (cast_expression "(ulonglong)uVar4" ( (type_descriptor "ulonglong" type_identifier) ) identifier) ;) })) (if_statement "if (param_2 < param_4) {\n    return CONCAT44(param_2,param_1);\n  }" if (parenthesized_expression "(param_2 < param_4)" ( (binary_expression "param_2 < param_4" identifier < identifier) )) (compound_statement "{\n    return CONCAT44(param_2,param_1);\n  }" { (return_statement "return CONCAT44(param_2,param_1);" return (call_expression "CONCAT44(param_2,param_1)" identifier (argument_list "(param_2,param_1)" ( identifier , identifier ))) ;) })) (expression_statement "uVar4 = 0x1f;" (assignment_expression "uVar4 = 0x1f" identifier = number_literal) ;) (if_statement "if (param_4 != 0) {\n    for (; param_4 >> uVar4 == 0; uVar4 = uVar4 - 1) {\n    }\n  }" if (parenthesized_expression "(param_4 != 0)" ( (binary_expression "param_4 != 0" identifier != number_literal) )) (compound_statement "{\n    for (; param_4 >> uVar4 == 0; uVar4 = uVar4 - 1) {\n    }\n  }" { (for_statement "for (; param_4 >> uVar4 == 0; uVar4 = uVar4 - 1) {\n    }" for ( ; (binary_expression "param_4 >> uVar4 == 0" (binary_expression "param_4 >> uVar4" identifier >> identifier) == number_literal) ; (assignment_expression "uVar4 = uVar4 - 1" identifier = (binary_expression "uVar4 - 1" identifier - number_literal)) ) (compound_statement "{\n    }" { })) })) (if_statement "if ((uVar4 ^ 0x1f) == 0) {\n    if ((param_4 < param_2) || (param_3 <= param_1)) {\n      bVar7 = param_1 < param_3;\n      param_1 = param_1 - param_3;\n      param_2 = (param_2 - param_4) - (uint)bVar7;\n    }\n    return CONCAT44(param_2,param_1);\n  }" if (parenthesized_expression "((uVar4 ^ 0x1f) == 0)" ( (binary_expression "(uVar4 ^ 0x1f) == 0" (parenthesized_expression "(uVar4 ^ 0x1f)" ( (binary_expression "uVar4 ^ 0x1f" identifier ^ number_literal) )) == number_literal) )) (compound_statement "{\n    if ((param_4 < param_2) || (param_3 <= param_1)) {\n      bVar7 = param_1 < param_3;\n      param_1 = param_1 - param_3;\n      param_2 = (param_2 - param_4) - (uint)bVar7;\n    }\n    return CONCAT44(param_2,param_1);\n  }" { (if_statement "if ((param_4 < param_2) || (param_3 <= param_1)) {\n      bVar7 = param_1 < param_3;\n      param_1 = param_1 - param_3;\n      param_2 = (param_2 - param_4) - (uint)bVar7;\n    }" if (parenthesized_expression "((param_4 < param_2) || (param_3 <= param_1))" ( (binary_expression "(param_4 < param_2) || (param_3 <= param_1)" (parenthesized_expression "(param_4 < param_2)" ( (binary_expression "param_4 < param_2" identifier < identifier) )) || (parenthesized_expression "(param_3 <= param_1)" ( (binary_expression "param_3 <= param_1" identifier <= identifier) ))) )) (compound_statement "{\n      bVar7 = param_1 < param_3;\n      param_1 = param_1 - param_3;\n      param_2 = (param_2 - param_4) - (uint)bVar7;\n    }" { (expression_statement "bVar7 = param_1 < param_3;" (assignment_expression "bVar7 = param_1 < param_3" identifier = (binary_expression "param_1 < param_3" identifier < identifier)) ;) (expression_statement "param_1 = param_1 - param_3;" (assignment_expression "param_1 = param_1 - param_3" identifier = (binary_expression "param_1 - param_3" identifier - identifier)) ;) (expression_statement "param_2 = (param_2 - param_4) - (uint)bVar7;" (assignment_expression "param_2 = (param_2 - param_4) - (uint)bVar7" identifier = (binary_expression "(param_2 - param_4) - (uint)bVar7" (parenthesized_expression "(param_2 - param_4)" ( (binary_expression "param_2 - param_4" identifier - identifier) )) - (cast_expression "(uint)bVar7" ( (type_descriptor "uint" type_identifier) ) identifier))) ;) })) (return_statement "return CONCAT44(param_2,param_1);" return (call_expression "CONCAT44(param_2,param_1)" identifier (argument_list "(param_2,param_1)" ( identifier , identifier ))) ;) })) (expression_statement "bVar2 = (byte)(uVar4 ^ 0x1f);" (assignment_expression "bVar2 = (byte)(uVar4 ^ 0x1f)" identifier = (call_expression "(byte)(uVar4 ^ 0x1f)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar4 ^ 0x1f)" ( (binary_expression "uVar4 ^ 0x1f" identifier ^ number_literal) )))) ;) (expression_statement "bVar3 = 0x20 - bVar2;" (assignment_expression "bVar3 = 0x20 - bVar2" identifier = (binary_expression "0x20 - bVar2" number_literal - identifier)) ;) (expression_statement "uVar4 = param_4 << (bVar2 & 0x1f) | param_3 >> (bVar3 & 0x1f);" (assignment_expression "uVar4 = param_4 << (bVar2 & 0x1f) | param_3 >> (bVar3 & 0x1f)" identifier = (binary_expression "param_4 << (bVar2 & 0x1f) | param_3 >> (bVar3 & 0x1f)" (binary_expression "param_4 << (bVar2 & 0x1f)" identifier << (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) ))) | (binary_expression "param_3 >> (bVar3 & 0x1f)" identifier >> (parenthesized_expression "(bVar3 & 0x1f)" ( (binary_expression "bVar3 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "param_3 = param_3 << (bVar2 & 0x1f);" (assignment_expression "param_3 = param_3 << (bVar2 & 0x1f)" identifier = (binary_expression "param_3 << (bVar2 & 0x1f)" identifier << (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar6 = param_1 << (bVar2 & 0x1f);" (assignment_expression "uVar6 = param_1 << (bVar2 & 0x1f)" identifier = (binary_expression "param_1 << (bVar2 & 0x1f)" identifier << (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar1 = CONCAT44(param_2 >> (bVar3 & 0x1f),param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f));" (assignment_expression "uVar1 = CONCAT44(param_2 >> (bVar3 & 0x1f),param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f))" identifier = (call_expression "CONCAT44(param_2 >> (bVar3 & 0x1f),param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f))" identifier (argument_list "(param_2 >> (bVar3 & 0x1f),param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f))" ( (binary_expression "param_2 >> (bVar3 & 0x1f)" identifier >> (parenthesized_expression "(bVar3 & 0x1f)" ( (binary_expression "bVar3 & 0x1f" identifier & number_literal) ))) , (binary_expression "param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f)" (binary_expression "param_1 >> (bVar3 & 0x1f)" identifier >> (parenthesized_expression "(bVar3 & 0x1f)" ( (binary_expression "bVar3 & 0x1f" identifier & number_literal) ))) | (binary_expression "param_2 << (bVar2 & 0x1f)" identifier << (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) )))) )))) ;) (expression_statement "iVar5 = (int)(uVar1 % (ulonglong)uVar4);" (assignment_expression "iVar5 = (int)(uVar1 % (ulonglong)uVar4)" identifier = (cast_expression "(int)(uVar1 % (ulonglong)uVar4)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar1 % (ulonglong)uVar4)" ( (binary_expression "uVar1 % (ulonglong)uVar4" identifier % (cast_expression "(ulonglong)uVar4" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) )))) ;) (expression_statement "uVar1 = (uVar1 / uVar4 & 0xffffffff) * (ulonglong)param_3;" (assignment_expression "uVar1 = (uVar1 / uVar4 & 0xffffffff) * (ulonglong)param_3" identifier = (binary_expression "(uVar1 / uVar4 & 0xffffffff) * (ulonglong)param_3" (parenthesized_expression "(uVar1 / uVar4 & 0xffffffff)" ( (binary_expression "uVar1 / uVar4 & 0xffffffff" (binary_expression "uVar1 / uVar4" identifier / identifier) & number_literal) )) * (cast_expression "(ulonglong)param_3" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (if_statement "if (CONCAT44(iVar5,uVar6) < uVar1) {\n    uVar1 = uVar1 - CONCAT44(uVar4,param_3);\n  }" if (parenthesized_expression "(CONCAT44(iVar5,uVar6) < uVar1)" ( (binary_expression "CONCAT44(iVar5,uVar6) < uVar1" (call_expression "CONCAT44(iVar5,uVar6)" identifier (argument_list "(iVar5,uVar6)" ( identifier , identifier ))) < identifier) )) (compound_statement "{\n    uVar1 = uVar1 - CONCAT44(uVar4,param_3);\n  }" { (expression_statement "uVar1 = uVar1 - CONCAT44(uVar4,param_3);" (assignment_expression "uVar1 = uVar1 - CONCAT44(uVar4,param_3)" identifier = (binary_expression "uVar1 - CONCAT44(uVar4,param_3)" identifier - (call_expression "CONCAT44(uVar4,param_3)" identifier (argument_list "(uVar4,param_3)" ( identifier , identifier ))))) ;) })) (expression_statement "uVar4 = (iVar5 - (int)(uVar1 >> 0x20)) - (uint)(uVar6 < (uint)uVar1);" (assignment_expression "uVar4 = (iVar5 - (int)(uVar1 >> 0x20)) - (uint)(uVar6 < (uint)uVar1)" identifier = (binary_expression "(iVar5 - (int)(uVar1 >> 0x20)) - (uint)(uVar6 < (uint)uVar1)" (parenthesized_expression "(iVar5 - (int)(uVar1 >> 0x20))" ( (binary_expression "iVar5 - (int)(uVar1 >> 0x20)" identifier - (cast_expression "(int)(uVar1 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar1 >> 0x20)" ( (binary_expression "uVar1 >> 0x20" identifier >> number_literal) )))) )) - (call_expression "(uint)(uVar6 < (uint)uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar6 < (uint)uVar1)" ( (binary_expression "uVar6 < (uint)uVar1" identifier < (cast_expression "(uint)uVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ))))) ;) (return_statement "return CONCAT44(uVar4 >> (bVar2 & 0x1f),\n                  uVar4 << (bVar3 & 0x1f) | uVar6 - (uint)uVar1 >> (bVar2 & 0x1f));" return (call_expression "CONCAT44(uVar4 >> (bVar2 & 0x1f),\n                  uVar4 << (bVar3 & 0x1f) | uVar6 - (uint)uVar1 >> (bVar2 & 0x1f))" identifier (argument_list "(uVar4 >> (bVar2 & 0x1f),\n                  uVar4 << (bVar3 & 0x1f) | uVar6 - (uint)uVar1 >> (bVar2 & 0x1f))" ( (binary_expression "uVar4 >> (bVar2 & 0x1f)" identifier >> (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) ))) , (binary_expression "uVar4 << (bVar3 & 0x1f) | uVar6 - (uint)uVar1 >> (bVar2 & 0x1f)" (binary_expression "uVar4 << (bVar3 & 0x1f)" identifier << (parenthesized_expression "(bVar3 & 0x1f)" ( (binary_expression "bVar3 & 0x1f" identifier & number_literal) ))) | (binary_expression "uVar6 - (uint)uVar1 >> (bVar2 & 0x1f)" (binary_expression "uVar6 - (uint)uVar1" identifier - (cast_expression "(uint)uVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) >> (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) )))) ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (call_expression IDENT (argument_list ( IDENT , IDENT ))) % (cast_expression ( (type_descriptor TYPE) ) IDENT)) )))) ;) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression LIT / LIT)) ;) })) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) % (cast_expression ( (type_descriptor TYPE) ) IDENT)) << LIT) | (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) % (cast_expression ( (type_descriptor TYPE) ) IDENT)) )))) ;) }))) (return_statement return (cast_expression ( (type_descriptor TYPE) ) IDENT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (return_statement return (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (for_statement for ( ; (binary_expression (binary_expression IDENT >> IDENT) == LIT) ; (assignment_expression IDENT = (binary_expression IDENT - LIT)) ) (compound_statement { })) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT ^ LIT) )) == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < IDENT) )) || (parenthesized_expression ( (binary_expression IDENT <= IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT < IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) - (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) })) (return_statement return (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) })) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT ^ LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression LIT - IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) ))) | (binary_expression IDENT >> (parenthesized_expression ( (binary_expression IDENT & LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT >> (parenthesized_expression ( (binary_expression IDENT & LIT) ))) , (binary_expression (binary_expression IDENT >> (parenthesized_expression ( (binary_expression IDENT & LIT) ))) | (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) )))) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT % (cast_expression ( (type_descriptor TYPE) ) IDENT)) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT / IDENT) & LIT) )) * (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (call_expression IDENT (argument_list ( IDENT , IDENT ))) < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - (call_expression IDENT (argument_list ( IDENT , IDENT ))))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT - (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT >> LIT) )))) )) - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))))) ;) (return_statement return (call_expression IDENT (argument_list ( (binary_expression IDENT >> (parenthesized_expression ( (binary_expression IDENT & LIT) ))) , (binary_expression (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) ))) | (binary_expression (binary_expression IDENT - (cast_expression ( (type_descriptor TYPE) ) IDENT)) >> (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ))) ;) })))
(function_definition "ulonglong FUN_00025330(uint param_1,uint param_2,uint param_3,uint param_4)\n\n{\n  ulonglong uVar1;\n  byte bVar2;\n  byte bVar3;\n  uint uVar4;\n  int iVar5;\n  uint uVar6;\n  bool bVar7;\n  \n  if (param_4 == 0) {\n    if (param_2 < param_3) {\n      uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);\n    }\n    else {\n      if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }\n      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);\n    }\n    return (ulonglong)uVar4;\n  }\n  if (param_2 < param_4) {\n    return CONCAT44(param_2,param_1);\n  }\n  uVar4 = 0x1f;\n  if (param_4 != 0) {\n    for (; param_4 >> uVar4 == 0; uVar4 = uVar4 - 1) {\n    }\n  }\n  if ((uVar4 ^ 0x1f) == 0) {\n    if ((param_4 < param_2) || (param_3 <= param_1)) {\n      bVar7 = param_1 < param_3;\n      param_1 = param_1 - param_3;\n      param_2 = (param_2 - param_4) - (uint)bVar7;\n    }\n    return CONCAT44(param_2,param_1);\n  }\n  bVar2 = (byte)(uVar4 ^ 0x1f);\n  bVar3 = 0x20 - bVar2;\n  uVar4 = param_4 << (bVar2 & 0x1f) | param_3 >> (bVar3 & 0x1f);\n  param_3 = param_3 << (bVar2 & 0x1f);\n  uVar6 = param_1 << (bVar2 & 0x1f);\n  uVar1 = CONCAT44(param_2 >> (bVar3 & 0x1f),param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f));\n  iVar5 = (int)(uVar1 % (ulonglong)uVar4);\n  uVar1 = (uVar1 / uVar4 & 0xffffffff) * (ulonglong)param_3;\n  if (CONCAT44(iVar5,uVar6) < uVar1) {\n    uVar1 = uVar1 - CONCAT44(uVar4,param_3);\n  }\n  uVar4 = (iVar5 - (int)(uVar1 >> 0x20)) - (uint)(uVar6 < (uint)uVar1);\n  return CONCAT44(uVar4 >> (bVar2 & 0x1f),\n                  uVar4 << (bVar3 & 0x1f) | uVar6 - (uint)uVar1 >> (bVar2 & 0x1f));\n}" (type_identifier "ulonglong") (function_declarator "FUN_00025330(uint param_1,uint param_2,uint param_3,uint param_4)" (identifier "FUN_00025330") (parameter_list "(uint param_1,uint param_2,uint param_3,uint param_4)" (( "(") (parameter_declaration "uint param_1" (type_identifier "uint") (identifier "param_1")) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (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")) () ")"))) (compound_statement "{\n  ulonglong uVar1;\n  byte bVar2;\n  byte bVar3;\n  uint uVar4;\n  int iVar5;\n  uint uVar6;\n  bool bVar7;\n  \n  if (param_4 == 0) {\n    if (param_2 < param_3) {\n      uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);\n    }\n    else {\n      if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }\n      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);\n    }\n    return (ulonglong)uVar4;\n  }\n  if (param_2 < param_4) {\n    return CONCAT44(param_2,param_1);\n  }\n  uVar4 = 0x1f;\n  if (param_4 != 0) {\n    for (; param_4 >> uVar4 == 0; uVar4 = uVar4 - 1) {\n    }\n  }\n  if ((uVar4 ^ 0x1f) == 0) {\n    if ((param_4 < param_2) || (param_3 <= param_1)) {\n      bVar7 = param_1 < param_3;\n      param_1 = param_1 - param_3;\n      param_2 = (param_2 - param_4) - (uint)bVar7;\n    }\n    return CONCAT44(param_2,param_1);\n  }\n  bVar2 = (byte)(uVar4 ^ 0x1f);\n  bVar3 = 0x20 - bVar2;\n  uVar4 = param_4 << (bVar2 & 0x1f) | param_3 >> (bVar3 & 0x1f);\n  param_3 = param_3 << (bVar2 & 0x1f);\n  uVar6 = param_1 << (bVar2 & 0x1f);\n  uVar1 = CONCAT44(param_2 >> (bVar3 & 0x1f),param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f));\n  iVar5 = (int)(uVar1 % (ulonglong)uVar4);\n  uVar1 = (uVar1 / uVar4 & 0xffffffff) * (ulonglong)param_3;\n  if (CONCAT44(iVar5,uVar6) < uVar1) {\n    uVar1 = uVar1 - CONCAT44(uVar4,param_3);\n  }\n  uVar4 = (iVar5 - (int)(uVar1 >> 0x20)) - (uint)(uVar6 < (uint)uVar1);\n  return CONCAT44(uVar4 >> (bVar2 & 0x1f),\n                  uVar4 << (bVar3 & 0x1f) | uVar6 - (uint)uVar1 >> (bVar2 & 0x1f));\n}" ({ "{") (declaration "ulonglong uVar1;" (type_identifier "ulonglong") (identifier "uVar1") (; ";")) (declaration "byte bVar2;" (type_identifier "byte") (identifier "bVar2") (; ";")) (declaration "byte bVar3;" (type_identifier "byte") (identifier "bVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "uint uVar6;" (type_identifier "uint") (identifier "uVar6") (; ";")) (declaration "bool bVar7;" (primitive_type "bool") (identifier "bVar7") (; ";")) (if_statement "if (param_4 == 0) {\n    if (param_2 < param_3) {\n      uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);\n    }\n    else {\n      if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }\n      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);\n    }\n    return (ulonglong)uVar4;\n  }" (if "if") (parenthesized_expression "(param_4 == 0)" (( "(") (binary_expression "param_4 == 0" (identifier "param_4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    if (param_2 < param_3) {\n      uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);\n    }\n    else {\n      if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }\n      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);\n    }\n    return (ulonglong)uVar4;\n  }" ({ "{") (if_statement "if (param_2 < param_3) {\n      uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);\n    }\n    else {\n      if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }\n      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);\n    }" (if "if") (parenthesized_expression "(param_2 < param_3)" (( "(") (binary_expression "param_2 < param_3" (identifier "param_2") (< "<") (identifier "param_3")) () ")")) (compound_statement "{\n      uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);\n    }" ({ "{") (expression_statement "uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);" (assignment_expression "uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3)" (identifier "uVar4") (= "=") (call_expression "(uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(CONCAT44(param_2,param_1) % (ulonglong)param_3)" (( "(") (binary_expression "CONCAT44(param_2,param_1) % (ulonglong)param_3" (call_expression "CONCAT44(param_2,param_1)" (identifier "CONCAT44") (argument_list "(param_2,param_1)" (( "(") (identifier "param_2") (, ",") (identifier "param_1") () ")"))) (% "%") (cast_expression "(ulonglong)param_3" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "param_3"))) () ")")))) (; ";")) (} "}")) (else_clause "else {\n      if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }\n      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);\n    }" (else "else") (compound_statement "{\n      if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }\n      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);\n    }" ({ "{") (if_statement "if (param_3 == 0) {\n        param_3 = 1 / 0;\n      }" (if "if") (parenthesized_expression "(param_3 == 0)" (( "(") (binary_expression "param_3 == 0" (identifier "param_3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        param_3 = 1 / 0;\n      }" ({ "{") (expression_statement "param_3 = 1 / 0;" (assignment_expression "param_3 = 1 / 0" (identifier "param_3") (= "=") (binary_expression "1 / 0" (number_literal "1") (/ "/") (number_literal "0"))) (; ";")) (} "}"))) (expression_statement "uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3);" (assignment_expression "uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3)" (identifier "uVar4") (= "=") (call_expression "(uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3)" (( "(") (binary_expression "((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %\n                    (ulonglong)param_3" (parenthesized_expression "((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1)" (( "(") (binary_expression "(ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1" (binary_expression "(ulonglong)param_2 % (ulonglong)param_3 << 0x20" (binary_expression "(ulonglong)param_2 % (ulonglong)param_3" (cast_expression "(ulonglong)param_2" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "param_2")) (% "%") (cast_expression "(ulonglong)param_3" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "param_3"))) (<< "<<") (number_literal "0x20")) (| "|") (cast_expression "(ulonglong)param_1" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "param_1"))) () ")")) (% "%") (cast_expression "(ulonglong)param_3" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "param_3"))) () ")")))) (; ";")) (} "}")))) (return_statement "return (ulonglong)uVar4;" (return "return") (cast_expression "(ulonglong)uVar4" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar4")) (; ";")) (} "}"))) (if_statement "if (param_2 < param_4) {\n    return CONCAT44(param_2,param_1);\n  }" (if "if") (parenthesized_expression "(param_2 < param_4)" (( "(") (binary_expression "param_2 < param_4" (identifier "param_2") (< "<") (identifier "param_4")) () ")")) (compound_statement "{\n    return CONCAT44(param_2,param_1);\n  }" ({ "{") (return_statement "return CONCAT44(param_2,param_1);" (return "return") (call_expression "CONCAT44(param_2,param_1)" (identifier "CONCAT44") (argument_list "(param_2,param_1)" (( "(") (identifier "param_2") (, ",") (identifier "param_1") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar4 = 0x1f;" (assignment_expression "uVar4 = 0x1f" (identifier "uVar4") (= "=") (number_literal "0x1f")) (; ";")) (if_statement "if (param_4 != 0) {\n    for (; param_4 >> uVar4 == 0; uVar4 = uVar4 - 1) {\n    }\n  }" (if "if") (parenthesized_expression "(param_4 != 0)" (( "(") (binary_expression "param_4 != 0" (identifier "param_4") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    for (; param_4 >> uVar4 == 0; uVar4 = uVar4 - 1) {\n    }\n  }" ({ "{") (for_statement "for (; param_4 >> uVar4 == 0; uVar4 = uVar4 - 1) {\n    }" (for "for") (( "(") (; ";") (binary_expression "param_4 >> uVar4 == 0" (binary_expression "param_4 >> uVar4" (identifier "param_4") (>> ">>") (identifier "uVar4")) (== "==") (number_literal "0")) (; ";") (assignment_expression "uVar4 = uVar4 - 1" (identifier "uVar4") (= "=") (binary_expression "uVar4 - 1" (identifier "uVar4") (- "-") (number_literal "1"))) () ")") (compound_statement "{\n    }" ({ "{") (} "}"))) (} "}"))) (if_statement "if ((uVar4 ^ 0x1f) == 0) {\n    if ((param_4 < param_2) || (param_3 <= param_1)) {\n      bVar7 = param_1 < param_3;\n      param_1 = param_1 - param_3;\n      param_2 = (param_2 - param_4) - (uint)bVar7;\n    }\n    return CONCAT44(param_2,param_1);\n  }" (if "if") (parenthesized_expression "((uVar4 ^ 0x1f) == 0)" (( "(") (binary_expression "(uVar4 ^ 0x1f) == 0" (parenthesized_expression "(uVar4 ^ 0x1f)" (( "(") (binary_expression "uVar4 ^ 0x1f" (identifier "uVar4") (^ "^") (number_literal "0x1f")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    if ((param_4 < param_2) || (param_3 <= param_1)) {\n      bVar7 = param_1 < param_3;\n      param_1 = param_1 - param_3;\n      param_2 = (param_2 - param_4) - (uint)bVar7;\n    }\n    return CONCAT44(param_2,param_1);\n  }" ({ "{") (if_statement "if ((param_4 < param_2) || (param_3 <= param_1)) {\n      bVar7 = param_1 < param_3;\n      param_1 = param_1 - param_3;\n      param_2 = (param_2 - param_4) - (uint)bVar7;\n    }" (if "if") (parenthesized_expression "((param_4 < param_2) || (param_3 <= param_1))" (( "(") (binary_expression "(param_4 < param_2) || (param_3 <= param_1)" (parenthesized_expression "(param_4 < param_2)" (( "(") (binary_expression "param_4 < param_2" (identifier "param_4") (< "<") (identifier "param_2")) () ")")) (|| "||") (parenthesized_expression "(param_3 <= param_1)" (( "(") (binary_expression "param_3 <= param_1" (identifier "param_3") (<= "<=") (identifier "param_1")) () ")"))) () ")")) (compound_statement "{\n      bVar7 = param_1 < param_3;\n      param_1 = param_1 - param_3;\n      param_2 = (param_2 - param_4) - (uint)bVar7;\n    }" ({ "{") (expression_statement "bVar7 = param_1 < param_3;" (assignment_expression "bVar7 = param_1 < param_3" (identifier "bVar7") (= "=") (binary_expression "param_1 < param_3" (identifier "param_1") (< "<") (identifier "param_3"))) (; ";")) (expression_statement "param_1 = param_1 - param_3;" (assignment_expression "param_1 = param_1 - param_3" (identifier "param_1") (= "=") (binary_expression "param_1 - param_3" (identifier "param_1") (- "-") (identifier "param_3"))) (; ";")) (expression_statement "param_2 = (param_2 - param_4) - (uint)bVar7;" (assignment_expression "param_2 = (param_2 - param_4) - (uint)bVar7" (identifier "param_2") (= "=") (binary_expression "(param_2 - param_4) - (uint)bVar7" (parenthesized_expression "(param_2 - param_4)" (( "(") (binary_expression "param_2 - param_4" (identifier "param_2") (- "-") (identifier "param_4")) () ")")) (- "-") (cast_expression "(uint)bVar7" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar7")))) (; ";")) (} "}"))) (return_statement "return CONCAT44(param_2,param_1);" (return "return") (call_expression "CONCAT44(param_2,param_1)" (identifier "CONCAT44") (argument_list "(param_2,param_1)" (( "(") (identifier "param_2") (, ",") (identifier "param_1") () ")"))) (; ";")) (} "}"))) (expression_statement "bVar2 = (byte)(uVar4 ^ 0x1f);" (assignment_expression "bVar2 = (byte)(uVar4 ^ 0x1f)" (identifier "bVar2") (= "=") (call_expression "(byte)(uVar4 ^ 0x1f)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(uVar4 ^ 0x1f)" (( "(") (binary_expression "uVar4 ^ 0x1f" (identifier "uVar4") (^ "^") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "bVar3 = 0x20 - bVar2;" (assignment_expression "bVar3 = 0x20 - bVar2" (identifier "bVar3") (= "=") (binary_expression "0x20 - bVar2" (number_literal "0x20") (- "-") (identifier "bVar2"))) (; ";")) (expression_statement "uVar4 = param_4 << (bVar2 & 0x1f) | param_3 >> (bVar3 & 0x1f);" (assignment_expression "uVar4 = param_4 << (bVar2 & 0x1f) | param_3 >> (bVar3 & 0x1f)" (identifier "uVar4") (= "=") (binary_expression "param_4 << (bVar2 & 0x1f) | param_3 >> (bVar3 & 0x1f)" (binary_expression "param_4 << (bVar2 & 0x1f)" (identifier "param_4") (<< "<<") (parenthesized_expression "(bVar2 & 0x1f)" (( "(") (binary_expression "bVar2 & 0x1f" (identifier "bVar2") (& "&") (number_literal "0x1f")) () ")"))) (| "|") (binary_expression "param_3 >> (bVar3 & 0x1f)" (identifier "param_3") (>> ">>") (parenthesized_expression "(bVar3 & 0x1f)" (( "(") (binary_expression "bVar3 & 0x1f" (identifier "bVar3") (& "&") (number_literal "0x1f")) () ")"))))) (; ";")) (expression_statement "param_3 = param_3 << (bVar2 & 0x1f);" (assignment_expression "param_3 = param_3 << (bVar2 & 0x1f)" (identifier "param_3") (= "=") (binary_expression "param_3 << (bVar2 & 0x1f)" (identifier "param_3") (<< "<<") (parenthesized_expression "(bVar2 & 0x1f)" (( "(") (binary_expression "bVar2 & 0x1f" (identifier "bVar2") (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "uVar6 = param_1 << (bVar2 & 0x1f);" (assignment_expression "uVar6 = param_1 << (bVar2 & 0x1f)" (identifier "uVar6") (= "=") (binary_expression "param_1 << (bVar2 & 0x1f)" (identifier "param_1") (<< "<<") (parenthesized_expression "(bVar2 & 0x1f)" (( "(") (binary_expression "bVar2 & 0x1f" (identifier "bVar2") (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "uVar1 = CONCAT44(param_2 >> (bVar3 & 0x1f),param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f));" (assignment_expression "uVar1 = CONCAT44(param_2 >> (bVar3 & 0x1f),param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f))" (identifier "uVar1") (= "=") (call_expression "CONCAT44(param_2 >> (bVar3 & 0x1f),param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f))" (identifier "CONCAT44") (argument_list "(param_2 >> (bVar3 & 0x1f),param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f))" (( "(") (binary_expression "param_2 >> (bVar3 & 0x1f)" (identifier "param_2") (>> ">>") (parenthesized_expression "(bVar3 & 0x1f)" (( "(") (binary_expression "bVar3 & 0x1f" (identifier "bVar3") (& "&") (number_literal "0x1f")) () ")"))) (, ",") (binary_expression "param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f)" (binary_expression "param_1 >> (bVar3 & 0x1f)" (identifier "param_1") (>> ">>") (parenthesized_expression "(bVar3 & 0x1f)" (( "(") (binary_expression "bVar3 & 0x1f" (identifier "bVar3") (& "&") (number_literal "0x1f")) () ")"))) (| "|") (binary_expression "param_2 << (bVar2 & 0x1f)" (identifier "param_2") (<< "<<") (parenthesized_expression "(bVar2 & 0x1f)" (( "(") (binary_expression "bVar2 & 0x1f" (identifier "bVar2") (& "&") (number_literal "0x1f")) () ")")))) () ")")))) (; ";")) (expression_statement "iVar5 = (int)(uVar1 % (ulonglong)uVar4);" (assignment_expression "iVar5 = (int)(uVar1 % (ulonglong)uVar4)" (identifier "iVar5") (= "=") (cast_expression "(int)(uVar1 % (ulonglong)uVar4)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uVar1 % (ulonglong)uVar4)" (( "(") (binary_expression "uVar1 % (ulonglong)uVar4" (identifier "uVar1") (% "%") (cast_expression "(ulonglong)uVar4" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar4"))) () ")")))) (; ";")) (expression_statement "uVar1 = (uVar1 / uVar4 & 0xffffffff) * (ulonglong)param_3;" (assignment_expression "uVar1 = (uVar1 / uVar4 & 0xffffffff) * (ulonglong)param_3" (identifier "uVar1") (= "=") (binary_expression "(uVar1 / uVar4 & 0xffffffff) * (ulonglong)param_3" (parenthesized_expression "(uVar1 / uVar4 & 0xffffffff)" (( "(") (binary_expression "uVar1 / uVar4 & 0xffffffff" (binary_expression "uVar1 / uVar4" (identifier "uVar1") (/ "/") (identifier "uVar4")) (& "&") (number_literal "0xffffffff")) () ")")) (* "*") (cast_expression "(ulonglong)param_3" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "param_3")))) (; ";")) (if_statement "if (CONCAT44(iVar5,uVar6) < uVar1) {\n    uVar1 = uVar1 - CONCAT44(uVar4,param_3);\n  }" (if "if") (parenthesized_expression "(CONCAT44(iVar5,uVar6) < uVar1)" (( "(") (binary_expression "CONCAT44(iVar5,uVar6) < uVar1" (call_expression "CONCAT44(iVar5,uVar6)" (identifier "CONCAT44") (argument_list "(iVar5,uVar6)" (( "(") (identifier "iVar5") (, ",") (identifier "uVar6") () ")"))) (< "<") (identifier "uVar1")) () ")")) (compound_statement "{\n    uVar1 = uVar1 - CONCAT44(uVar4,param_3);\n  }" ({ "{") (expression_statement "uVar1 = uVar1 - CONCAT44(uVar4,param_3);" (assignment_expression "uVar1 = uVar1 - CONCAT44(uVar4,param_3)" (identifier "uVar1") (= "=") (binary_expression "uVar1 - CONCAT44(uVar4,param_3)" (identifier "uVar1") (- "-") (call_expression "CONCAT44(uVar4,param_3)" (identifier "CONCAT44") (argument_list "(uVar4,param_3)" (( "(") (identifier "uVar4") (, ",") (identifier "param_3") () ")"))))) (; ";")) (} "}"))) (expression_statement "uVar4 = (iVar5 - (int)(uVar1 >> 0x20)) - (uint)(uVar6 < (uint)uVar1);" (assignment_expression "uVar4 = (iVar5 - (int)(uVar1 >> 0x20)) - (uint)(uVar6 < (uint)uVar1)" (identifier "uVar4") (= "=") (binary_expression "(iVar5 - (int)(uVar1 >> 0x20)) - (uint)(uVar6 < (uint)uVar1)" (parenthesized_expression "(iVar5 - (int)(uVar1 >> 0x20))" (( "(") (binary_expression "iVar5 - (int)(uVar1 >> 0x20)" (identifier "iVar5") (- "-") (cast_expression "(int)(uVar1 >> 0x20)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uVar1 >> 0x20)" (( "(") (binary_expression "uVar1 >> 0x20" (identifier "uVar1") (>> ">>") (number_literal "0x20")) () ")")))) () ")")) (- "-") (call_expression "(uint)(uVar6 < (uint)uVar1)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar6 < (uint)uVar1)" (( "(") (binary_expression "uVar6 < (uint)uVar1" (identifier "uVar6") (< "<") (cast_expression "(uint)uVar1" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "uVar1"))) () ")"))))) (; ";")) (return_statement "return CONCAT44(uVar4 >> (bVar2 & 0x1f),\n                  uVar4 << (bVar3 & 0x1f) | uVar6 - (uint)uVar1 >> (bVar2 & 0x1f));" (return "return") (call_expression "CONCAT44(uVar4 >> (bVar2 & 0x1f),\n                  uVar4 << (bVar3 & 0x1f) | uVar6 - (uint)uVar1 >> (bVar2 & 0x1f))" (identifier "CONCAT44") (argument_list "(uVar4 >> (bVar2 & 0x1f),\n                  uVar4 << (bVar3 & 0x1f) | uVar6 - (uint)uVar1 >> (bVar2 & 0x1f))" (( "(") (binary_expression "uVar4 >> (bVar2 & 0x1f)" (identifier "uVar4") (>> ">>") (parenthesized_expression "(bVar2 & 0x1f)" (( "(") (binary_expression "bVar2 & 0x1f" (identifier "bVar2") (& "&") (number_literal "0x1f")) () ")"))) (, ",") (binary_expression "uVar4 << (bVar3 & 0x1f) | uVar6 - (uint)uVar1 >> (bVar2 & 0x1f)" (binary_expression "uVar4 << (bVar3 & 0x1f)" (identifier "uVar4") (<< "<<") (parenthesized_expression "(bVar3 & 0x1f)" (( "(") (binary_expression "bVar3 & 0x1f" (identifier "bVar3") (& "&") (number_literal "0x1f")) () ")"))) (| "|") (binary_expression "uVar6 - (uint)uVar1 >> (bVar2 & 0x1f)" (binary_expression "uVar6 - (uint)uVar1" (identifier "uVar6") (- "-") (cast_expression "(uint)uVar1" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "uVar1"))) (>> ">>") (parenthesized_expression "(bVar2 & 0x1f)" (( "(") (binary_expression "bVar2 & 0x1f" (identifier "bVar2") (& "&") (number_literal "0x1f")) () ")")))) () ")"))) (; ";")) (} "}")))

/* WARNING: Removing unreachable block (ram,0x00025427) */

type_1 function_1(type_2 var_6,type_2 var_2,type_2 var_3,type_2 var_1)

{
  type_1 var_9;
  type_3 var_7;
  type_3 var_8;
  type_2 var_5;
  int var_10;
  type_2 var_11;
  bool bVar7;
  
  if (var_1 == 0) {
    if (var_2 < var_3) {
      var_5 = (type_2)(var_4(var_2,var_6) % (type_1)var_3);
    }
    else {
      if (var_3 == 0) {
        var_3 = 1 / 0;
      }
      var_5 = (type_2)(((type_1)var_2 % (type_1)var_3 << 0x20 | (type_1)var_6) %
                    (type_1)var_3);
    }
    return (type_1)var_5;
  }
  if (var_2 < var_1) {
    return var_4(var_2,var_6);
  }
  var_5 = 0x1f;
  if (var_1 != 0) {
    for (; var_1 >> var_5 == 0; var_5 = var_5 - 1) {
    }
  }
  if ((var_5 ^ 0x1f) == 0) {
    if ((var_1 < var_2) || (var_3 <= var_6)) {
      bVar7 = var_6 < var_3;
      var_6 = var_6 - var_3;
      var_2 = (var_2 - var_1) - (type_2)bVar7;
    }
    return var_4(var_2,var_6);
  }
  var_7 = (type_3)(var_5 ^ 0x1f);
  var_8 = 0x20 - var_7;
  var_5 = var_1 << (var_7 & 0x1f) | var_3 >> (var_8 & 0x1f);
  var_3 = var_3 << (var_7 & 0x1f);
  var_11 = var_6 << (var_7 & 0x1f);
  var_9 = var_4(var_2 >> (var_8 & 0x1f),var_6 >> (var_8 & 0x1f) | var_2 << (var_7 & 0x1f));
  var_10 = (int)(var_9 % (type_1)var_5);
  var_9 = (var_9 / var_5 & 0xffffffff) * (type_1)var_3;
  if (var_4(var_10,var_11) < var_9) {
    var_9 = var_9 - var_4(var_5,var_3);
  }
  var_5 = (var_10 - (int)(var_9 >> 0x20)) - (type_2)(var_11 < (type_2)var_9);
  return var_4(var_5 >> (var_7 & 0x1f),
                  var_5 << (var_8 & 0x1f) | var_11 - (type_2)var_9 >> (var_7 & 0x1f));
}


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

/* WARNING: Removing unreachable block (ram,0x00025427) */

ulonglong MASKED(uint param_1,uint param_2,uint param_3,uint param_4)

{
  ulonglong uVar1;
  byte bVar2;
  byte bVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  bool bVar7;
  
  if (param_4 == 0) {
    if (param_2 < param_3) {
      uVar4 = (uint)(CONCAT44(param_2,param_1) % (ulonglong)param_3);
    }
    else {
      if (param_3 == 0) {
        param_3 = 1 / 0;
      }
      uVar4 = (uint)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) %
                    (ulonglong)param_3);
    }
    return (ulonglong)uVar4;
  }
  if (param_2 < param_4) {
    return CONCAT44(param_2,param_1);
  }
  uVar4 = 0x1f;
  if (param_4 != 0) {
    for (; param_4 >> uVar4 == 0; uVar4 = uVar4 - 1) {
    }
  }
  if ((uVar4 ^ 0x1f) == 0) {
    if ((param_4 < param_2) || (param_3 <= param_1)) {
      bVar7 = param_1 < param_3;
      param_1 = param_1 - param_3;
      param_2 = (param_2 - param_4) - (uint)bVar7;
    }
    return CONCAT44(param_2,param_1);
  }
  bVar2 = (byte)(uVar4 ^ 0x1f);
  bVar3 = 0x20 - bVar2;
  uVar4 = param_4 << (bVar2 & 0x1f) | param_3 >> (bVar3 & 0x1f);
  param_3 = param_3 << (bVar2 & 0x1f);
  uVar6 = param_1 << (bVar2 & 0x1f);
  uVar1 = CONCAT44(param_2 >> (bVar3 & 0x1f),param_1 >> (bVar3 & 0x1f) | param_2 << (bVar2 & 0x1f));
  iVar5 = (int)(uVar1 % (ulonglong)uVar4);
  uVar1 = (uVar1 / uVar4 & 0xffffffff) * (ulonglong)param_3;
  if (CONCAT44(iVar5,uVar6) < uVar1) {
    uVar1 = uVar1 - CONCAT44(uVar4,param_3);
  }
  uVar4 = (iVar5 - (int)(uVar1 >> 0x20)) - (uint)(uVar6 < (uint)uVar1);
  return CONCAT44(uVar4 >> (bVar2 & 0x1f),
                  uVar4 << (bVar3 & 0x1f) | uVar6 - (uint)uVar1 >> (bVar2 & 0x1f));
}

