
void __regparm3 monty_reduce(BignumInt *x,BignumInt *n,BignumInt *mninv,BignumInt *tmp,int len)

{
  BignumInt *a;
  uint uVar1;
  BignumInt BVar2;
  uint uVar3;
  BignumInt BVar4;
  int iVar5;
  BignumInt *in_stack_ffffffcc;
  int in_stack_ffffffd0;
  BignumInt *in_stack_ffffffd4;
  
  a = x + len;
  internal_mul_low(a,mninv,tmp,len,tmp + len * 3);
  internal_mul((BignumInt *)len,tmp + len * 3,in_stack_ffffffcc,in_stack_ffffffd0,in_stack_ffffffd4)
  ;
  iVar5 = len * 2 + -1;
  if (iVar5 < 0) {
    uVar1 = 0;
    if (0 < len) goto LAB_0002d137;
  }
  else {
    uVar1 = 0;
    do {
      uVar3 = tmp[len + iVar5] + x[iVar5];
      BVar4 = uVar3 + uVar1;
      uVar1 = (uint)CARRY4(tmp[len + iVar5],x[iVar5]) + (uint)CARRY4(uVar3,uVar1);
      x[iVar5] = BVar4;
      iVar5 = iVar5 + -1;
    } while (iVar5 != -1);
    if (len < 1) {
      if (uVar1 != 0) {
        return;
      }
    }
    else {
LAB_0002d137:
      iVar5 = 0;
      do {
        a[iVar5] = x[iVar5];
        x[iVar5] = 0;
        iVar5 = iVar5 + 1;
      } while (iVar5 < len);
      if (uVar1 == 0) {
        BVar4 = *a;
        BVar2 = *n;
        if (BVar2 == BVar4) {
          iVar5 = 0;
          do {
            iVar5 = iVar5 + 1;
            if (len == iVar5) goto LAB_0002d1b1;
          } while (a[iVar5] == n[iVar5]);
          if (len <= iVar5) goto LAB_0002d1b1;
          BVar2 = n[iVar5];
          BVar4 = x[len + iVar5];
        }
        if (BVar4 <= BVar2) {
          return;
        }
        goto LAB_0002d1b1;
      }
    }
  }
  if (len + -1 < 0) {
    return;
  }
LAB_0002d1b1:
  iVar5 = len + -1;
  uVar1 = 1;
  do {
    uVar3 = uVar1 + a[iVar5];
    uVar1 = (uint)CARRY4(uVar1,a[iVar5]) + (uint)CARRY4(~n[iVar5],uVar3);
    a[iVar5] = ~n[iVar5] + uVar3;
    iVar5 = iVar5 + -1;
  } while (iVar5 != -1);
  return;
}



void __regparm2 FUN_0002d090(int param_1,uint *param_2,int param_3,int param_4)

{
  uint *puVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  
  iVar7 = param_3 + param_4 * 0xc;
  puVar1 = (uint *)(param_1 + param_4 * 4);
  FUN_0002ce60(param_4,iVar7);
  FUN_0002ca20(param_4,iVar7);
  iVar7 = param_4 * 2 + -1;
  if (iVar7 < 0) {
    uVar3 = 0;
    if (0 < param_4) goto LAB_0002d137;
  }
  else {
    uVar3 = 0;
    do {
      uVar6 = *(uint *)(param_1 + iVar7 * 4);
      uVar2 = *(uint *)(param_4 * 4 + param_3 + iVar7 * 4);
      uVar4 = uVar2 + uVar6;
      iVar5 = uVar4 + uVar3;
      uVar3 = (uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3);
      *(int *)(param_1 + iVar7 * 4) = iVar5;
      iVar7 = iVar7 + -1;
    } while (iVar7 != -1);
    if (param_4 < 1) {
      if (uVar3 != 0) {
        return;
      }
    }
    else {
LAB_0002d137:
      iVar7 = 0;
      do {
        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);
        *(undefined4 *)(param_1 + iVar7 * 4) = 0;
        iVar7 = iVar7 + 1;
      } while (iVar7 < param_4);
      if (uVar3 == 0) {
        uVar3 = *puVar1;
        uVar6 = *param_2;
        if (uVar6 == uVar3) {
          iVar7 = 0;
          do {
            iVar7 = iVar7 + 1;
            if (param_4 == iVar7) goto LAB_0002d1b1;
          } while (puVar1[iVar7] == param_2[iVar7]);
          if (param_4 <= iVar7) goto LAB_0002d1b1;
          uVar6 = param_2[iVar7];
          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);
        }
        if (uVar3 <= uVar6) {
          return;
        }
        goto LAB_0002d1b1;
      }
    }
  }
  if (param_4 + -1 < 0) {
    return;
  }
LAB_0002d1b1:
  param_4 = param_4 + -1;
  uVar3 = 1;
  do {
    uVar6 = uVar3 + puVar1[param_4];
    uVar3 = (uint)CARRY4(uVar3,puVar1[param_4]) + (uint)CARRY4(~param_2[param_4],uVar6);
    puVar1[param_4] = ~param_2[param_4] + uVar6;
    param_4 = param_4 + -1;
  } while (param_4 != -1);
  return;
}


PUSH EBP
MOV EBP,EAX
PUSH EDI
PUSH ESI
PUSH EBX
SUB ESP,0x24
MOV EAX,dword ptr [ESP + 0x3c]
MOV EBX,dword ptr [ESP + 0x38]
MOV dword ptr [ESP + 0x10],EDX
MOV EDX,ECX
LEA EDI,[EAX + EAX*0x1]
MOV EAX,dword ptr [ESP + 0x3c]
ADD EAX,EDI
LEA ESI,[EBX + EAX*0x4]
MOV EAX,dword ptr [ESP + 0x3c]
LEA EBX,[EAX*0x4 + 0x0]
LEA EAX,[EBP + EBX*0x1]
MOV dword ptr [ESP + 0x14],EAX
PUSH ESI
PUSH dword ptr [ESP + 0x40]
MOV ECX,dword ptr [ESP + 0x40]
CALL 0x0002ce60
ADD EBX,dword ptr [ESP + 0x40]
MOV dword ptr [ESP + 0x14],EBX
POP EAX
MOV ECX,EBX
POP EDX
PUSH ESI
PUSH dword ptr [ESP + 0x40]
MOV EDX,dword ptr [ESP + 0x18]
MOV EAX,dword ptr [ESP + 0x40]
CALL 0x0002ca20
ADD ESP,0x10
SUB EDI,0x1
JS 0x0002d218
MOV EDX,EDI
XOR EAX,EAX
LEA ESI,[ESI]
MOV EBX,dword ptr [ESP + 0x4]
MOV ESI,dword ptr [EBP + EDX*0x4]
XOR EDI,EDI
MOV ECX,dword ptr [EBX + EDX*0x4]
XOR EBX,EBX
ADD ECX,ESI
ADC EBX,EDI
XOR EDI,EDI
ADD ECX,EAX
ADC EBX,EDI
MOV dword ptr [EBP + EDX*0x4],ECX
SUB EDX,0x1
MOV EAX,EBX
CMP EDX,-0x1
JNZ 0x0002d108
MOV EDX,dword ptr [ESP + 0x34]
TEST EDX,EDX
JLE 0x0002d1a0
MOV EBX,dword ptr [ESP + 0xc]
MOV ESI,dword ptr [ESP + 0x34]
XOR EDX,EDX
LEA ESI,[ESI]
MOV ECX,dword ptr [EBP + EDX*0x4]
MOV dword ptr [EBX + EDX*0x4],ECX
MOV dword ptr [EBP + EDX*0x4],0x0
ADD EDX,0x1
CMP ESI,EDX
JG 0x0002d148
TEST EAX,EAX
JNZ 0x0002d1a8
MOV ECX,dword ptr [ESP + 0xc]
MOV EBX,dword ptr [ESP + 0x8]
MOV EDX,dword ptr [ECX]
MOV EAX,dword ptr [EBX]
CMP EAX,EDX
JNZ 0x0002d207
XOR EAX,EAX
MOV EDX,dword ptr [ESP + 0x34]
JMP 0x0002d188
MOV EDI,dword ptr [EBX + EAX*0x4]
CMP dword ptr [ECX + EAX*0x4],EDI
JNZ 0x0002d1f0
ADD EAX,0x1
CMP EDX,EAX
JNZ 0x0002d180
MOV EAX,dword ptr [ESP + 0x34]
LEA ECX,[EAX + -0x1]
JMP 0x0002d1b1
TEST EBX,EBX
JNZ 0x0002d1e5
LEA ESI,[ESI]
MOV ECX,dword ptr [ESP + 0x34]
SUB ECX,0x1
JS 0x0002d1e5
MOV EBP,dword ptr [ESP + 0xc]
MOV EBX,dword ptr [ESP + 0x8]
MOV ESI,0x1
NOP
MOV EAX,dword ptr [EBP + ECX*0x4]
XOR EDX,EDX
XOR EDI,EDI
ADD ESI,EAX
MOV EAX,dword ptr [EBX + ECX*0x4]
ADC EDI,EDX
XOR EDX,EDX
NOT EAX
ADD EAX,ESI
ADC EDX,EDI
MOV dword ptr [EBP + ECX*0x4],EAX
SUB ECX,0x1
MOV ESI,EDX
CMP ECX,-0x1
JNZ 0x0002d1c0
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
CMP dword ptr [ESP + 0x34],EAX
JLE 0x0002d18f
MOV EDX,dword ptr [ESP + 0x34]
MOV EDI,dword ptr [ESP + 0x8]
ADD EDX,EAX
MOV EAX,dword ptr [EDI + EAX*0x4]
MOV EDX,dword ptr [EBP + EDX*0x4]
CMP EDX,EAX
JBE 0x0002d1e5
MOV EAX,dword ptr [ESP + 0x34]
LEA ECX,[EAX + -0x1]
JMP 0x0002d1b1
MOV ECX,dword ptr [ESP + 0x34]
XOR EAX,EAX
TEST ECX,ECX
JG 0x0002d137
JMP 0x0002d1a8
(translation_unit "void __regparm2 FUN_0002d090(int param_1,uint *param_2,int param_3,int param_4)\n\n{\n  uint *puVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  int iVar5;\n  uint uVar6;\n  int iVar7;\n  \n  iVar7 = param_3 + param_4 * 0xc;\n  puVar1 = (uint *)(param_1 + param_4 * 4);\n  FUN_0002ce60(param_4,iVar7);\n  FUN_0002ca20(param_4,iVar7);\n  iVar7 = param_4 * 2 + -1;\n  if (iVar7 < 0) {\n    uVar3 = 0;\n    if (0 < param_4) goto LAB_0002d137;\n  }\n  else {\n    uVar3 = 0;\n    do {\n      uVar6 = *(uint *)(param_1 + iVar7 * 4);\n      uVar2 = *(uint *)(param_4 * 4 + param_3 + iVar7 * 4);\n      uVar4 = uVar2 + uVar6;\n      iVar5 = uVar4 + uVar3;\n      uVar3 = (uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3);\n      *(int *)(param_1 + iVar7 * 4) = iVar5;\n      iVar7 = iVar7 + -1;\n    } while (iVar7 != -1);\n    if (param_4 < 1) {\n      if (uVar3 != 0) {\n        return;\n      }\n    }\n    else {\nLAB_0002d137:\n      iVar7 = 0;\n      do {\n        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);\n        *(undefined4 *)(param_1 + iVar7 * 4) = 0;\n        iVar7 = iVar7 + 1;\n      } while (iVar7 < param_4);\n      if (uVar3 == 0) {\n        uVar3 = *puVar1;\n        uVar6 = *param_2;\n        if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }\n        if (uVar3 <= uVar6) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }\n  }\n  if (param_4 + -1 < 0) {\n    return;\n  }\nLAB_0002d1b1:\n  param_4 = param_4 + -1;\n  uVar3 = 1;\n  do {\n    uVar6 = uVar3 + puVar1[param_4];\n    uVar3 = (uint)CARRY4(uVar3,puVar1[param_4]) + (uint)CARRY4(~param_2[param_4],uVar6);\n    puVar1[param_4] = ~param_2[param_4] + uVar6;\n    param_4 = param_4 + -1;\n  } while (param_4 != -1);\n  return;\n}\n\n" (function_definition "void __regparm2 FUN_0002d090(int param_1,uint *param_2,int param_3,int param_4)\n\n{\n  uint *puVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  int iVar5;\n  uint uVar6;\n  int iVar7;\n  \n  iVar7 = param_3 + param_4 * 0xc;\n  puVar1 = (uint *)(param_1 + param_4 * 4);\n  FUN_0002ce60(param_4,iVar7);\n  FUN_0002ca20(param_4,iVar7);\n  iVar7 = param_4 * 2 + -1;\n  if (iVar7 < 0) {\n    uVar3 = 0;\n    if (0 < param_4) goto LAB_0002d137;\n  }\n  else {\n    uVar3 = 0;\n    do {\n      uVar6 = *(uint *)(param_1 + iVar7 * 4);\n      uVar2 = *(uint *)(param_4 * 4 + param_3 + iVar7 * 4);\n      uVar4 = uVar2 + uVar6;\n      iVar5 = uVar4 + uVar3;\n      uVar3 = (uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3);\n      *(int *)(param_1 + iVar7 * 4) = iVar5;\n      iVar7 = iVar7 + -1;\n    } while (iVar7 != -1);\n    if (param_4 < 1) {\n      if (uVar3 != 0) {\n        return;\n      }\n    }\n    else {\nLAB_0002d137:\n      iVar7 = 0;\n      do {\n        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);\n        *(undefined4 *)(param_1 + iVar7 * 4) = 0;\n        iVar7 = iVar7 + 1;\n      } while (iVar7 < param_4);\n      if (uVar3 == 0) {\n        uVar3 = *puVar1;\n        uVar6 = *param_2;\n        if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }\n        if (uVar3 <= uVar6) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }\n  }\n  if (param_4 + -1 < 0) {\n    return;\n  }\nLAB_0002d1b1:\n  param_4 = param_4 + -1;\n  uVar3 = 1;\n  do {\n    uVar6 = uVar3 + puVar1[param_4];\n    uVar3 = (uint)CARRY4(uVar3,puVar1[param_4]) + (uint)CARRY4(~param_2[param_4],uVar6);\n    puVar1[param_4] = ~param_2[param_4] + uVar6;\n    param_4 = param_4 + -1;\n  } while (param_4 != -1);\n  return;\n}" primitive_type (ERROR "__regparm2" identifier) (function_declarator "FUN_0002d090(int param_1,uint *param_2,int param_3,int param_4)" identifier (parameter_list "(int param_1,uint *param_2,int param_3,int param_4)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int param_4" primitive_type identifier) ))) (compound_statement "{\n  uint *puVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  int iVar5;\n  uint uVar6;\n  int iVar7;\n  \n  iVar7 = param_3 + param_4 * 0xc;\n  puVar1 = (uint *)(param_1 + param_4 * 4);\n  FUN_0002ce60(param_4,iVar7);\n  FUN_0002ca20(param_4,iVar7);\n  iVar7 = param_4 * 2 + -1;\n  if (iVar7 < 0) {\n    uVar3 = 0;\n    if (0 < param_4) goto LAB_0002d137;\n  }\n  else {\n    uVar3 = 0;\n    do {\n      uVar6 = *(uint *)(param_1 + iVar7 * 4);\n      uVar2 = *(uint *)(param_4 * 4 + param_3 + iVar7 * 4);\n      uVar4 = uVar2 + uVar6;\n      iVar5 = uVar4 + uVar3;\n      uVar3 = (uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3);\n      *(int *)(param_1 + iVar7 * 4) = iVar5;\n      iVar7 = iVar7 + -1;\n    } while (iVar7 != -1);\n    if (param_4 < 1) {\n      if (uVar3 != 0) {\n        return;\n      }\n    }\n    else {\nLAB_0002d137:\n      iVar7 = 0;\n      do {\n        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);\n        *(undefined4 *)(param_1 + iVar7 * 4) = 0;\n        iVar7 = iVar7 + 1;\n      } while (iVar7 < param_4);\n      if (uVar3 == 0) {\n        uVar3 = *puVar1;\n        uVar6 = *param_2;\n        if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }\n        if (uVar3 <= uVar6) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }\n  }\n  if (param_4 + -1 < 0) {\n    return;\n  }\nLAB_0002d1b1:\n  param_4 = param_4 + -1;\n  uVar3 = 1;\n  do {\n    uVar6 = uVar3 + puVar1[param_4];\n    uVar3 = (uint)CARRY4(uVar3,puVar1[param_4]) + (uint)CARRY4(~param_2[param_4],uVar6);\n    puVar1[param_4] = ~param_2[param_4] + uVar6;\n    param_4 = param_4 + -1;\n  } while (param_4 != -1);\n  return;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (expression_statement "iVar7 = param_3 + param_4 * 0xc;" (assignment_expression "iVar7 = param_3 + param_4 * 0xc" identifier = (binary_expression "param_3 + param_4 * 0xc" identifier + (binary_expression "param_4 * 0xc" identifier * number_literal))) ;) (expression_statement "puVar1 = (uint *)(param_1 + param_4 * 4);" (assignment_expression "puVar1 = (uint *)(param_1 + param_4 * 4)" identifier = (cast_expression "(uint *)(param_1 + param_4 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + param_4 * 4)" ( (binary_expression "param_1 + param_4 * 4" identifier + (binary_expression "param_4 * 4" identifier * number_literal)) )))) ;) (expression_statement "FUN_0002ce60(param_4,iVar7);" (call_expression "FUN_0002ce60(param_4,iVar7)" identifier (argument_list "(param_4,iVar7)" ( identifier , identifier ))) ;) (expression_statement "FUN_0002ca20(param_4,iVar7);" (call_expression "FUN_0002ca20(param_4,iVar7)" identifier (argument_list "(param_4,iVar7)" ( identifier , identifier ))) ;) (expression_statement "iVar7 = param_4 * 2 + -1;" (assignment_expression "iVar7 = param_4 * 2 + -1" identifier = (binary_expression "param_4 * 2 + -1" (binary_expression "param_4 * 2" identifier * number_literal) + number_literal)) ;) (if_statement "if (iVar7 < 0) {\n    uVar3 = 0;\n    if (0 < param_4) goto LAB_0002d137;\n  }\n  else {\n    uVar3 = 0;\n    do {\n      uVar6 = *(uint *)(param_1 + iVar7 * 4);\n      uVar2 = *(uint *)(param_4 * 4 + param_3 + iVar7 * 4);\n      uVar4 = uVar2 + uVar6;\n      iVar5 = uVar4 + uVar3;\n      uVar3 = (uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3);\n      *(int *)(param_1 + iVar7 * 4) = iVar5;\n      iVar7 = iVar7 + -1;\n    } while (iVar7 != -1);\n    if (param_4 < 1) {\n      if (uVar3 != 0) {\n        return;\n      }\n    }\n    else {\nLAB_0002d137:\n      iVar7 = 0;\n      do {\n        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);\n        *(undefined4 *)(param_1 + iVar7 * 4) = 0;\n        iVar7 = iVar7 + 1;\n      } while (iVar7 < param_4);\n      if (uVar3 == 0) {\n        uVar3 = *puVar1;\n        uVar6 = *param_2;\n        if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }\n        if (uVar3 <= uVar6) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }\n  }" if (parenthesized_expression "(iVar7 < 0)" ( (binary_expression "iVar7 < 0" identifier < number_literal) )) (compound_statement "{\n    uVar3 = 0;\n    if (0 < param_4) goto LAB_0002d137;\n  }" { (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) (if_statement "if (0 < param_4) goto LAB_0002d137;" if (parenthesized_expression "(0 < param_4)" ( (binary_expression "0 < param_4" number_literal < identifier) )) (goto_statement "goto LAB_0002d137;" goto statement_identifier ;)) }) (else_clause "else {\n    uVar3 = 0;\n    do {\n      uVar6 = *(uint *)(param_1 + iVar7 * 4);\n      uVar2 = *(uint *)(param_4 * 4 + param_3 + iVar7 * 4);\n      uVar4 = uVar2 + uVar6;\n      iVar5 = uVar4 + uVar3;\n      uVar3 = (uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3);\n      *(int *)(param_1 + iVar7 * 4) = iVar5;\n      iVar7 = iVar7 + -1;\n    } while (iVar7 != -1);\n    if (param_4 < 1) {\n      if (uVar3 != 0) {\n        return;\n      }\n    }\n    else {\nLAB_0002d137:\n      iVar7 = 0;\n      do {\n        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);\n        *(undefined4 *)(param_1 + iVar7 * 4) = 0;\n        iVar7 = iVar7 + 1;\n      } while (iVar7 < param_4);\n      if (uVar3 == 0) {\n        uVar3 = *puVar1;\n        uVar6 = *param_2;\n        if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }\n        if (uVar3 <= uVar6) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }\n  }" else (compound_statement "{\n    uVar3 = 0;\n    do {\n      uVar6 = *(uint *)(param_1 + iVar7 * 4);\n      uVar2 = *(uint *)(param_4 * 4 + param_3 + iVar7 * 4);\n      uVar4 = uVar2 + uVar6;\n      iVar5 = uVar4 + uVar3;\n      uVar3 = (uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3);\n      *(int *)(param_1 + iVar7 * 4) = iVar5;\n      iVar7 = iVar7 + -1;\n    } while (iVar7 != -1);\n    if (param_4 < 1) {\n      if (uVar3 != 0) {\n        return;\n      }\n    }\n    else {\nLAB_0002d137:\n      iVar7 = 0;\n      do {\n        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);\n        *(undefined4 *)(param_1 + iVar7 * 4) = 0;\n        iVar7 = iVar7 + 1;\n      } while (iVar7 < param_4);\n      if (uVar3 == 0) {\n        uVar3 = *puVar1;\n        uVar6 = *param_2;\n        if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }\n        if (uVar3 <= uVar6) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }\n  }" { (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) (do_statement "do {\n      uVar6 = *(uint *)(param_1 + iVar7 * 4);\n      uVar2 = *(uint *)(param_4 * 4 + param_3 + iVar7 * 4);\n      uVar4 = uVar2 + uVar6;\n      iVar5 = uVar4 + uVar3;\n      uVar3 = (uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3);\n      *(int *)(param_1 + iVar7 * 4) = iVar5;\n      iVar7 = iVar7 + -1;\n    } while (iVar7 != -1);" do (compound_statement "{\n      uVar6 = *(uint *)(param_1 + iVar7 * 4);\n      uVar2 = *(uint *)(param_4 * 4 + param_3 + iVar7 * 4);\n      uVar4 = uVar2 + uVar6;\n      iVar5 = uVar4 + uVar3;\n      uVar3 = (uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3);\n      *(int *)(param_1 + iVar7 * 4) = iVar5;\n      iVar7 = iVar7 + -1;\n    }" { (expression_statement "uVar6 = *(uint *)(param_1 + iVar7 * 4);" (assignment_expression "uVar6 = *(uint *)(param_1 + iVar7 * 4)" identifier = (pointer_expression "*(uint *)(param_1 + iVar7 * 4)" * (cast_expression "(uint *)(param_1 + iVar7 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + iVar7 * 4)" ( (binary_expression "param_1 + iVar7 * 4" identifier + (binary_expression "iVar7 * 4" identifier * number_literal)) ))))) ;) (expression_statement "uVar2 = *(uint *)(param_4 * 4 + param_3 + iVar7 * 4);" (assignment_expression "uVar2 = *(uint *)(param_4 * 4 + param_3 + iVar7 * 4)" identifier = (pointer_expression "*(uint *)(param_4 * 4 + param_3 + iVar7 * 4)" * (cast_expression "(uint *)(param_4 * 4 + param_3 + iVar7 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 * 4 + param_3 + iVar7 * 4)" ( (binary_expression "param_4 * 4 + param_3 + iVar7 * 4" (binary_expression "param_4 * 4 + param_3" (binary_expression "param_4 * 4" identifier * number_literal) + identifier) + (binary_expression "iVar7 * 4" identifier * number_literal)) ))))) ;) (expression_statement "uVar4 = uVar2 + uVar6;" (assignment_expression "uVar4 = uVar2 + uVar6" identifier = (binary_expression "uVar2 + uVar6" identifier + identifier)) ;) (expression_statement "iVar5 = uVar4 + uVar3;" (assignment_expression "iVar5 = uVar4 + uVar3" identifier = (binary_expression "uVar4 + uVar3" identifier + identifier)) ;) (expression_statement "uVar3 = (uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3);" (assignment_expression "uVar3 = (uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3)" identifier = (binary_expression "(uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3)" (cast_expression "(uint)CARRY4(uVar2,uVar6)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar2,uVar6)" identifier (argument_list "(uVar2,uVar6)" ( identifier , identifier )))) + (cast_expression "(uint)CARRY4(uVar4,uVar3)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar4,uVar3)" identifier (argument_list "(uVar4,uVar3)" ( identifier , identifier )))))) ;) (expression_statement "*(int *)(param_1 + iVar7 * 4) = iVar5;" (assignment_expression "*(int *)(param_1 + iVar7 * 4) = iVar5" (pointer_expression "*(int *)(param_1 + iVar7 * 4)" * (cast_expression "(int *)(param_1 + iVar7 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + iVar7 * 4)" ( (binary_expression "param_1 + iVar7 * 4" identifier + (binary_expression "iVar7 * 4" identifier * number_literal)) )))) = identifier) ;) (expression_statement "iVar7 = iVar7 + -1;" (assignment_expression "iVar7 = iVar7 + -1" identifier = (binary_expression "iVar7 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar7 != -1)" ( (binary_expression "iVar7 != -1" identifier != number_literal) )) ;) (if_statement "if (param_4 < 1) {\n      if (uVar3 != 0) {\n        return;\n      }\n    }\n    else {\nLAB_0002d137:\n      iVar7 = 0;\n      do {\n        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);\n        *(undefined4 *)(param_1 + iVar7 * 4) = 0;\n        iVar7 = iVar7 + 1;\n      } while (iVar7 < param_4);\n      if (uVar3 == 0) {\n        uVar3 = *puVar1;\n        uVar6 = *param_2;\n        if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }\n        if (uVar3 <= uVar6) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }" if (parenthesized_expression "(param_4 < 1)" ( (binary_expression "param_4 < 1" identifier < number_literal) )) (compound_statement "{\n      if (uVar3 != 0) {\n        return;\n      }\n    }" { (if_statement "if (uVar3 != 0) {\n        return;\n      }" if (parenthesized_expression "(uVar3 != 0)" ( (binary_expression "uVar3 != 0" identifier != number_literal) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) }) (else_clause "else {\nLAB_0002d137:\n      iVar7 = 0;\n      do {\n        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);\n        *(undefined4 *)(param_1 + iVar7 * 4) = 0;\n        iVar7 = iVar7 + 1;\n      } while (iVar7 < param_4);\n      if (uVar3 == 0) {\n        uVar3 = *puVar1;\n        uVar6 = *param_2;\n        if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }\n        if (uVar3 <= uVar6) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }" else (compound_statement "{\nLAB_0002d137:\n      iVar7 = 0;\n      do {\n        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);\n        *(undefined4 *)(param_1 + iVar7 * 4) = 0;\n        iVar7 = iVar7 + 1;\n      } while (iVar7 < param_4);\n      if (uVar3 == 0) {\n        uVar3 = *puVar1;\n        uVar6 = *param_2;\n        if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }\n        if (uVar3 <= uVar6) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }" { (labeled_statement "LAB_0002d137:\n      iVar7 = 0;" statement_identifier : (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;)) (do_statement "do {\n        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);\n        *(undefined4 *)(param_1 + iVar7 * 4) = 0;\n        iVar7 = iVar7 + 1;\n      } while (iVar7 < param_4);" do (compound_statement "{\n        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);\n        *(undefined4 *)(param_1 + iVar7 * 4) = 0;\n        iVar7 = iVar7 + 1;\n      }" { (expression_statement "puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);" (assignment_expression "puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4)" (subscript_expression "puVar1[iVar7]" identifier [ identifier ]) = (pointer_expression "*(uint *)(param_1 + iVar7 * 4)" * (cast_expression "(uint *)(param_1 + iVar7 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + iVar7 * 4)" ( (binary_expression "param_1 + iVar7 * 4" identifier + (binary_expression "iVar7 * 4" identifier * number_literal)) ))))) ;) (expression_statement "*(undefined4 *)(param_1 + iVar7 * 4) = 0;" (assignment_expression "*(undefined4 *)(param_1 + iVar7 * 4) = 0" (pointer_expression "*(undefined4 *)(param_1 + iVar7 * 4)" * (cast_expression "(undefined4 *)(param_1 + iVar7 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + iVar7 * 4)" ( (binary_expression "param_1 + iVar7 * 4" identifier + (binary_expression "iVar7 * 4" identifier * number_literal)) )))) = number_literal) ;) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar7 < param_4)" ( (binary_expression "iVar7 < param_4" identifier < identifier) )) ;) (if_statement "if (uVar3 == 0) {\n        uVar3 = *puVar1;\n        uVar6 = *param_2;\n        if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }\n        if (uVar3 <= uVar6) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }" if (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 0" identifier == number_literal) )) (compound_statement "{\n        uVar3 = *puVar1;\n        uVar6 = *param_2;\n        if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }\n        if (uVar3 <= uVar6) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }" { (expression_statement "uVar3 = *puVar1;" (assignment_expression "uVar3 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) (expression_statement "uVar6 = *param_2;" (assignment_expression "uVar6 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (if_statement "if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }" if (parenthesized_expression "(uVar6 == uVar3)" ( (binary_expression "uVar6 == uVar3" identifier == identifier) )) (compound_statement "{\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }" { (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (do_statement "do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);" do (compound_statement "{\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          }" { (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) (if_statement "if (param_4 == iVar7) goto LAB_0002d1b1;" if (parenthesized_expression "(param_4 == iVar7)" ( (binary_expression "param_4 == iVar7" identifier == identifier) )) (goto_statement "goto LAB_0002d1b1;" goto statement_identifier ;)) }) while (parenthesized_expression "(puVar1[iVar7] == param_2[iVar7])" ( (binary_expression "puVar1[iVar7] == param_2[iVar7]" (subscript_expression "puVar1[iVar7]" identifier [ identifier ]) == (subscript_expression "param_2[iVar7]" identifier [ identifier ])) )) ;) (if_statement "if (param_4 <= iVar7) goto LAB_0002d1b1;" if (parenthesized_expression "(param_4 <= iVar7)" ( (binary_expression "param_4 <= iVar7" identifier <= identifier) )) (goto_statement "goto LAB_0002d1b1;" goto statement_identifier ;)) (expression_statement "uVar6 = param_2[iVar7];" (assignment_expression "uVar6 = param_2[iVar7]" identifier = (subscript_expression "param_2[iVar7]" identifier [ identifier ])) ;) (expression_statement "uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);" (assignment_expression "uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4)" identifier = (pointer_expression "*(uint *)(param_1 + (param_4 + iVar7) * 4)" * (cast_expression "(uint *)(param_1 + (param_4 + iVar7) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + (param_4 + iVar7) * 4)" ( (binary_expression "param_1 + (param_4 + iVar7) * 4" identifier + (binary_expression "(param_4 + iVar7) * 4" (parenthesized_expression "(param_4 + iVar7)" ( (binary_expression "param_4 + iVar7" identifier + identifier) )) * number_literal)) ))))) ;) })) (if_statement "if (uVar3 <= uVar6) {\n          return;\n        }" if (parenthesized_expression "(uVar3 <= uVar6)" ( (binary_expression "uVar3 <= uVar6" identifier <= identifier) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) (goto_statement "goto LAB_0002d1b1;" goto statement_identifier ;) })) }))) }))) (if_statement "if (param_4 + -1 < 0) {\n    return;\n  }" if (parenthesized_expression "(param_4 + -1 < 0)" ( (binary_expression "param_4 + -1 < 0" (binary_expression "param_4 + -1" identifier + number_literal) < number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (labeled_statement "LAB_0002d1b1:\n  param_4 = param_4 + -1;" statement_identifier : (expression_statement "param_4 = param_4 + -1;" (assignment_expression "param_4 = param_4 + -1" identifier = (binary_expression "param_4 + -1" identifier + number_literal)) ;)) (expression_statement "uVar3 = 1;" (assignment_expression "uVar3 = 1" identifier = number_literal) ;) (do_statement "do {\n    uVar6 = uVar3 + puVar1[param_4];\n    uVar3 = (uint)CARRY4(uVar3,puVar1[param_4]) + (uint)CARRY4(~param_2[param_4],uVar6);\n    puVar1[param_4] = ~param_2[param_4] + uVar6;\n    param_4 = param_4 + -1;\n  } while (param_4 != -1);" do (compound_statement "{\n    uVar6 = uVar3 + puVar1[param_4];\n    uVar3 = (uint)CARRY4(uVar3,puVar1[param_4]) + (uint)CARRY4(~param_2[param_4],uVar6);\n    puVar1[param_4] = ~param_2[param_4] + uVar6;\n    param_4 = param_4 + -1;\n  }" { (expression_statement "uVar6 = uVar3 + puVar1[param_4];" (assignment_expression "uVar6 = uVar3 + puVar1[param_4]" identifier = (binary_expression "uVar3 + puVar1[param_4]" identifier + (subscript_expression "puVar1[param_4]" identifier [ identifier ]))) ;) (expression_statement "uVar3 = (uint)CARRY4(uVar3,puVar1[param_4]) + (uint)CARRY4(~param_2[param_4],uVar6);" (assignment_expression "uVar3 = (uint)CARRY4(uVar3,puVar1[param_4]) + (uint)CARRY4(~param_2[param_4],uVar6)" identifier = (binary_expression "(uint)CARRY4(uVar3,puVar1[param_4]) + (uint)CARRY4(~param_2[param_4],uVar6)" (cast_expression "(uint)CARRY4(uVar3,puVar1[param_4])" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar3,puVar1[param_4])" identifier (argument_list "(uVar3,puVar1[param_4])" ( identifier , (subscript_expression "puVar1[param_4]" identifier [ identifier ]) )))) + (cast_expression "(uint)CARRY4(~param_2[param_4],uVar6)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(~param_2[param_4],uVar6)" identifier (argument_list "(~param_2[param_4],uVar6)" ( (unary_expression "~param_2[param_4]" ~ (subscript_expression "param_2[param_4]" identifier [ identifier ])) , identifier )))))) ;) (expression_statement "puVar1[param_4] = ~param_2[param_4] + uVar6;" (assignment_expression "puVar1[param_4] = ~param_2[param_4] + uVar6" (subscript_expression "puVar1[param_4]" identifier [ identifier ]) = (binary_expression "~param_2[param_4] + uVar6" (unary_expression "~param_2[param_4]" ~ (subscript_expression "param_2[param_4]" identifier [ identifier ])) + identifier)) ;) (expression_statement "param_4 = param_4 + -1;" (assignment_expression "param_4 = param_4 + -1" identifier = (binary_expression "param_4 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(param_4 != -1)" ( (binary_expression "param_4 != -1" identifier != number_literal) )) ;) (return_statement "return;" return ;) })))
(translation_unit "void __regparm3 monty_reduce(BignumInt *x,BignumInt *n,BignumInt *mninv,BignumInt *tmp,int len)\n\n{\n  BignumInt *a;\n  uint uVar1;\n  BignumInt BVar2;\n  uint uVar3;\n  BignumInt BVar4;\n  int iVar5;\n  BignumInt *in_stack_ffffffcc;\n  int in_stack_ffffffd0;\n  BignumInt *in_stack_ffffffd4;\n  \n  a = x + len;\n  internal_mul_low(a,mninv,tmp,len,tmp + len * 3);\n  internal_mul((BignumInt *)len,tmp + len * 3,in_stack_ffffffcc,in_stack_ffffffd0,in_stack_ffffffd4)\n  ;\n  iVar5 = len * 2 + -1;\n  if (iVar5 < 0) {\n    uVar1 = 0;\n    if (0 < len) goto LAB_0002d137;\n  }\n  else {\n    uVar1 = 0;\n    do {\n      uVar3 = tmp[len + iVar5] + x[iVar5];\n      BVar4 = uVar3 + uVar1;\n      uVar1 = (uint)CARRY4(tmp[len + iVar5],x[iVar5]) + (uint)CARRY4(uVar3,uVar1);\n      x[iVar5] = BVar4;\n      iVar5 = iVar5 + -1;\n    } while (iVar5 != -1);\n    if (len < 1) {\n      if (uVar1 != 0) {\n        return;\n      }\n    }\n    else {\nLAB_0002d137:\n      iVar5 = 0;\n      do {\n        a[iVar5] = x[iVar5];\n        x[iVar5] = 0;\n        iVar5 = iVar5 + 1;\n      } while (iVar5 < len);\n      if (uVar1 == 0) {\n        BVar4 = *a;\n        BVar2 = *n;\n        if (BVar2 == BVar4) {\n          iVar5 = 0;\n          do {\n            iVar5 = iVar5 + 1;\n            if (len == iVar5) goto LAB_0002d1b1;\n          } while (a[iVar5] == n[iVar5]);\n          if (len <= iVar5) goto LAB_0002d1b1;\n          BVar2 = n[iVar5];\n          BVar4 = x[len + iVar5];\n        }\n        if (BVar4 <= BVar2) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }\n  }\n  if (len + -1 < 0) {\n    return;\n  }\nLAB_0002d1b1:\n  iVar5 = len + -1;\n  uVar1 = 1;\n  do {\n    uVar3 = uVar1 + a[iVar5];\n    uVar1 = (uint)CARRY4(uVar1,a[iVar5]) + (uint)CARRY4(~n[iVar5],uVar3);\n    a[iVar5] = ~n[iVar5] + uVar3;\n    iVar5 = iVar5 + -1;\n  } while (iVar5 != -1);\n  return;\n}\n\n" (function_definition "void __regparm3 monty_reduce(BignumInt *x,BignumInt *n,BignumInt *mninv,BignumInt *tmp,int len)\n\n{\n  BignumInt *a;\n  uint uVar1;\n  BignumInt BVar2;\n  uint uVar3;\n  BignumInt BVar4;\n  int iVar5;\n  BignumInt *in_stack_ffffffcc;\n  int in_stack_ffffffd0;\n  BignumInt *in_stack_ffffffd4;\n  \n  a = x + len;\n  internal_mul_low(a,mninv,tmp,len,tmp + len * 3);\n  internal_mul((BignumInt *)len,tmp + len * 3,in_stack_ffffffcc,in_stack_ffffffd0,in_stack_ffffffd4)\n  ;\n  iVar5 = len * 2 + -1;\n  if (iVar5 < 0) {\n    uVar1 = 0;\n    if (0 < len) goto LAB_0002d137;\n  }\n  else {\n    uVar1 = 0;\n    do {\n      uVar3 = tmp[len + iVar5] + x[iVar5];\n      BVar4 = uVar3 + uVar1;\n      uVar1 = (uint)CARRY4(tmp[len + iVar5],x[iVar5]) + (uint)CARRY4(uVar3,uVar1);\n      x[iVar5] = BVar4;\n      iVar5 = iVar5 + -1;\n    } while (iVar5 != -1);\n    if (len < 1) {\n      if (uVar1 != 0) {\n        return;\n      }\n    }\n    else {\nLAB_0002d137:\n      iVar5 = 0;\n      do {\n        a[iVar5] = x[iVar5];\n        x[iVar5] = 0;\n        iVar5 = iVar5 + 1;\n      } while (iVar5 < len);\n      if (uVar1 == 0) {\n        BVar4 = *a;\n        BVar2 = *n;\n        if (BVar2 == BVar4) {\n          iVar5 = 0;\n          do {\n            iVar5 = iVar5 + 1;\n            if (len == iVar5) goto LAB_0002d1b1;\n          } while (a[iVar5] == n[iVar5]);\n          if (len <= iVar5) goto LAB_0002d1b1;\n          BVar2 = n[iVar5];\n          BVar4 = x[len + iVar5];\n        }\n        if (BVar4 <= BVar2) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }\n  }\n  if (len + -1 < 0) {\n    return;\n  }\nLAB_0002d1b1:\n  iVar5 = len + -1;\n  uVar1 = 1;\n  do {\n    uVar3 = uVar1 + a[iVar5];\n    uVar1 = (uint)CARRY4(uVar1,a[iVar5]) + (uint)CARRY4(~n[iVar5],uVar3);\n    a[iVar5] = ~n[iVar5] + uVar3;\n    iVar5 = iVar5 + -1;\n  } while (iVar5 != -1);\n  return;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "monty_reduce(BignumInt *x,BignumInt *n,BignumInt *mninv,BignumInt *tmp,int len)" identifier (parameter_list "(BignumInt *x,BignumInt *n,BignumInt *mninv,BignumInt *tmp,int len)" ( (parameter_declaration "BignumInt *x" type_identifier (pointer_declarator "*x" * identifier)) , (parameter_declaration "BignumInt *n" type_identifier (pointer_declarator "*n" * identifier)) , (parameter_declaration "BignumInt *mninv" type_identifier (pointer_declarator "*mninv" * identifier)) , (parameter_declaration "BignumInt *tmp" type_identifier (pointer_declarator "*tmp" * identifier)) , (parameter_declaration "int len" primitive_type identifier) ))) (compound_statement "{\n  BignumInt *a;\n  uint uVar1;\n  BignumInt BVar2;\n  uint uVar3;\n  BignumInt BVar4;\n  int iVar5;\n  BignumInt *in_stack_ffffffcc;\n  int in_stack_ffffffd0;\n  BignumInt *in_stack_ffffffd4;\n  \n  a = x + len;\n  internal_mul_low(a,mninv,tmp,len,tmp + len * 3);\n  internal_mul((BignumInt *)len,tmp + len * 3,in_stack_ffffffcc,in_stack_ffffffd0,in_stack_ffffffd4)\n  ;\n  iVar5 = len * 2 + -1;\n  if (iVar5 < 0) {\n    uVar1 = 0;\n    if (0 < len) goto LAB_0002d137;\n  }\n  else {\n    uVar1 = 0;\n    do {\n      uVar3 = tmp[len + iVar5] + x[iVar5];\n      BVar4 = uVar3 + uVar1;\n      uVar1 = (uint)CARRY4(tmp[len + iVar5],x[iVar5]) + (uint)CARRY4(uVar3,uVar1);\n      x[iVar5] = BVar4;\n      iVar5 = iVar5 + -1;\n    } while (iVar5 != -1);\n    if (len < 1) {\n      if (uVar1 != 0) {\n        return;\n      }\n    }\n    else {\nLAB_0002d137:\n      iVar5 = 0;\n      do {\n        a[iVar5] = x[iVar5];\n        x[iVar5] = 0;\n        iVar5 = iVar5 + 1;\n      } while (iVar5 < len);\n      if (uVar1 == 0) {\n        BVar4 = *a;\n        BVar2 = *n;\n        if (BVar2 == BVar4) {\n          iVar5 = 0;\n          do {\n            iVar5 = iVar5 + 1;\n            if (len == iVar5) goto LAB_0002d1b1;\n          } while (a[iVar5] == n[iVar5]);\n          if (len <= iVar5) goto LAB_0002d1b1;\n          BVar2 = n[iVar5];\n          BVar4 = x[len + iVar5];\n        }\n        if (BVar4 <= BVar2) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }\n  }\n  if (len + -1 < 0) {\n    return;\n  }\nLAB_0002d1b1:\n  iVar5 = len + -1;\n  uVar1 = 1;\n  do {\n    uVar3 = uVar1 + a[iVar5];\n    uVar1 = (uint)CARRY4(uVar1,a[iVar5]) + (uint)CARRY4(~n[iVar5],uVar3);\n    a[iVar5] = ~n[iVar5] + uVar3;\n    iVar5 = iVar5 + -1;\n  } while (iVar5 != -1);\n  return;\n}" { (declaration "BignumInt *a;" type_identifier (pointer_declarator "*a" * identifier) ;) (declaration "uint uVar1;" type_identifier identifier ;) (declaration "BignumInt BVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "BignumInt BVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "BignumInt *in_stack_ffffffcc;" type_identifier (pointer_declarator "*in_stack_ffffffcc" * identifier) ;) (declaration "int in_stack_ffffffd0;" primitive_type identifier ;) (declaration "BignumInt *in_stack_ffffffd4;" type_identifier (pointer_declarator "*in_stack_ffffffd4" * identifier) ;) (expression_statement "a = x + len;" (assignment_expression "a = x + len" identifier = (binary_expression "x + len" identifier + identifier)) ;) (expression_statement "internal_mul_low(a,mninv,tmp,len,tmp + len * 3);" (call_expression "internal_mul_low(a,mninv,tmp,len,tmp + len * 3)" identifier (argument_list "(a,mninv,tmp,len,tmp + len * 3)" ( identifier , identifier , identifier , identifier , (binary_expression "tmp + len * 3" identifier + (binary_expression "len * 3" identifier * number_literal)) ))) ;) (expression_statement "internal_mul((BignumInt *)len,tmp + len * 3,in_stack_ffffffcc,in_stack_ffffffd0,in_stack_ffffffd4)\n  ;" (call_expression "internal_mul((BignumInt *)len,tmp + len * 3,in_stack_ffffffcc,in_stack_ffffffd0,in_stack_ffffffd4)" identifier (argument_list "((BignumInt *)len,tmp + len * 3,in_stack_ffffffcc,in_stack_ffffffd0,in_stack_ffffffd4)" ( (cast_expression "(BignumInt *)len" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , (binary_expression "tmp + len * 3" identifier + (binary_expression "len * 3" identifier * number_literal)) , identifier , identifier , identifier ))) ;) (expression_statement "iVar5 = len * 2 + -1;" (assignment_expression "iVar5 = len * 2 + -1" identifier = (binary_expression "len * 2 + -1" (binary_expression "len * 2" identifier * number_literal) + number_literal)) ;) (if_statement "if (iVar5 < 0) {\n    uVar1 = 0;\n    if (0 < len) goto LAB_0002d137;\n  }\n  else {\n    uVar1 = 0;\n    do {\n      uVar3 = tmp[len + iVar5] + x[iVar5];\n      BVar4 = uVar3 + uVar1;\n      uVar1 = (uint)CARRY4(tmp[len + iVar5],x[iVar5]) + (uint)CARRY4(uVar3,uVar1);\n      x[iVar5] = BVar4;\n      iVar5 = iVar5 + -1;\n    } while (iVar5 != -1);\n    if (len < 1) {\n      if (uVar1 != 0) {\n        return;\n      }\n    }\n    else {\nLAB_0002d137:\n      iVar5 = 0;\n      do {\n        a[iVar5] = x[iVar5];\n        x[iVar5] = 0;\n        iVar5 = iVar5 + 1;\n      } while (iVar5 < len);\n      if (uVar1 == 0) {\n        BVar4 = *a;\n        BVar2 = *n;\n        if (BVar2 == BVar4) {\n          iVar5 = 0;\n          do {\n            iVar5 = iVar5 + 1;\n            if (len == iVar5) goto LAB_0002d1b1;\n          } while (a[iVar5] == n[iVar5]);\n          if (len <= iVar5) goto LAB_0002d1b1;\n          BVar2 = n[iVar5];\n          BVar4 = x[len + iVar5];\n        }\n        if (BVar4 <= BVar2) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }\n  }" if (parenthesized_expression "(iVar5 < 0)" ( (binary_expression "iVar5 < 0" identifier < number_literal) )) (compound_statement "{\n    uVar1 = 0;\n    if (0 < len) goto LAB_0002d137;\n  }" { (expression_statement "uVar1 = 0;" (assignment_expression "uVar1 = 0" identifier = number_literal) ;) (if_statement "if (0 < len) goto LAB_0002d137;" if (parenthesized_expression "(0 < len)" ( (binary_expression "0 < len" number_literal < identifier) )) (goto_statement "goto LAB_0002d137;" goto statement_identifier ;)) }) (else_clause "else {\n    uVar1 = 0;\n    do {\n      uVar3 = tmp[len + iVar5] + x[iVar5];\n      BVar4 = uVar3 + uVar1;\n      uVar1 = (uint)CARRY4(tmp[len + iVar5],x[iVar5]) + (uint)CARRY4(uVar3,uVar1);\n      x[iVar5] = BVar4;\n      iVar5 = iVar5 + -1;\n    } while (iVar5 != -1);\n    if (len < 1) {\n      if (uVar1 != 0) {\n        return;\n      }\n    }\n    else {\nLAB_0002d137:\n      iVar5 = 0;\n      do {\n        a[iVar5] = x[iVar5];\n        x[iVar5] = 0;\n        iVar5 = iVar5 + 1;\n      } while (iVar5 < len);\n      if (uVar1 == 0) {\n        BVar4 = *a;\n        BVar2 = *n;\n        if (BVar2 == BVar4) {\n          iVar5 = 0;\n          do {\n            iVar5 = iVar5 + 1;\n            if (len == iVar5) goto LAB_0002d1b1;\n          } while (a[iVar5] == n[iVar5]);\n          if (len <= iVar5) goto LAB_0002d1b1;\n          BVar2 = n[iVar5];\n          BVar4 = x[len + iVar5];\n        }\n        if (BVar4 <= BVar2) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }\n  }" else (compound_statement "{\n    uVar1 = 0;\n    do {\n      uVar3 = tmp[len + iVar5] + x[iVar5];\n      BVar4 = uVar3 + uVar1;\n      uVar1 = (uint)CARRY4(tmp[len + iVar5],x[iVar5]) + (uint)CARRY4(uVar3,uVar1);\n      x[iVar5] = BVar4;\n      iVar5 = iVar5 + -1;\n    } while (iVar5 != -1);\n    if (len < 1) {\n      if (uVar1 != 0) {\n        return;\n      }\n    }\n    else {\nLAB_0002d137:\n      iVar5 = 0;\n      do {\n        a[iVar5] = x[iVar5];\n        x[iVar5] = 0;\n        iVar5 = iVar5 + 1;\n      } while (iVar5 < len);\n      if (uVar1 == 0) {\n        BVar4 = *a;\n        BVar2 = *n;\n        if (BVar2 == BVar4) {\n          iVar5 = 0;\n          do {\n            iVar5 = iVar5 + 1;\n            if (len == iVar5) goto LAB_0002d1b1;\n          } while (a[iVar5] == n[iVar5]);\n          if (len <= iVar5) goto LAB_0002d1b1;\n          BVar2 = n[iVar5];\n          BVar4 = x[len + iVar5];\n        }\n        if (BVar4 <= BVar2) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }\n  }" { (expression_statement "uVar1 = 0;" (assignment_expression "uVar1 = 0" identifier = number_literal) ;) (do_statement "do {\n      uVar3 = tmp[len + iVar5] + x[iVar5];\n      BVar4 = uVar3 + uVar1;\n      uVar1 = (uint)CARRY4(tmp[len + iVar5],x[iVar5]) + (uint)CARRY4(uVar3,uVar1);\n      x[iVar5] = BVar4;\n      iVar5 = iVar5 + -1;\n    } while (iVar5 != -1);" do (compound_statement "{\n      uVar3 = tmp[len + iVar5] + x[iVar5];\n      BVar4 = uVar3 + uVar1;\n      uVar1 = (uint)CARRY4(tmp[len + iVar5],x[iVar5]) + (uint)CARRY4(uVar3,uVar1);\n      x[iVar5] = BVar4;\n      iVar5 = iVar5 + -1;\n    }" { (expression_statement "uVar3 = tmp[len + iVar5] + x[iVar5];" (assignment_expression "uVar3 = tmp[len + iVar5] + x[iVar5]" identifier = (binary_expression "tmp[len + iVar5] + x[iVar5]" (subscript_expression "tmp[len + iVar5]" identifier [ (binary_expression "len + iVar5" identifier + identifier) ]) + (subscript_expression "x[iVar5]" identifier [ identifier ]))) ;) (expression_statement "BVar4 = uVar3 + uVar1;" (assignment_expression "BVar4 = uVar3 + uVar1" identifier = (binary_expression "uVar3 + uVar1" identifier + identifier)) ;) (expression_statement "uVar1 = (uint)CARRY4(tmp[len + iVar5],x[iVar5]) + (uint)CARRY4(uVar3,uVar1);" (assignment_expression "uVar1 = (uint)CARRY4(tmp[len + iVar5],x[iVar5]) + (uint)CARRY4(uVar3,uVar1)" identifier = (binary_expression "(uint)CARRY4(tmp[len + iVar5],x[iVar5]) + (uint)CARRY4(uVar3,uVar1)" (cast_expression "(uint)CARRY4(tmp[len + iVar5],x[iVar5])" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(tmp[len + iVar5],x[iVar5])" identifier (argument_list "(tmp[len + iVar5],x[iVar5])" ( (subscript_expression "tmp[len + iVar5]" identifier [ (binary_expression "len + iVar5" identifier + identifier) ]) , (subscript_expression "x[iVar5]" identifier [ identifier ]) )))) + (cast_expression "(uint)CARRY4(uVar3,uVar1)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar3,uVar1)" identifier (argument_list "(uVar3,uVar1)" ( identifier , identifier )))))) ;) (expression_statement "x[iVar5] = BVar4;" (assignment_expression "x[iVar5] = BVar4" (subscript_expression "x[iVar5]" identifier [ identifier ]) = identifier) ;) (expression_statement "iVar5 = iVar5 + -1;" (assignment_expression "iVar5 = iVar5 + -1" identifier = (binary_expression "iVar5 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar5 != -1)" ( (binary_expression "iVar5 != -1" identifier != number_literal) )) ;) (if_statement "if (len < 1) {\n      if (uVar1 != 0) {\n        return;\n      }\n    }\n    else {\nLAB_0002d137:\n      iVar5 = 0;\n      do {\n        a[iVar5] = x[iVar5];\n        x[iVar5] = 0;\n        iVar5 = iVar5 + 1;\n      } while (iVar5 < len);\n      if (uVar1 == 0) {\n        BVar4 = *a;\n        BVar2 = *n;\n        if (BVar2 == BVar4) {\n          iVar5 = 0;\n          do {\n            iVar5 = iVar5 + 1;\n            if (len == iVar5) goto LAB_0002d1b1;\n          } while (a[iVar5] == n[iVar5]);\n          if (len <= iVar5) goto LAB_0002d1b1;\n          BVar2 = n[iVar5];\n          BVar4 = x[len + iVar5];\n        }\n        if (BVar4 <= BVar2) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }" if (parenthesized_expression "(len < 1)" ( (binary_expression "len < 1" identifier < number_literal) )) (compound_statement "{\n      if (uVar1 != 0) {\n        return;\n      }\n    }" { (if_statement "if (uVar1 != 0) {\n        return;\n      }" if (parenthesized_expression "(uVar1 != 0)" ( (binary_expression "uVar1 != 0" identifier != number_literal) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) }) (else_clause "else {\nLAB_0002d137:\n      iVar5 = 0;\n      do {\n        a[iVar5] = x[iVar5];\n        x[iVar5] = 0;\n        iVar5 = iVar5 + 1;\n      } while (iVar5 < len);\n      if (uVar1 == 0) {\n        BVar4 = *a;\n        BVar2 = *n;\n        if (BVar2 == BVar4) {\n          iVar5 = 0;\n          do {\n            iVar5 = iVar5 + 1;\n            if (len == iVar5) goto LAB_0002d1b1;\n          } while (a[iVar5] == n[iVar5]);\n          if (len <= iVar5) goto LAB_0002d1b1;\n          BVar2 = n[iVar5];\n          BVar4 = x[len + iVar5];\n        }\n        if (BVar4 <= BVar2) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }" else (compound_statement "{\nLAB_0002d137:\n      iVar5 = 0;\n      do {\n        a[iVar5] = x[iVar5];\n        x[iVar5] = 0;\n        iVar5 = iVar5 + 1;\n      } while (iVar5 < len);\n      if (uVar1 == 0) {\n        BVar4 = *a;\n        BVar2 = *n;\n        if (BVar2 == BVar4) {\n          iVar5 = 0;\n          do {\n            iVar5 = iVar5 + 1;\n            if (len == iVar5) goto LAB_0002d1b1;\n          } while (a[iVar5] == n[iVar5]);\n          if (len <= iVar5) goto LAB_0002d1b1;\n          BVar2 = n[iVar5];\n          BVar4 = x[len + iVar5];\n        }\n        if (BVar4 <= BVar2) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }" { (labeled_statement "LAB_0002d137:\n      iVar5 = 0;" statement_identifier : (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;)) (do_statement "do {\n        a[iVar5] = x[iVar5];\n        x[iVar5] = 0;\n        iVar5 = iVar5 + 1;\n      } while (iVar5 < len);" do (compound_statement "{\n        a[iVar5] = x[iVar5];\n        x[iVar5] = 0;\n        iVar5 = iVar5 + 1;\n      }" { (expression_statement "a[iVar5] = x[iVar5];" (assignment_expression "a[iVar5] = x[iVar5]" (subscript_expression "a[iVar5]" identifier [ identifier ]) = (subscript_expression "x[iVar5]" identifier [ identifier ])) ;) (expression_statement "x[iVar5] = 0;" (assignment_expression "x[iVar5] = 0" (subscript_expression "x[iVar5]" identifier [ identifier ]) = number_literal) ;) (expression_statement "iVar5 = iVar5 + 1;" (assignment_expression "iVar5 = iVar5 + 1" identifier = (binary_expression "iVar5 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar5 < len)" ( (binary_expression "iVar5 < len" identifier < identifier) )) ;) (if_statement "if (uVar1 == 0) {\n        BVar4 = *a;\n        BVar2 = *n;\n        if (BVar2 == BVar4) {\n          iVar5 = 0;\n          do {\n            iVar5 = iVar5 + 1;\n            if (len == iVar5) goto LAB_0002d1b1;\n          } while (a[iVar5] == n[iVar5]);\n          if (len <= iVar5) goto LAB_0002d1b1;\n          BVar2 = n[iVar5];\n          BVar4 = x[len + iVar5];\n        }\n        if (BVar4 <= BVar2) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n        BVar4 = *a;\n        BVar2 = *n;\n        if (BVar2 == BVar4) {\n          iVar5 = 0;\n          do {\n            iVar5 = iVar5 + 1;\n            if (len == iVar5) goto LAB_0002d1b1;\n          } while (a[iVar5] == n[iVar5]);\n          if (len <= iVar5) goto LAB_0002d1b1;\n          BVar2 = n[iVar5];\n          BVar4 = x[len + iVar5];\n        }\n        if (BVar4 <= BVar2) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }" { (expression_statement "BVar4 = *a;" (assignment_expression "BVar4 = *a" identifier = (pointer_expression "*a" * identifier)) ;) (expression_statement "BVar2 = *n;" (assignment_expression "BVar2 = *n" identifier = (pointer_expression "*n" * identifier)) ;) (if_statement "if (BVar2 == BVar4) {\n          iVar5 = 0;\n          do {\n            iVar5 = iVar5 + 1;\n            if (len == iVar5) goto LAB_0002d1b1;\n          } while (a[iVar5] == n[iVar5]);\n          if (len <= iVar5) goto LAB_0002d1b1;\n          BVar2 = n[iVar5];\n          BVar4 = x[len + iVar5];\n        }" if (parenthesized_expression "(BVar2 == BVar4)" ( (binary_expression "BVar2 == BVar4" identifier == identifier) )) (compound_statement "{\n          iVar5 = 0;\n          do {\n            iVar5 = iVar5 + 1;\n            if (len == iVar5) goto LAB_0002d1b1;\n          } while (a[iVar5] == n[iVar5]);\n          if (len <= iVar5) goto LAB_0002d1b1;\n          BVar2 = n[iVar5];\n          BVar4 = x[len + iVar5];\n        }" { (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) (do_statement "do {\n            iVar5 = iVar5 + 1;\n            if (len == iVar5) goto LAB_0002d1b1;\n          } while (a[iVar5] == n[iVar5]);" do (compound_statement "{\n            iVar5 = iVar5 + 1;\n            if (len == iVar5) goto LAB_0002d1b1;\n          }" { (expression_statement "iVar5 = iVar5 + 1;" (assignment_expression "iVar5 = iVar5 + 1" identifier = (binary_expression "iVar5 + 1" identifier + number_literal)) ;) (if_statement "if (len == iVar5) goto LAB_0002d1b1;" if (parenthesized_expression "(len == iVar5)" ( (binary_expression "len == iVar5" identifier == identifier) )) (goto_statement "goto LAB_0002d1b1;" goto statement_identifier ;)) }) while (parenthesized_expression "(a[iVar5] == n[iVar5])" ( (binary_expression "a[iVar5] == n[iVar5]" (subscript_expression "a[iVar5]" identifier [ identifier ]) == (subscript_expression "n[iVar5]" identifier [ identifier ])) )) ;) (if_statement "if (len <= iVar5) goto LAB_0002d1b1;" if (parenthesized_expression "(len <= iVar5)" ( (binary_expression "len <= iVar5" identifier <= identifier) )) (goto_statement "goto LAB_0002d1b1;" goto statement_identifier ;)) (expression_statement "BVar2 = n[iVar5];" (assignment_expression "BVar2 = n[iVar5]" identifier = (subscript_expression "n[iVar5]" identifier [ identifier ])) ;) (expression_statement "BVar4 = x[len + iVar5];" (assignment_expression "BVar4 = x[len + iVar5]" identifier = (subscript_expression "x[len + iVar5]" identifier [ (binary_expression "len + iVar5" identifier + identifier) ])) ;) })) (if_statement "if (BVar4 <= BVar2) {\n          return;\n        }" if (parenthesized_expression "(BVar4 <= BVar2)" ( (binary_expression "BVar4 <= BVar2" identifier <= identifier) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) (goto_statement "goto LAB_0002d1b1;" goto statement_identifier ;) })) }))) }))) (if_statement "if (len + -1 < 0) {\n    return;\n  }" if (parenthesized_expression "(len + -1 < 0)" ( (binary_expression "len + -1 < 0" (binary_expression "len + -1" identifier + number_literal) < number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (labeled_statement "LAB_0002d1b1:\n  iVar5 = len + -1;" statement_identifier : (expression_statement "iVar5 = len + -1;" (assignment_expression "iVar5 = len + -1" identifier = (binary_expression "len + -1" identifier + number_literal)) ;)) (expression_statement "uVar1 = 1;" (assignment_expression "uVar1 = 1" identifier = number_literal) ;) (do_statement "do {\n    uVar3 = uVar1 + a[iVar5];\n    uVar1 = (uint)CARRY4(uVar1,a[iVar5]) + (uint)CARRY4(~n[iVar5],uVar3);\n    a[iVar5] = ~n[iVar5] + uVar3;\n    iVar5 = iVar5 + -1;\n  } while (iVar5 != -1);" do (compound_statement "{\n    uVar3 = uVar1 + a[iVar5];\n    uVar1 = (uint)CARRY4(uVar1,a[iVar5]) + (uint)CARRY4(~n[iVar5],uVar3);\n    a[iVar5] = ~n[iVar5] + uVar3;\n    iVar5 = iVar5 + -1;\n  }" { (expression_statement "uVar3 = uVar1 + a[iVar5];" (assignment_expression "uVar3 = uVar1 + a[iVar5]" identifier = (binary_expression "uVar1 + a[iVar5]" identifier + (subscript_expression "a[iVar5]" identifier [ identifier ]))) ;) (expression_statement "uVar1 = (uint)CARRY4(uVar1,a[iVar5]) + (uint)CARRY4(~n[iVar5],uVar3);" (assignment_expression "uVar1 = (uint)CARRY4(uVar1,a[iVar5]) + (uint)CARRY4(~n[iVar5],uVar3)" identifier = (binary_expression "(uint)CARRY4(uVar1,a[iVar5]) + (uint)CARRY4(~n[iVar5],uVar3)" (cast_expression "(uint)CARRY4(uVar1,a[iVar5])" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar1,a[iVar5])" identifier (argument_list "(uVar1,a[iVar5])" ( identifier , (subscript_expression "a[iVar5]" identifier [ identifier ]) )))) + (cast_expression "(uint)CARRY4(~n[iVar5],uVar3)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(~n[iVar5],uVar3)" identifier (argument_list "(~n[iVar5],uVar3)" ( (unary_expression "~n[iVar5]" ~ (subscript_expression "n[iVar5]" identifier [ identifier ])) , identifier )))))) ;) (expression_statement "a[iVar5] = ~n[iVar5] + uVar3;" (assignment_expression "a[iVar5] = ~n[iVar5] + uVar3" (subscript_expression "a[iVar5]" identifier [ identifier ]) = (binary_expression "~n[iVar5] + uVar3" (unary_expression "~n[iVar5]" ~ (subscript_expression "n[iVar5]" identifier [ identifier ])) + identifier)) ;) (expression_statement "iVar5 = iVar5 + -1;" (assignment_expression "iVar5 = iVar5 + -1" identifier = (binary_expression "iVar5 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar5 != -1)" ( (binary_expression "iVar5 != -1" identifier != number_literal) )) ;) (return_statement "return;" return ;) })))
(translation_unit "void __regparm2 FUN_0002d090(int param_1,uint *param_2,int param_3,int param_4)\n\n{\n  uint *puVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  int iVar5;\n  uint uVar6;\n  int iVar7;\n  \n  iVar7 = param_3 + param_4 * 0xc;\n  puVar1 = (uint *)(param_1 + param_4 * 4);\n  FUN_0002ce60(param_4,iVar7);\n  FUN_0002ca20(param_4,iVar7);\n  iVar7 = param_4 * 2 + -1;\n  if (iVar7 < 0) {\n    uVar3 = 0;\n    if (0 < param_4) goto LAB_0002d137;\n  }\n  else {\n    uVar3 = 0;\n    do {\n      uVar6 = *(uint *)(param_1 + iVar7 * 4);\n      uVar2 = *(uint *)(param_4 * 4 + param_3 + iVar7 * 4);\n      uVar4 = uVar2 + uVar6;\n      iVar5 = uVar4 + uVar3;\n      uVar3 = (uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3);\n      *(int *)(param_1 + iVar7 * 4) = iVar5;\n      iVar7 = iVar7 + -1;\n    } while (iVar7 != -1);\n    if (param_4 < 1) {\n      if (uVar3 != 0) {\n        return;\n      }\n    }\n    else {\nLAB_0002d137:\n      iVar7 = 0;\n      do {\n        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);\n        *(undefined4 *)(param_1 + iVar7 * 4) = 0;\n        iVar7 = iVar7 + 1;\n      } while (iVar7 < param_4);\n      if (uVar3 == 0) {\n        uVar3 = *puVar1;\n        uVar6 = *param_2;\n        if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }\n        if (uVar3 <= uVar6) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }\n  }\n  if (param_4 + -1 < 0) {\n    return;\n  }\nLAB_0002d1b1:\n  param_4 = param_4 + -1;\n  uVar3 = 1;\n  do {\n    uVar6 = uVar3 + puVar1[param_4];\n    uVar3 = (uint)CARRY4(uVar3,puVar1[param_4]) + (uint)CARRY4(~param_2[param_4],uVar6);\n    puVar1[param_4] = ~param_2[param_4] + uVar6;\n    param_4 = param_4 + -1;\n  } while (param_4 != -1);\n  return;\n}\n\n" (function_definition "void __regparm2 FUN_0002d090(int param_1,uint *param_2,int param_3,int param_4)\n\n{\n  uint *puVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  int iVar5;\n  uint uVar6;\n  int iVar7;\n  \n  iVar7 = param_3 + param_4 * 0xc;\n  puVar1 = (uint *)(param_1 + param_4 * 4);\n  FUN_0002ce60(param_4,iVar7);\n  FUN_0002ca20(param_4,iVar7);\n  iVar7 = param_4 * 2 + -1;\n  if (iVar7 < 0) {\n    uVar3 = 0;\n    if (0 < param_4) goto LAB_0002d137;\n  }\n  else {\n    uVar3 = 0;\n    do {\n      uVar6 = *(uint *)(param_1 + iVar7 * 4);\n      uVar2 = *(uint *)(param_4 * 4 + param_3 + iVar7 * 4);\n      uVar4 = uVar2 + uVar6;\n      iVar5 = uVar4 + uVar3;\n      uVar3 = (uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3);\n      *(int *)(param_1 + iVar7 * 4) = iVar5;\n      iVar7 = iVar7 + -1;\n    } while (iVar7 != -1);\n    if (param_4 < 1) {\n      if (uVar3 != 0) {\n        return;\n      }\n    }\n    else {\nLAB_0002d137:\n      iVar7 = 0;\n      do {\n        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);\n        *(undefined4 *)(param_1 + iVar7 * 4) = 0;\n        iVar7 = iVar7 + 1;\n      } while (iVar7 < param_4);\n      if (uVar3 == 0) {\n        uVar3 = *puVar1;\n        uVar6 = *param_2;\n        if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }\n        if (uVar3 <= uVar6) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }\n  }\n  if (param_4 + -1 < 0) {\n    return;\n  }\nLAB_0002d1b1:\n  param_4 = param_4 + -1;\n  uVar3 = 1;\n  do {\n    uVar6 = uVar3 + puVar1[param_4];\n    uVar3 = (uint)CARRY4(uVar3,puVar1[param_4]) + (uint)CARRY4(~param_2[param_4],uVar6);\n    puVar1[param_4] = ~param_2[param_4] + uVar6;\n    param_4 = param_4 + -1;\n  } while (param_4 != -1);\n  return;\n}" primitive_type (ERROR "__regparm2" identifier) (function_declarator "FUN_0002d090(int param_1,uint *param_2,int param_3,int param_4)" identifier (parameter_list "(int param_1,uint *param_2,int param_3,int param_4)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int param_4" primitive_type identifier) ))) (compound_statement "{\n  uint *puVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  int iVar5;\n  uint uVar6;\n  int iVar7;\n  \n  iVar7 = param_3 + param_4 * 0xc;\n  puVar1 = (uint *)(param_1 + param_4 * 4);\n  FUN_0002ce60(param_4,iVar7);\n  FUN_0002ca20(param_4,iVar7);\n  iVar7 = param_4 * 2 + -1;\n  if (iVar7 < 0) {\n    uVar3 = 0;\n    if (0 < param_4) goto LAB_0002d137;\n  }\n  else {\n    uVar3 = 0;\n    do {\n      uVar6 = *(uint *)(param_1 + iVar7 * 4);\n      uVar2 = *(uint *)(param_4 * 4 + param_3 + iVar7 * 4);\n      uVar4 = uVar2 + uVar6;\n      iVar5 = uVar4 + uVar3;\n      uVar3 = (uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3);\n      *(int *)(param_1 + iVar7 * 4) = iVar5;\n      iVar7 = iVar7 + -1;\n    } while (iVar7 != -1);\n    if (param_4 < 1) {\n      if (uVar3 != 0) {\n        return;\n      }\n    }\n    else {\nLAB_0002d137:\n      iVar7 = 0;\n      do {\n        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);\n        *(undefined4 *)(param_1 + iVar7 * 4) = 0;\n        iVar7 = iVar7 + 1;\n      } while (iVar7 < param_4);\n      if (uVar3 == 0) {\n        uVar3 = *puVar1;\n        uVar6 = *param_2;\n        if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }\n        if (uVar3 <= uVar6) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }\n  }\n  if (param_4 + -1 < 0) {\n    return;\n  }\nLAB_0002d1b1:\n  param_4 = param_4 + -1;\n  uVar3 = 1;\n  do {\n    uVar6 = uVar3 + puVar1[param_4];\n    uVar3 = (uint)CARRY4(uVar3,puVar1[param_4]) + (uint)CARRY4(~param_2[param_4],uVar6);\n    puVar1[param_4] = ~param_2[param_4] + uVar6;\n    param_4 = param_4 + -1;\n  } while (param_4 != -1);\n  return;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (expression_statement "iVar7 = param_3 + param_4 * 0xc;" (assignment_expression "iVar7 = param_3 + param_4 * 0xc" identifier = (binary_expression "param_3 + param_4 * 0xc" identifier + (binary_expression "param_4 * 0xc" identifier * number_literal))) ;) (expression_statement "puVar1 = (uint *)(param_1 + param_4 * 4);" (assignment_expression "puVar1 = (uint *)(param_1 + param_4 * 4)" identifier = (cast_expression "(uint *)(param_1 + param_4 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + param_4 * 4)" ( (binary_expression "param_1 + param_4 * 4" identifier + (binary_expression "param_4 * 4" identifier * number_literal)) )))) ;) (expression_statement "FUN_0002ce60(param_4,iVar7);" (call_expression "FUN_0002ce60(param_4,iVar7)" identifier (argument_list "(param_4,iVar7)" ( identifier , identifier ))) ;) (expression_statement "FUN_0002ca20(param_4,iVar7);" (call_expression "FUN_0002ca20(param_4,iVar7)" identifier (argument_list "(param_4,iVar7)" ( identifier , identifier ))) ;) (expression_statement "iVar7 = param_4 * 2 + -1;" (assignment_expression "iVar7 = param_4 * 2 + -1" identifier = (binary_expression "param_4 * 2 + -1" (binary_expression "param_4 * 2" identifier * number_literal) + number_literal)) ;) (if_statement "if (iVar7 < 0) {\n    uVar3 = 0;\n    if (0 < param_4) goto LAB_0002d137;\n  }\n  else {\n    uVar3 = 0;\n    do {\n      uVar6 = *(uint *)(param_1 + iVar7 * 4);\n      uVar2 = *(uint *)(param_4 * 4 + param_3 + iVar7 * 4);\n      uVar4 = uVar2 + uVar6;\n      iVar5 = uVar4 + uVar3;\n      uVar3 = (uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3);\n      *(int *)(param_1 + iVar7 * 4) = iVar5;\n      iVar7 = iVar7 + -1;\n    } while (iVar7 != -1);\n    if (param_4 < 1) {\n      if (uVar3 != 0) {\n        return;\n      }\n    }\n    else {\nLAB_0002d137:\n      iVar7 = 0;\n      do {\n        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);\n        *(undefined4 *)(param_1 + iVar7 * 4) = 0;\n        iVar7 = iVar7 + 1;\n      } while (iVar7 < param_4);\n      if (uVar3 == 0) {\n        uVar3 = *puVar1;\n        uVar6 = *param_2;\n        if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }\n        if (uVar3 <= uVar6) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }\n  }" if (parenthesized_expression "(iVar7 < 0)" ( (binary_expression "iVar7 < 0" identifier < number_literal) )) (compound_statement "{\n    uVar3 = 0;\n    if (0 < param_4) goto LAB_0002d137;\n  }" { (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) (if_statement "if (0 < param_4) goto LAB_0002d137;" if (parenthesized_expression "(0 < param_4)" ( (binary_expression "0 < param_4" number_literal < identifier) )) (goto_statement "goto LAB_0002d137;" goto statement_identifier ;)) }) (else_clause "else {\n    uVar3 = 0;\n    do {\n      uVar6 = *(uint *)(param_1 + iVar7 * 4);\n      uVar2 = *(uint *)(param_4 * 4 + param_3 + iVar7 * 4);\n      uVar4 = uVar2 + uVar6;\n      iVar5 = uVar4 + uVar3;\n      uVar3 = (uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3);\n      *(int *)(param_1 + iVar7 * 4) = iVar5;\n      iVar7 = iVar7 + -1;\n    } while (iVar7 != -1);\n    if (param_4 < 1) {\n      if (uVar3 != 0) {\n        return;\n      }\n    }\n    else {\nLAB_0002d137:\n      iVar7 = 0;\n      do {\n        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);\n        *(undefined4 *)(param_1 + iVar7 * 4) = 0;\n        iVar7 = iVar7 + 1;\n      } while (iVar7 < param_4);\n      if (uVar3 == 0) {\n        uVar3 = *puVar1;\n        uVar6 = *param_2;\n        if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }\n        if (uVar3 <= uVar6) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }\n  }" else (compound_statement "{\n    uVar3 = 0;\n    do {\n      uVar6 = *(uint *)(param_1 + iVar7 * 4);\n      uVar2 = *(uint *)(param_4 * 4 + param_3 + iVar7 * 4);\n      uVar4 = uVar2 + uVar6;\n      iVar5 = uVar4 + uVar3;\n      uVar3 = (uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3);\n      *(int *)(param_1 + iVar7 * 4) = iVar5;\n      iVar7 = iVar7 + -1;\n    } while (iVar7 != -1);\n    if (param_4 < 1) {\n      if (uVar3 != 0) {\n        return;\n      }\n    }\n    else {\nLAB_0002d137:\n      iVar7 = 0;\n      do {\n        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);\n        *(undefined4 *)(param_1 + iVar7 * 4) = 0;\n        iVar7 = iVar7 + 1;\n      } while (iVar7 < param_4);\n      if (uVar3 == 0) {\n        uVar3 = *puVar1;\n        uVar6 = *param_2;\n        if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }\n        if (uVar3 <= uVar6) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }\n  }" { (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) (do_statement "do {\n      uVar6 = *(uint *)(param_1 + iVar7 * 4);\n      uVar2 = *(uint *)(param_4 * 4 + param_3 + iVar7 * 4);\n      uVar4 = uVar2 + uVar6;\n      iVar5 = uVar4 + uVar3;\n      uVar3 = (uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3);\n      *(int *)(param_1 + iVar7 * 4) = iVar5;\n      iVar7 = iVar7 + -1;\n    } while (iVar7 != -1);" do (compound_statement "{\n      uVar6 = *(uint *)(param_1 + iVar7 * 4);\n      uVar2 = *(uint *)(param_4 * 4 + param_3 + iVar7 * 4);\n      uVar4 = uVar2 + uVar6;\n      iVar5 = uVar4 + uVar3;\n      uVar3 = (uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3);\n      *(int *)(param_1 + iVar7 * 4) = iVar5;\n      iVar7 = iVar7 + -1;\n    }" { (expression_statement "uVar6 = *(uint *)(param_1 + iVar7 * 4);" (assignment_expression "uVar6 = *(uint *)(param_1 + iVar7 * 4)" identifier = (pointer_expression "*(uint *)(param_1 + iVar7 * 4)" * (cast_expression "(uint *)(param_1 + iVar7 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + iVar7 * 4)" ( (binary_expression "param_1 + iVar7 * 4" identifier + (binary_expression "iVar7 * 4" identifier * number_literal)) ))))) ;) (expression_statement "uVar2 = *(uint *)(param_4 * 4 + param_3 + iVar7 * 4);" (assignment_expression "uVar2 = *(uint *)(param_4 * 4 + param_3 + iVar7 * 4)" identifier = (pointer_expression "*(uint *)(param_4 * 4 + param_3 + iVar7 * 4)" * (cast_expression "(uint *)(param_4 * 4 + param_3 + iVar7 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 * 4 + param_3 + iVar7 * 4)" ( (binary_expression "param_4 * 4 + param_3 + iVar7 * 4" (binary_expression "param_4 * 4 + param_3" (binary_expression "param_4 * 4" identifier * number_literal) + identifier) + (binary_expression "iVar7 * 4" identifier * number_literal)) ))))) ;) (expression_statement "uVar4 = uVar2 + uVar6;" (assignment_expression "uVar4 = uVar2 + uVar6" identifier = (binary_expression "uVar2 + uVar6" identifier + identifier)) ;) (expression_statement "iVar5 = uVar4 + uVar3;" (assignment_expression "iVar5 = uVar4 + uVar3" identifier = (binary_expression "uVar4 + uVar3" identifier + identifier)) ;) (expression_statement "uVar3 = (uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3);" (assignment_expression "uVar3 = (uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3)" identifier = (binary_expression "(uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3)" (cast_expression "(uint)CARRY4(uVar2,uVar6)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar2,uVar6)" identifier (argument_list "(uVar2,uVar6)" ( identifier , identifier )))) + (cast_expression "(uint)CARRY4(uVar4,uVar3)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar4,uVar3)" identifier (argument_list "(uVar4,uVar3)" ( identifier , identifier )))))) ;) (expression_statement "*(int *)(param_1 + iVar7 * 4) = iVar5;" (assignment_expression "*(int *)(param_1 + iVar7 * 4) = iVar5" (pointer_expression "*(int *)(param_1 + iVar7 * 4)" * (cast_expression "(int *)(param_1 + iVar7 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + iVar7 * 4)" ( (binary_expression "param_1 + iVar7 * 4" identifier + (binary_expression "iVar7 * 4" identifier * number_literal)) )))) = identifier) ;) (expression_statement "iVar7 = iVar7 + -1;" (assignment_expression "iVar7 = iVar7 + -1" identifier = (binary_expression "iVar7 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar7 != -1)" ( (binary_expression "iVar7 != -1" identifier != number_literal) )) ;) (if_statement "if (param_4 < 1) {\n      if (uVar3 != 0) {\n        return;\n      }\n    }\n    else {\nLAB_0002d137:\n      iVar7 = 0;\n      do {\n        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);\n        *(undefined4 *)(param_1 + iVar7 * 4) = 0;\n        iVar7 = iVar7 + 1;\n      } while (iVar7 < param_4);\n      if (uVar3 == 0) {\n        uVar3 = *puVar1;\n        uVar6 = *param_2;\n        if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }\n        if (uVar3 <= uVar6) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }" if (parenthesized_expression "(param_4 < 1)" ( (binary_expression "param_4 < 1" identifier < number_literal) )) (compound_statement "{\n      if (uVar3 != 0) {\n        return;\n      }\n    }" { (if_statement "if (uVar3 != 0) {\n        return;\n      }" if (parenthesized_expression "(uVar3 != 0)" ( (binary_expression "uVar3 != 0" identifier != number_literal) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) }) (else_clause "else {\nLAB_0002d137:\n      iVar7 = 0;\n      do {\n        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);\n        *(undefined4 *)(param_1 + iVar7 * 4) = 0;\n        iVar7 = iVar7 + 1;\n      } while (iVar7 < param_4);\n      if (uVar3 == 0) {\n        uVar3 = *puVar1;\n        uVar6 = *param_2;\n        if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }\n        if (uVar3 <= uVar6) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }" else (compound_statement "{\nLAB_0002d137:\n      iVar7 = 0;\n      do {\n        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);\n        *(undefined4 *)(param_1 + iVar7 * 4) = 0;\n        iVar7 = iVar7 + 1;\n      } while (iVar7 < param_4);\n      if (uVar3 == 0) {\n        uVar3 = *puVar1;\n        uVar6 = *param_2;\n        if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }\n        if (uVar3 <= uVar6) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }" { (labeled_statement "LAB_0002d137:\n      iVar7 = 0;" statement_identifier : (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;)) (do_statement "do {\n        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);\n        *(undefined4 *)(param_1 + iVar7 * 4) = 0;\n        iVar7 = iVar7 + 1;\n      } while (iVar7 < param_4);" do (compound_statement "{\n        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);\n        *(undefined4 *)(param_1 + iVar7 * 4) = 0;\n        iVar7 = iVar7 + 1;\n      }" { (expression_statement "puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);" (assignment_expression "puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4)" (subscript_expression "puVar1[iVar7]" identifier [ identifier ]) = (pointer_expression "*(uint *)(param_1 + iVar7 * 4)" * (cast_expression "(uint *)(param_1 + iVar7 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + iVar7 * 4)" ( (binary_expression "param_1 + iVar7 * 4" identifier + (binary_expression "iVar7 * 4" identifier * number_literal)) ))))) ;) (expression_statement "*(undefined4 *)(param_1 + iVar7 * 4) = 0;" (assignment_expression "*(undefined4 *)(param_1 + iVar7 * 4) = 0" (pointer_expression "*(undefined4 *)(param_1 + iVar7 * 4)" * (cast_expression "(undefined4 *)(param_1 + iVar7 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + iVar7 * 4)" ( (binary_expression "param_1 + iVar7 * 4" identifier + (binary_expression "iVar7 * 4" identifier * number_literal)) )))) = number_literal) ;) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar7 < param_4)" ( (binary_expression "iVar7 < param_4" identifier < identifier) )) ;) (if_statement "if (uVar3 == 0) {\n        uVar3 = *puVar1;\n        uVar6 = *param_2;\n        if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }\n        if (uVar3 <= uVar6) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }" if (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 0" identifier == number_literal) )) (compound_statement "{\n        uVar3 = *puVar1;\n        uVar6 = *param_2;\n        if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }\n        if (uVar3 <= uVar6) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }" { (expression_statement "uVar3 = *puVar1;" (assignment_expression "uVar3 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) (expression_statement "uVar6 = *param_2;" (assignment_expression "uVar6 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (if_statement "if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }" if (parenthesized_expression "(uVar6 == uVar3)" ( (binary_expression "uVar6 == uVar3" identifier == identifier) )) (compound_statement "{\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }" { (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (do_statement "do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);" do (compound_statement "{\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          }" { (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) (if_statement "if (param_4 == iVar7) goto LAB_0002d1b1;" if (parenthesized_expression "(param_4 == iVar7)" ( (binary_expression "param_4 == iVar7" identifier == identifier) )) (goto_statement "goto LAB_0002d1b1;" goto statement_identifier ;)) }) while (parenthesized_expression "(puVar1[iVar7] == param_2[iVar7])" ( (binary_expression "puVar1[iVar7] == param_2[iVar7]" (subscript_expression "puVar1[iVar7]" identifier [ identifier ]) == (subscript_expression "param_2[iVar7]" identifier [ identifier ])) )) ;) (if_statement "if (param_4 <= iVar7) goto LAB_0002d1b1;" if (parenthesized_expression "(param_4 <= iVar7)" ( (binary_expression "param_4 <= iVar7" identifier <= identifier) )) (goto_statement "goto LAB_0002d1b1;" goto statement_identifier ;)) (expression_statement "uVar6 = param_2[iVar7];" (assignment_expression "uVar6 = param_2[iVar7]" identifier = (subscript_expression "param_2[iVar7]" identifier [ identifier ])) ;) (expression_statement "uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);" (assignment_expression "uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4)" identifier = (pointer_expression "*(uint *)(param_1 + (param_4 + iVar7) * 4)" * (cast_expression "(uint *)(param_1 + (param_4 + iVar7) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + (param_4 + iVar7) * 4)" ( (binary_expression "param_1 + (param_4 + iVar7) * 4" identifier + (binary_expression "(param_4 + iVar7) * 4" (parenthesized_expression "(param_4 + iVar7)" ( (binary_expression "param_4 + iVar7" identifier + identifier) )) * number_literal)) ))))) ;) })) (if_statement "if (uVar3 <= uVar6) {\n          return;\n        }" if (parenthesized_expression "(uVar3 <= uVar6)" ( (binary_expression "uVar3 <= uVar6" identifier <= identifier) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) (goto_statement "goto LAB_0002d1b1;" goto statement_identifier ;) })) }))) }))) (if_statement "if (param_4 + -1 < 0) {\n    return;\n  }" if (parenthesized_expression "(param_4 + -1 < 0)" ( (binary_expression "param_4 + -1 < 0" (binary_expression "param_4 + -1" identifier + number_literal) < number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (labeled_statement "LAB_0002d1b1:\n  param_4 = param_4 + -1;" statement_identifier : (expression_statement "param_4 = param_4 + -1;" (assignment_expression "param_4 = param_4 + -1" identifier = (binary_expression "param_4 + -1" identifier + number_literal)) ;)) (expression_statement "uVar3 = 1;" (assignment_expression "uVar3 = 1" identifier = number_literal) ;) (do_statement "do {\n    uVar6 = uVar3 + puVar1[param_4];\n    uVar3 = (uint)CARRY4(uVar3,puVar1[param_4]) + (uint)CARRY4(~param_2[param_4],uVar6);\n    puVar1[param_4] = ~param_2[param_4] + uVar6;\n    param_4 = param_4 + -1;\n  } while (param_4 != -1);" do (compound_statement "{\n    uVar6 = uVar3 + puVar1[param_4];\n    uVar3 = (uint)CARRY4(uVar3,puVar1[param_4]) + (uint)CARRY4(~param_2[param_4],uVar6);\n    puVar1[param_4] = ~param_2[param_4] + uVar6;\n    param_4 = param_4 + -1;\n  }" { (expression_statement "uVar6 = uVar3 + puVar1[param_4];" (assignment_expression "uVar6 = uVar3 + puVar1[param_4]" identifier = (binary_expression "uVar3 + puVar1[param_4]" identifier + (subscript_expression "puVar1[param_4]" identifier [ identifier ]))) ;) (expression_statement "uVar3 = (uint)CARRY4(uVar3,puVar1[param_4]) + (uint)CARRY4(~param_2[param_4],uVar6);" (assignment_expression "uVar3 = (uint)CARRY4(uVar3,puVar1[param_4]) + (uint)CARRY4(~param_2[param_4],uVar6)" identifier = (binary_expression "(uint)CARRY4(uVar3,puVar1[param_4]) + (uint)CARRY4(~param_2[param_4],uVar6)" (cast_expression "(uint)CARRY4(uVar3,puVar1[param_4])" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar3,puVar1[param_4])" identifier (argument_list "(uVar3,puVar1[param_4])" ( identifier , (subscript_expression "puVar1[param_4]" identifier [ identifier ]) )))) + (cast_expression "(uint)CARRY4(~param_2[param_4],uVar6)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(~param_2[param_4],uVar6)" identifier (argument_list "(~param_2[param_4],uVar6)" ( (unary_expression "~param_2[param_4]" ~ (subscript_expression "param_2[param_4]" identifier [ identifier ])) , identifier )))))) ;) (expression_statement "puVar1[param_4] = ~param_2[param_4] + uVar6;" (assignment_expression "puVar1[param_4] = ~param_2[param_4] + uVar6" (subscript_expression "puVar1[param_4]" identifier [ identifier ]) = (binary_expression "~param_2[param_4] + uVar6" (unary_expression "~param_2[param_4]" ~ (subscript_expression "param_2[param_4]" identifier [ identifier ])) + identifier)) ;) (expression_statement "param_4 = param_4 + -1;" (assignment_expression "param_4 = param_4 + -1" identifier = (binary_expression "param_4 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(param_4 != -1)" ( (binary_expression "param_4 != -1" identifier != number_literal) )) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression IDENT * LIT))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT * LIT) + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (binary_expression IDENT * LIT) + IDENT) + (binary_expression IDENT * LIT)) ))))) ;) (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 (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( IDENT , IDENT )))) + (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( IDENT , IDENT )))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return ;) })) }) (else_clause else (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) (do_statement do (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ IDENT ]) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (goto_statement goto statement_identifier ;)) }) while (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ IDENT ]) == (subscript_expression IDENT [ IDENT ])) )) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ IDENT ])) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression (parenthesized_expression ( (binary_expression IDENT + IDENT) )) * LIT)) ))))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (return_statement return ;) })) (goto_statement goto statement_identifier ;) })) }))) }))) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) < LIT) )) (compound_statement { (return_statement return ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;)) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (subscript_expression IDENT [ IDENT ]))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( IDENT , (subscript_expression IDENT [ IDENT ]) )))) + (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( (unary_expression ~ (subscript_expression IDENT [ IDENT ])) , IDENT )))))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ IDENT ]) = (binary_expression (unary_expression ~ (subscript_expression IDENT [ IDENT ])) + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (return_statement return ;) })))
(function_definition "void __regparm2 FUN_0002d090(int param_1,uint *param_2,int param_3,int param_4)\n\n{\n  uint *puVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  int iVar5;\n  uint uVar6;\n  int iVar7;\n  \n  iVar7 = param_3 + param_4 * 0xc;\n  puVar1 = (uint *)(param_1 + param_4 * 4);\n  FUN_0002ce60(param_4,iVar7);\n  FUN_0002ca20(param_4,iVar7);\n  iVar7 = param_4 * 2 + -1;\n  if (iVar7 < 0) {\n    uVar3 = 0;\n    if (0 < param_4) goto LAB_0002d137;\n  }\n  else {\n    uVar3 = 0;\n    do {\n      uVar6 = *(uint *)(param_1 + iVar7 * 4);\n      uVar2 = *(uint *)(param_4 * 4 + param_3 + iVar7 * 4);\n      uVar4 = uVar2 + uVar6;\n      iVar5 = uVar4 + uVar3;\n      uVar3 = (uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3);\n      *(int *)(param_1 + iVar7 * 4) = iVar5;\n      iVar7 = iVar7 + -1;\n    } while (iVar7 != -1);\n    if (param_4 < 1) {\n      if (uVar3 != 0) {\n        return;\n      }\n    }\n    else {\nLAB_0002d137:\n      iVar7 = 0;\n      do {\n        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);\n        *(undefined4 *)(param_1 + iVar7 * 4) = 0;\n        iVar7 = iVar7 + 1;\n      } while (iVar7 < param_4);\n      if (uVar3 == 0) {\n        uVar3 = *puVar1;\n        uVar6 = *param_2;\n        if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }\n        if (uVar3 <= uVar6) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }\n  }\n  if (param_4 + -1 < 0) {\n    return;\n  }\nLAB_0002d1b1:\n  param_4 = param_4 + -1;\n  uVar3 = 1;\n  do {\n    uVar6 = uVar3 + puVar1[param_4];\n    uVar3 = (uint)CARRY4(uVar3,puVar1[param_4]) + (uint)CARRY4(~param_2[param_4],uVar6);\n    puVar1[param_4] = ~param_2[param_4] + uVar6;\n    param_4 = param_4 + -1;\n  } while (param_4 != -1);\n  return;\n}" (primitive_type "void") (ERROR "__regparm2" (identifier "__regparm2")) (function_declarator "FUN_0002d090(int param_1,uint *param_2,int param_3,int param_4)" (identifier "FUN_0002d090") (parameter_list "(int param_1,uint *param_2,int param_3,int param_4)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "uint *param_2" (type_identifier "uint") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) (, ",") (parameter_declaration "int param_4" (primitive_type "int") (identifier "param_4")) () ")"))) (compound_statement "{\n  uint *puVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  int iVar5;\n  uint uVar6;\n  int iVar7;\n  \n  iVar7 = param_3 + param_4 * 0xc;\n  puVar1 = (uint *)(param_1 + param_4 * 4);\n  FUN_0002ce60(param_4,iVar7);\n  FUN_0002ca20(param_4,iVar7);\n  iVar7 = param_4 * 2 + -1;\n  if (iVar7 < 0) {\n    uVar3 = 0;\n    if (0 < param_4) goto LAB_0002d137;\n  }\n  else {\n    uVar3 = 0;\n    do {\n      uVar6 = *(uint *)(param_1 + iVar7 * 4);\n      uVar2 = *(uint *)(param_4 * 4 + param_3 + iVar7 * 4);\n      uVar4 = uVar2 + uVar6;\n      iVar5 = uVar4 + uVar3;\n      uVar3 = (uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3);\n      *(int *)(param_1 + iVar7 * 4) = iVar5;\n      iVar7 = iVar7 + -1;\n    } while (iVar7 != -1);\n    if (param_4 < 1) {\n      if (uVar3 != 0) {\n        return;\n      }\n    }\n    else {\nLAB_0002d137:\n      iVar7 = 0;\n      do {\n        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);\n        *(undefined4 *)(param_1 + iVar7 * 4) = 0;\n        iVar7 = iVar7 + 1;\n      } while (iVar7 < param_4);\n      if (uVar3 == 0) {\n        uVar3 = *puVar1;\n        uVar6 = *param_2;\n        if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }\n        if (uVar3 <= uVar6) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }\n  }\n  if (param_4 + -1 < 0) {\n    return;\n  }\nLAB_0002d1b1:\n  param_4 = param_4 + -1;\n  uVar3 = 1;\n  do {\n    uVar6 = uVar3 + puVar1[param_4];\n    uVar3 = (uint)CARRY4(uVar3,puVar1[param_4]) + (uint)CARRY4(~param_2[param_4],uVar6);\n    puVar1[param_4] = ~param_2[param_4] + uVar6;\n    param_4 = param_4 + -1;\n  } while (param_4 != -1);\n  return;\n}" ({ "{") (declaration "uint *puVar1;" (type_identifier "uint") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (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 "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (expression_statement "iVar7 = param_3 + param_4 * 0xc;" (assignment_expression "iVar7 = param_3 + param_4 * 0xc" (identifier "iVar7") (= "=") (binary_expression "param_3 + param_4 * 0xc" (identifier "param_3") (+ "+") (binary_expression "param_4 * 0xc" (identifier "param_4") (* "*") (number_literal "0xc")))) (; ";")) (expression_statement "puVar1 = (uint *)(param_1 + param_4 * 4);" (assignment_expression "puVar1 = (uint *)(param_1 + param_4 * 4)" (identifier "puVar1") (= "=") (cast_expression "(uint *)(param_1 + param_4 * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + param_4 * 4)" (( "(") (binary_expression "param_1 + param_4 * 4" (identifier "param_1") (+ "+") (binary_expression "param_4 * 4" (identifier "param_4") (* "*") (number_literal "4"))) () ")")))) (; ";")) (expression_statement "FUN_0002ce60(param_4,iVar7);" (call_expression "FUN_0002ce60(param_4,iVar7)" (identifier "FUN_0002ce60") (argument_list "(param_4,iVar7)" (( "(") (identifier "param_4") (, ",") (identifier "iVar7") () ")"))) (; ";")) (expression_statement "FUN_0002ca20(param_4,iVar7);" (call_expression "FUN_0002ca20(param_4,iVar7)" (identifier "FUN_0002ca20") (argument_list "(param_4,iVar7)" (( "(") (identifier "param_4") (, ",") (identifier "iVar7") () ")"))) (; ";")) (expression_statement "iVar7 = param_4 * 2 + -1;" (assignment_expression "iVar7 = param_4 * 2 + -1" (identifier "iVar7") (= "=") (binary_expression "param_4 * 2 + -1" (binary_expression "param_4 * 2" (identifier "param_4") (* "*") (number_literal "2")) (+ "+") (number_literal "-1"))) (; ";")) (if_statement "if (iVar7 < 0) {\n    uVar3 = 0;\n    if (0 < param_4) goto LAB_0002d137;\n  }\n  else {\n    uVar3 = 0;\n    do {\n      uVar6 = *(uint *)(param_1 + iVar7 * 4);\n      uVar2 = *(uint *)(param_4 * 4 + param_3 + iVar7 * 4);\n      uVar4 = uVar2 + uVar6;\n      iVar5 = uVar4 + uVar3;\n      uVar3 = (uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3);\n      *(int *)(param_1 + iVar7 * 4) = iVar5;\n      iVar7 = iVar7 + -1;\n    } while (iVar7 != -1);\n    if (param_4 < 1) {\n      if (uVar3 != 0) {\n        return;\n      }\n    }\n    else {\nLAB_0002d137:\n      iVar7 = 0;\n      do {\n        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);\n        *(undefined4 *)(param_1 + iVar7 * 4) = 0;\n        iVar7 = iVar7 + 1;\n      } while (iVar7 < param_4);\n      if (uVar3 == 0) {\n        uVar3 = *puVar1;\n        uVar6 = *param_2;\n        if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }\n        if (uVar3 <= uVar6) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }\n  }" (if "if") (parenthesized_expression "(iVar7 < 0)" (( "(") (binary_expression "iVar7 < 0" (identifier "iVar7") (< "<") (number_literal "0")) () ")")) (compound_statement "{\n    uVar3 = 0;\n    if (0 < param_4) goto LAB_0002d137;\n  }" ({ "{") (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" (identifier "uVar3") (= "=") (number_literal "0")) (; ";")) (if_statement "if (0 < param_4) goto LAB_0002d137;" (if "if") (parenthesized_expression "(0 < param_4)" (( "(") (binary_expression "0 < param_4" (number_literal "0") (< "<") (identifier "param_4")) () ")")) (goto_statement "goto LAB_0002d137;" (goto "goto") (statement_identifier "LAB_0002d137") (; ";"))) (} "}")) (else_clause "else {\n    uVar3 = 0;\n    do {\n      uVar6 = *(uint *)(param_1 + iVar7 * 4);\n      uVar2 = *(uint *)(param_4 * 4 + param_3 + iVar7 * 4);\n      uVar4 = uVar2 + uVar6;\n      iVar5 = uVar4 + uVar3;\n      uVar3 = (uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3);\n      *(int *)(param_1 + iVar7 * 4) = iVar5;\n      iVar7 = iVar7 + -1;\n    } while (iVar7 != -1);\n    if (param_4 < 1) {\n      if (uVar3 != 0) {\n        return;\n      }\n    }\n    else {\nLAB_0002d137:\n      iVar7 = 0;\n      do {\n        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);\n        *(undefined4 *)(param_1 + iVar7 * 4) = 0;\n        iVar7 = iVar7 + 1;\n      } while (iVar7 < param_4);\n      if (uVar3 == 0) {\n        uVar3 = *puVar1;\n        uVar6 = *param_2;\n        if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }\n        if (uVar3 <= uVar6) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }\n  }" (else "else") (compound_statement "{\n    uVar3 = 0;\n    do {\n      uVar6 = *(uint *)(param_1 + iVar7 * 4);\n      uVar2 = *(uint *)(param_4 * 4 + param_3 + iVar7 * 4);\n      uVar4 = uVar2 + uVar6;\n      iVar5 = uVar4 + uVar3;\n      uVar3 = (uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3);\n      *(int *)(param_1 + iVar7 * 4) = iVar5;\n      iVar7 = iVar7 + -1;\n    } while (iVar7 != -1);\n    if (param_4 < 1) {\n      if (uVar3 != 0) {\n        return;\n      }\n    }\n    else {\nLAB_0002d137:\n      iVar7 = 0;\n      do {\n        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);\n        *(undefined4 *)(param_1 + iVar7 * 4) = 0;\n        iVar7 = iVar7 + 1;\n      } while (iVar7 < param_4);\n      if (uVar3 == 0) {\n        uVar3 = *puVar1;\n        uVar6 = *param_2;\n        if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }\n        if (uVar3 <= uVar6) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }\n  }" ({ "{") (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" (identifier "uVar3") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n      uVar6 = *(uint *)(param_1 + iVar7 * 4);\n      uVar2 = *(uint *)(param_4 * 4 + param_3 + iVar7 * 4);\n      uVar4 = uVar2 + uVar6;\n      iVar5 = uVar4 + uVar3;\n      uVar3 = (uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3);\n      *(int *)(param_1 + iVar7 * 4) = iVar5;\n      iVar7 = iVar7 + -1;\n    } while (iVar7 != -1);" (do "do") (compound_statement "{\n      uVar6 = *(uint *)(param_1 + iVar7 * 4);\n      uVar2 = *(uint *)(param_4 * 4 + param_3 + iVar7 * 4);\n      uVar4 = uVar2 + uVar6;\n      iVar5 = uVar4 + uVar3;\n      uVar3 = (uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3);\n      *(int *)(param_1 + iVar7 * 4) = iVar5;\n      iVar7 = iVar7 + -1;\n    }" ({ "{") (expression_statement "uVar6 = *(uint *)(param_1 + iVar7 * 4);" (assignment_expression "uVar6 = *(uint *)(param_1 + iVar7 * 4)" (identifier "uVar6") (= "=") (pointer_expression "*(uint *)(param_1 + iVar7 * 4)" (* "*") (cast_expression "(uint *)(param_1 + iVar7 * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + iVar7 * 4)" (( "(") (binary_expression "param_1 + iVar7 * 4" (identifier "param_1") (+ "+") (binary_expression "iVar7 * 4" (identifier "iVar7") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "uVar2 = *(uint *)(param_4 * 4 + param_3 + iVar7 * 4);" (assignment_expression "uVar2 = *(uint *)(param_4 * 4 + param_3 + iVar7 * 4)" (identifier "uVar2") (= "=") (pointer_expression "*(uint *)(param_4 * 4 + param_3 + iVar7 * 4)" (* "*") (cast_expression "(uint *)(param_4 * 4 + param_3 + iVar7 * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_4 * 4 + param_3 + iVar7 * 4)" (( "(") (binary_expression "param_4 * 4 + param_3 + iVar7 * 4" (binary_expression "param_4 * 4 + param_3" (binary_expression "param_4 * 4" (identifier "param_4") (* "*") (number_literal "4")) (+ "+") (identifier "param_3")) (+ "+") (binary_expression "iVar7 * 4" (identifier "iVar7") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "uVar4 = uVar2 + uVar6;" (assignment_expression "uVar4 = uVar2 + uVar6" (identifier "uVar4") (= "=") (binary_expression "uVar2 + uVar6" (identifier "uVar2") (+ "+") (identifier "uVar6"))) (; ";")) (expression_statement "iVar5 = uVar4 + uVar3;" (assignment_expression "iVar5 = uVar4 + uVar3" (identifier "iVar5") (= "=") (binary_expression "uVar4 + uVar3" (identifier "uVar4") (+ "+") (identifier "uVar3"))) (; ";")) (expression_statement "uVar3 = (uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3);" (assignment_expression "uVar3 = (uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3)" (identifier "uVar3") (= "=") (binary_expression "(uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3)" (cast_expression "(uint)CARRY4(uVar2,uVar6)" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CARRY4(uVar2,uVar6)" (identifier "CARRY4") (argument_list "(uVar2,uVar6)" (( "(") (identifier "uVar2") (, ",") (identifier "uVar6") () ")")))) (+ "+") (cast_expression "(uint)CARRY4(uVar4,uVar3)" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CARRY4(uVar4,uVar3)" (identifier "CARRY4") (argument_list "(uVar4,uVar3)" (( "(") (identifier "uVar4") (, ",") (identifier "uVar3") () ")")))))) (; ";")) (expression_statement "*(int *)(param_1 + iVar7 * 4) = iVar5;" (assignment_expression "*(int *)(param_1 + iVar7 * 4) = iVar5" (pointer_expression "*(int *)(param_1 + iVar7 * 4)" (* "*") (cast_expression "(int *)(param_1 + iVar7 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + iVar7 * 4)" (( "(") (binary_expression "param_1 + iVar7 * 4" (identifier "param_1") (+ "+") (binary_expression "iVar7 * 4" (identifier "iVar7") (* "*") (number_literal "4"))) () ")")))) (= "=") (identifier "iVar5")) (; ";")) (expression_statement "iVar7 = iVar7 + -1;" (assignment_expression "iVar7 = iVar7 + -1" (identifier "iVar7") (= "=") (binary_expression "iVar7 + -1" (identifier "iVar7") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar7 != -1)" (( "(") (binary_expression "iVar7 != -1" (identifier "iVar7") (!= "!=") (number_literal "-1")) () ")")) (; ";")) (if_statement "if (param_4 < 1) {\n      if (uVar3 != 0) {\n        return;\n      }\n    }\n    else {\nLAB_0002d137:\n      iVar7 = 0;\n      do {\n        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);\n        *(undefined4 *)(param_1 + iVar7 * 4) = 0;\n        iVar7 = iVar7 + 1;\n      } while (iVar7 < param_4);\n      if (uVar3 == 0) {\n        uVar3 = *puVar1;\n        uVar6 = *param_2;\n        if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }\n        if (uVar3 <= uVar6) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }" (if "if") (parenthesized_expression "(param_4 < 1)" (( "(") (binary_expression "param_4 < 1" (identifier "param_4") (< "<") (number_literal "1")) () ")")) (compound_statement "{\n      if (uVar3 != 0) {\n        return;\n      }\n    }" ({ "{") (if_statement "if (uVar3 != 0) {\n        return;\n      }" (if "if") (parenthesized_expression "(uVar3 != 0)" (( "(") (binary_expression "uVar3 != 0" (identifier "uVar3") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        return;\n      }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (} "}")) (else_clause "else {\nLAB_0002d137:\n      iVar7 = 0;\n      do {\n        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);\n        *(undefined4 *)(param_1 + iVar7 * 4) = 0;\n        iVar7 = iVar7 + 1;\n      } while (iVar7 < param_4);\n      if (uVar3 == 0) {\n        uVar3 = *puVar1;\n        uVar6 = *param_2;\n        if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }\n        if (uVar3 <= uVar6) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }" (else "else") (compound_statement "{\nLAB_0002d137:\n      iVar7 = 0;\n      do {\n        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);\n        *(undefined4 *)(param_1 + iVar7 * 4) = 0;\n        iVar7 = iVar7 + 1;\n      } while (iVar7 < param_4);\n      if (uVar3 == 0) {\n        uVar3 = *puVar1;\n        uVar6 = *param_2;\n        if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }\n        if (uVar3 <= uVar6) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }\n    }" ({ "{") (labeled_statement "LAB_0002d137:\n      iVar7 = 0;" (statement_identifier "LAB_0002d137") (: ":") (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" (identifier "iVar7") (= "=") (number_literal "0")) (; ";"))) (do_statement "do {\n        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);\n        *(undefined4 *)(param_1 + iVar7 * 4) = 0;\n        iVar7 = iVar7 + 1;\n      } while (iVar7 < param_4);" (do "do") (compound_statement "{\n        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);\n        *(undefined4 *)(param_1 + iVar7 * 4) = 0;\n        iVar7 = iVar7 + 1;\n      }" ({ "{") (expression_statement "puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);" (assignment_expression "puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4)" (subscript_expression "puVar1[iVar7]" (identifier "puVar1") ([ "[") (identifier "iVar7") (] "]")) (= "=") (pointer_expression "*(uint *)(param_1 + iVar7 * 4)" (* "*") (cast_expression "(uint *)(param_1 + iVar7 * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + iVar7 * 4)" (( "(") (binary_expression "param_1 + iVar7 * 4" (identifier "param_1") (+ "+") (binary_expression "iVar7 * 4" (identifier "iVar7") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "*(undefined4 *)(param_1 + iVar7 * 4) = 0;" (assignment_expression "*(undefined4 *)(param_1 + iVar7 * 4) = 0" (pointer_expression "*(undefined4 *)(param_1 + iVar7 * 4)" (* "*") (cast_expression "(undefined4 *)(param_1 + iVar7 * 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + iVar7 * 4)" (( "(") (binary_expression "param_1 + iVar7 * 4" (identifier "param_1") (+ "+") (binary_expression "iVar7 * 4" (identifier "iVar7") (* "*") (number_literal "4"))) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" (identifier "iVar7") (= "=") (binary_expression "iVar7 + 1" (identifier "iVar7") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar7 < param_4)" (( "(") (binary_expression "iVar7 < param_4" (identifier "iVar7") (< "<") (identifier "param_4")) () ")")) (; ";")) (if_statement "if (uVar3 == 0) {\n        uVar3 = *puVar1;\n        uVar6 = *param_2;\n        if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }\n        if (uVar3 <= uVar6) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }" (if "if") (parenthesized_expression "(uVar3 == 0)" (( "(") (binary_expression "uVar3 == 0" (identifier "uVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        uVar3 = *puVar1;\n        uVar6 = *param_2;\n        if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }\n        if (uVar3 <= uVar6) {\n          return;\n        }\n        goto LAB_0002d1b1;\n      }" ({ "{") (expression_statement "uVar3 = *puVar1;" (assignment_expression "uVar3 = *puVar1" (identifier "uVar3") (= "=") (pointer_expression "*puVar1" (* "*") (identifier "puVar1"))) (; ";")) (expression_statement "uVar6 = *param_2;" (assignment_expression "uVar6 = *param_2" (identifier "uVar6") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (if_statement "if (uVar6 == uVar3) {\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }" (if "if") (parenthesized_expression "(uVar6 == uVar3)" (( "(") (binary_expression "uVar6 == uVar3" (identifier "uVar6") (== "==") (identifier "uVar3")) () ")")) (compound_statement "{\n          iVar7 = 0;\n          do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);\n          if (param_4 <= iVar7) goto LAB_0002d1b1;\n          uVar6 = param_2[iVar7];\n          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);\n        }" ({ "{") (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" (identifier "iVar7") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          } while (puVar1[iVar7] == param_2[iVar7]);" (do "do") (compound_statement "{\n            iVar7 = iVar7 + 1;\n            if (param_4 == iVar7) goto LAB_0002d1b1;\n          }" ({ "{") (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" (identifier "iVar7") (= "=") (binary_expression "iVar7 + 1" (identifier "iVar7") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (param_4 == iVar7) goto LAB_0002d1b1;" (if "if") (parenthesized_expression "(param_4 == iVar7)" (( "(") (binary_expression "param_4 == iVar7" (identifier "param_4") (== "==") (identifier "iVar7")) () ")")) (goto_statement "goto LAB_0002d1b1;" (goto "goto") (statement_identifier "LAB_0002d1b1") (; ";"))) (} "}")) (while "while") (parenthesized_expression "(puVar1[iVar7] == param_2[iVar7])" (( "(") (binary_expression "puVar1[iVar7] == param_2[iVar7]" (subscript_expression "puVar1[iVar7]" (identifier "puVar1") ([ "[") (identifier "iVar7") (] "]")) (== "==") (subscript_expression "param_2[iVar7]" (identifier "param_2") ([ "[") (identifier "iVar7") (] "]"))) () ")")) (; ";")) (if_statement "if (param_4 <= iVar7) goto LAB_0002d1b1;" (if "if") (parenthesized_expression "(param_4 <= iVar7)" (( "(") (binary_expression "param_4 <= iVar7" (identifier "param_4") (<= "<=") (identifier "iVar7")) () ")")) (goto_statement "goto LAB_0002d1b1;" (goto "goto") (statement_identifier "LAB_0002d1b1") (; ";"))) (expression_statement "uVar6 = param_2[iVar7];" (assignment_expression "uVar6 = param_2[iVar7]" (identifier "uVar6") (= "=") (subscript_expression "param_2[iVar7]" (identifier "param_2") ([ "[") (identifier "iVar7") (] "]"))) (; ";")) (expression_statement "uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);" (assignment_expression "uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4)" (identifier "uVar3") (= "=") (pointer_expression "*(uint *)(param_1 + (param_4 + iVar7) * 4)" (* "*") (cast_expression "(uint *)(param_1 + (param_4 + iVar7) * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + (param_4 + iVar7) * 4)" (( "(") (binary_expression "param_1 + (param_4 + iVar7) * 4" (identifier "param_1") (+ "+") (binary_expression "(param_4 + iVar7) * 4" (parenthesized_expression "(param_4 + iVar7)" (( "(") (binary_expression "param_4 + iVar7" (identifier "param_4") (+ "+") (identifier "iVar7")) () ")")) (* "*") (number_literal "4"))) () ")"))))) (; ";")) (} "}"))) (if_statement "if (uVar3 <= uVar6) {\n          return;\n        }" (if "if") (parenthesized_expression "(uVar3 <= uVar6)" (( "(") (binary_expression "uVar3 <= uVar6" (identifier "uVar3") (<= "<=") (identifier "uVar6")) () ")")) (compound_statement "{\n          return;\n        }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (goto_statement "goto LAB_0002d1b1;" (goto "goto") (statement_identifier "LAB_0002d1b1") (; ";")) (} "}"))) (} "}")))) (} "}")))) (if_statement "if (param_4 + -1 < 0) {\n    return;\n  }" (if "if") (parenthesized_expression "(param_4 + -1 < 0)" (( "(") (binary_expression "param_4 + -1 < 0" (binary_expression "param_4 + -1" (identifier "param_4") (+ "+") (number_literal "-1")) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n    return;\n  }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (labeled_statement "LAB_0002d1b1:\n  param_4 = param_4 + -1;" (statement_identifier "LAB_0002d1b1") (: ":") (expression_statement "param_4 = param_4 + -1;" (assignment_expression "param_4 = param_4 + -1" (identifier "param_4") (= "=") (binary_expression "param_4 + -1" (identifier "param_4") (+ "+") (number_literal "-1"))) (; ";"))) (expression_statement "uVar3 = 1;" (assignment_expression "uVar3 = 1" (identifier "uVar3") (= "=") (number_literal "1")) (; ";")) (do_statement "do {\n    uVar6 = uVar3 + puVar1[param_4];\n    uVar3 = (uint)CARRY4(uVar3,puVar1[param_4]) + (uint)CARRY4(~param_2[param_4],uVar6);\n    puVar1[param_4] = ~param_2[param_4] + uVar6;\n    param_4 = param_4 + -1;\n  } while (param_4 != -1);" (do "do") (compound_statement "{\n    uVar6 = uVar3 + puVar1[param_4];\n    uVar3 = (uint)CARRY4(uVar3,puVar1[param_4]) + (uint)CARRY4(~param_2[param_4],uVar6);\n    puVar1[param_4] = ~param_2[param_4] + uVar6;\n    param_4 = param_4 + -1;\n  }" ({ "{") (expression_statement "uVar6 = uVar3 + puVar1[param_4];" (assignment_expression "uVar6 = uVar3 + puVar1[param_4]" (identifier "uVar6") (= "=") (binary_expression "uVar3 + puVar1[param_4]" (identifier "uVar3") (+ "+") (subscript_expression "puVar1[param_4]" (identifier "puVar1") ([ "[") (identifier "param_4") (] "]")))) (; ";")) (expression_statement "uVar3 = (uint)CARRY4(uVar3,puVar1[param_4]) + (uint)CARRY4(~param_2[param_4],uVar6);" (assignment_expression "uVar3 = (uint)CARRY4(uVar3,puVar1[param_4]) + (uint)CARRY4(~param_2[param_4],uVar6)" (identifier "uVar3") (= "=") (binary_expression "(uint)CARRY4(uVar3,puVar1[param_4]) + (uint)CARRY4(~param_2[param_4],uVar6)" (cast_expression "(uint)CARRY4(uVar3,puVar1[param_4])" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CARRY4(uVar3,puVar1[param_4])" (identifier "CARRY4") (argument_list "(uVar3,puVar1[param_4])" (( "(") (identifier "uVar3") (, ",") (subscript_expression "puVar1[param_4]" (identifier "puVar1") ([ "[") (identifier "param_4") (] "]")) () ")")))) (+ "+") (cast_expression "(uint)CARRY4(~param_2[param_4],uVar6)" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CARRY4(~param_2[param_4],uVar6)" (identifier "CARRY4") (argument_list "(~param_2[param_4],uVar6)" (( "(") (unary_expression "~param_2[param_4]" (~ "~") (subscript_expression "param_2[param_4]" (identifier "param_2") ([ "[") (identifier "param_4") (] "]"))) (, ",") (identifier "uVar6") () ")")))))) (; ";")) (expression_statement "puVar1[param_4] = ~param_2[param_4] + uVar6;" (assignment_expression "puVar1[param_4] = ~param_2[param_4] + uVar6" (subscript_expression "puVar1[param_4]" (identifier "puVar1") ([ "[") (identifier "param_4") (] "]")) (= "=") (binary_expression "~param_2[param_4] + uVar6" (unary_expression "~param_2[param_4]" (~ "~") (subscript_expression "param_2[param_4]" (identifier "param_2") ([ "[") (identifier "param_4") (] "]"))) (+ "+") (identifier "uVar6"))) (; ";")) (expression_statement "param_4 = param_4 + -1;" (assignment_expression "param_4 = param_4 + -1" (identifier "param_4") (= "=") (binary_expression "param_4 + -1" (identifier "param_4") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_4 != -1)" (( "(") (binary_expression "param_4 != -1" (identifier "param_4") (!= "!=") (number_literal "-1")) () ")")) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

void __regparm3 function_1(type_1 *var_1,type_1 *n,type_1 *mninv,type_1 *var_4,int var_2)

{
  type_1 *a;
  type_2 var_8;
  type_1 var_10;
  type_2 var_7;
  type_1 var_11;
  int var_6;
  type_1 *in_stack_ffffffcc;
  int in_stack_ffffffd0;
  type_1 *in_stack_ffffffd4;
  
  a = var_1 + var_2;
  var_3(a,mninv,var_4,var_2,var_4 + var_2 * 3);
  var_5((type_1 *)var_2,var_4 + var_2 * 3,in_stack_ffffffcc,in_stack_ffffffd0,in_stack_ffffffd4)
  ;
  var_6 = var_2 * 2 + -1;
  if (var_6 < 0) {
    var_8 = 0;
    if (0 < var_2) goto LAB_0002d137;
  }
  else {
    var_8 = 0;
    do {
      var_7 = var_4[var_2 + var_6] + var_1[var_6];
      var_11 = var_7 + var_8;
      var_8 = (type_2)var_9(var_4[var_2 + var_6],var_1[var_6]) + (type_2)var_9(var_7,var_8);
      var_1[var_6] = var_11;
      var_6 = var_6 + -1;
    } while (var_6 != -1);
    if (var_2 < 1) {
      if (var_8 != 0) {
        return;
      }
    }
    else {
LAB_0002d137:
      var_6 = 0;
      do {
        a[var_6] = var_1[var_6];
        var_1[var_6] = 0;
        var_6 = var_6 + 1;
      } while (var_6 < var_2);
      if (var_8 == 0) {
        var_11 = *a;
        var_10 = *n;
        if (var_10 == var_11) {
          var_6 = 0;
          do {
            var_6 = var_6 + 1;
            if (var_2 == var_6) goto LAB_0002d1b1;
          } while (a[var_6] == n[var_6]);
          if (var_2 <= var_6) goto LAB_0002d1b1;
          var_10 = n[var_6];
          var_11 = var_1[var_2 + var_6];
        }
        if (var_11 <= var_10) {
          return;
        }
        goto LAB_0002d1b1;
      }
    }
  }
  if (var_2 + -1 < 0) {
    return;
  }
LAB_0002d1b1:
  var_6 = var_2 + -1;
  var_8 = 1;
  do {
    var_7 = var_8 + a[var_6];
    var_8 = (type_2)var_9(var_8,a[var_6]) + (type_2)var_9(~n[var_6],var_7);
    a[var_6] = ~n[var_6] + var_7;
    var_6 = var_6 + -1;
  } while (var_6 != -1);
  return;
}


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

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

{
  uint *puVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  
  iVar7 = param_3 + param_4 * 0xc;
  puVar1 = (uint *)(param_1 + param_4 * 4);
  FUN_0002ce60(param_4,iVar7);
  FUN_0002ca20(param_4,iVar7);
  iVar7 = param_4 * 2 + -1;
  if (iVar7 < 0) {
    uVar3 = 0;
    if (0 < param_4) goto LAB_0002d137;
  }
  else {
    uVar3 = 0;
    do {
      uVar6 = *(uint *)(param_1 + iVar7 * 4);
      uVar2 = *(uint *)(param_4 * 4 + param_3 + iVar7 * 4);
      uVar4 = uVar2 + uVar6;
      iVar5 = uVar4 + uVar3;
      uVar3 = (uint)CARRY4(uVar2,uVar6) + (uint)CARRY4(uVar4,uVar3);
      *(int *)(param_1 + iVar7 * 4) = iVar5;
      iVar7 = iVar7 + -1;
    } while (iVar7 != -1);
    if (param_4 < 1) {
      if (uVar3 != 0) {
        return;
      }
    }
    else {
LAB_0002d137:
      iVar7 = 0;
      do {
        puVar1[iVar7] = *(uint *)(param_1 + iVar7 * 4);
        *(undefined4 *)(param_1 + iVar7 * 4) = 0;
        iVar7 = iVar7 + 1;
      } while (iVar7 < param_4);
      if (uVar3 == 0) {
        uVar3 = *puVar1;
        uVar6 = *param_2;
        if (uVar6 == uVar3) {
          iVar7 = 0;
          do {
            iVar7 = iVar7 + 1;
            if (param_4 == iVar7) goto LAB_0002d1b1;
          } while (puVar1[iVar7] == param_2[iVar7]);
          if (param_4 <= iVar7) goto LAB_0002d1b1;
          uVar6 = param_2[iVar7];
          uVar3 = *(uint *)(param_1 + (param_4 + iVar7) * 4);
        }
        if (uVar3 <= uVar6) {
          return;
        }
        goto LAB_0002d1b1;
      }
    }
  }
  if (param_4 + -1 < 0) {
    return;
  }
LAB_0002d1b1:
  param_4 = param_4 + -1;
  uVar3 = 1;
  do {
    uVar6 = uVar3 + puVar1[param_4];
    uVar3 = (uint)CARRY4(uVar3,puVar1[param_4]) + (uint)CARRY4(~param_2[param_4],uVar6);
    puVar1[param_4] = ~param_2[param_4] + uVar6;
    param_4 = param_4 + -1;
  } while (param_4 != -1);
  return;
}

