
/* DWARF original name: __rotate<__gnu_cxx::__normal_iterator<gold::Output_segment**,
   std::vector<gold::Output_segment*> > > */

__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>
 std::_V2::
 __rotate<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>_>
           (Output_segment **__first,
           __normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>
           __middle,Output_segment **__last)

{
  Output_segment *pOVar1;
  undefined8 uVar2;
  long lVar3;
  long lVar4;
  size_t __n;
  long lVar5;
  Output_segment **ppOVar6;
  Output_segment **ppOVar7;
  long lVar8;
  long lVar9;
  
  if (__first == __middle._M_current) {
    return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>
            )__last;
  }
  if (__last == __middle._M_current) {
    return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>
            )__first;
  }
  lVar3 = (long)__last - (long)__first >> 3;
  lVar9 = (long)__middle._M_current - (long)__first >> 3;
  ppOVar6 = (Output_segment **)((long)__first + ((long)__last - (long)__middle._M_current));
  ppOVar7 = __middle._M_current;
  if (lVar3 - lVar9 == lVar9) {
    do {
      pOVar1 = *__first;
      ppOVar6 = __first + 1;
      *__first = *ppOVar7;
      *ppOVar7 = pOVar1;
      __first = ppOVar6;
      ppOVar7 = ppOVar7 + 1;
    } while (__middle._M_current != ppOVar6);
  }
  else {
    while( true ) {
      lVar8 = lVar3 - lVar9;
      lVar5 = lVar3;
      lVar4 = lVar3;
      lVar3 = lVar8;
      if (lVar9 < lVar8) {
        do {
          lVar4 = lVar9;
          if (lVar4 == 1) {
            pOVar1 = *__first;
            if (__first + 1 != __first + lVar5) {
              memmove(__first,__first + 1,lVar5 * 8 - 8);
            }
            (__first + lVar5)[-1] = pOVar1;
            return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>
                    )ppOVar6;
          }
          if (0 < lVar8) {
            lVar3 = 0;
            do {
              pOVar1 = __first[lVar3];
              __first[lVar3] = __first[lVar4 + lVar3];
              __first[lVar4 + lVar3] = pOVar1;
              lVar3 = lVar3 + 1;
            } while (lVar8 != lVar3);
            __first = __first + lVar8;
          }
          if (lVar5 % lVar4 == 0) {
            return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>
                    )ppOVar6;
          }
          lVar9 = lVar4 - lVar5 % lVar4;
          lVar8 = lVar4 - lVar9;
          lVar5 = lVar4;
          lVar3 = lVar8;
        } while (lVar9 < lVar8);
      }
      if (lVar3 == 1) break;
      ppOVar7 = __first + (lVar4 - lVar3);
      if (0 < lVar9) {
        lVar5 = -8;
        lVar8 = 0;
        do {
          uVar2 = *(undefined8 *)((long)ppOVar7 + lVar5);
          lVar8 = lVar8 + 1;
          *(undefined8 *)((long)ppOVar7 + lVar5) =
               *(undefined8 *)((long)__first + lVar5 + lVar4 * 8);
          *(undefined8 *)((long)__first + lVar5 + lVar4 * 8) = uVar2;
          lVar5 = lVar5 + -8;
        } while (lVar8 != lVar9);
        ppOVar7 = ppOVar7 + -lVar8;
      }
      lVar9 = lVar4 % lVar3;
      __first = ppOVar7;
      if (lVar9 == 0) {
        return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>
                )ppOVar6;
      }
    }
    pOVar1 = __first[lVar4 + -1];
    if (__first != __first + lVar4 + -1) {
      __n = (long)(__first + lVar4 + -1) - (long)__first;
      memmove((void *)((long)__first + (lVar4 * 8 - __n)),__first,__n);
    }
    *__first = pOVar1;
    __middle._M_current = ppOVar6;
  }
  return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>
          )__middle._M_current;
}



undefined8 * FUN_001cbb40(undefined8 *param_1,undefined8 *param_2,undefined8 *param_3)

{
  undefined8 uVar1;
  long lVar2;
  long lVar3;
  size_t __n;
  long lVar4;
  undefined8 *puVar5;
  undefined8 *puVar6;
  long lVar7;
  long lVar8;
  
  if (param_1 == param_2) {
    return param_3;
  }
  if (param_3 == param_2) {
    return param_1;
  }
  lVar2 = (long)param_3 - (long)param_1 >> 3;
  lVar8 = (long)param_2 - (long)param_1 >> 3;
  puVar5 = (undefined8 *)((long)param_1 + ((long)param_3 - (long)param_2));
  puVar6 = param_2;
  if (lVar2 - lVar8 == lVar8) {
    do {
      uVar1 = *param_1;
      puVar5 = param_1 + 1;
      *param_1 = *puVar6;
      *puVar6 = uVar1;
      param_1 = puVar5;
      puVar6 = puVar6 + 1;
    } while (param_2 != puVar5);
  }
  else {
    while( true ) {
      lVar7 = lVar2 - lVar8;
      lVar4 = lVar2;
      lVar3 = lVar2;
      lVar2 = lVar7;
      if (lVar8 < lVar7) {
        do {
          lVar3 = lVar8;
          if (lVar3 == 1) {
            uVar1 = *param_1;
            if (param_1 + 1 != param_1 + lVar4) {
              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);
            }
            (param_1 + lVar4)[-1] = uVar1;
            return puVar5;
          }
          if (0 < lVar7) {
            lVar2 = 0;
            do {
              uVar1 = param_1[lVar2];
              param_1[lVar2] = param_1[lVar3 + lVar2];
              param_1[lVar3 + lVar2] = uVar1;
              lVar2 = lVar2 + 1;
            } while (lVar7 != lVar2);
            param_1 = param_1 + lVar7;
          }
          if (lVar4 % lVar3 == 0) {
            return puVar5;
          }
          lVar8 = lVar3 - lVar4 % lVar3;
          lVar7 = lVar3 - lVar8;
          lVar4 = lVar3;
          lVar2 = lVar7;
        } while (lVar8 < lVar7);
      }
      if (lVar2 == 1) break;
      puVar6 = param_1 + (lVar3 - lVar2);
      if (0 < lVar8) {
        lVar4 = -8;
        lVar7 = 0;
        do {
          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);
          lVar7 = lVar7 + 1;
          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)
          ;
          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;
          lVar4 = lVar4 + -8;
        } while (lVar7 != lVar8);
        puVar6 = puVar6 + -lVar7;
      }
      lVar8 = lVar3 % lVar2;
      param_1 = puVar6;
      if (lVar8 == 0) {
        return puVar5;
      }
    }
    uVar1 = param_1[lVar3 + -1];
    if (param_1 != param_1 + lVar3 + -1) {
      __n = (long)(param_1 + lVar3 + -1) - (long)param_1;
      memmove((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n);
    }
    *param_1 = uVar1;
    param_2 = puVar5;
  }
  return param_2;
}


CMP RDI,RSI
JZ 0x001cbc60
CMP RDX,RSI
JZ 0x001cbc59
MOV RAX,RDX
MOV R8,RSI
PUSH R13
SUB RDX,RSI
SUB RAX,RDI
PUSH R12
SUB R8,RDI
PUSH RBP
SAR RAX,0x3
SAR R8,0x3
LEA RBP,[RDI + RDX*0x1]
PUSH RBX
MOV RCX,RAX
MOV RBX,RDI
SUB RCX,R8
SUB RSP,0x8
CMP RCX,R8
JZ 0x001cbc64
NOP dword ptr [RAX]
MOV RDI,RAX
SUB RDI,R8
CMP RDI,R8
JLE 0x001cbbec
CMP R8,0x1
JZ 0x001cbcd0
LEA RSI,[RBX + R8*0x8]
TEST RDI,RDI
JLE 0x001cbbcd
XOR ECX,ECX
MOV R9,qword ptr [RBX + RCX*0x8]
MOV R10,qword ptr [RSI + RCX*0x8]
MOV qword ptr [RBX + RCX*0x8],R10
MOV qword ptr [RSI + RCX*0x8],R9
ADD RCX,0x1
CMP RDI,RCX
JNZ 0x001cbbb0
LEA RBX,[RBX + RDI*0x8]
CQO
IDIV R8
TEST RDX,RDX
JZ 0x001cbc99
MOV RAX,R8
SUB R8,RDX
MOV RDI,RAX
SUB RDI,R8
CMP RDI,R8
JG 0x001cbb9b
LEA R9,[RBX + RAX*0x8]
CMP RDI,0x1
JZ 0x001cbca7
LEA RDX,[RDI*0x8]
MOV RBX,R9
SUB RBX,RDX
TEST R8,R8
JLE 0x001cbc44
MOV RCX,-0x8
XOR ESI,ESI
NOP word ptr CS:[RAX + RAX*0x1]
MOV R10,qword ptr [RBX + RCX*0x1]
MOV R11,qword ptr [R9 + RCX*0x1]
ADD RSI,0x1
MOV qword ptr [RBX + RCX*0x1],R11
MOV qword ptr [R9 + RCX*0x1],R10
SUB RCX,0x8
CMP RSI,R8
JNZ 0x001cbc20
NEG RSI
LEA RBX,[RBX + RSI*0x8]
CQO
IDIV RDI
MOV R8,RDX
TEST RDX,RDX
JZ 0x001cbc99
MOV RAX,RDI
JMP 0x001cbb90
MOV RAX,RDI
RET
MOV RAX,RDX
RET
MOV RCX,RDI
MOV R8,RSI
NOP word ptr [RAX + RAX*0x1]
MOV RDX,qword ptr [R8]
MOV RAX,qword ptr [RCX]
ADD RCX,0x8
ADD R8,0x8
MOV qword ptr [RCX + -0x8],RDX
MOV qword ptr [R8 + -0x8],RAX
CMP RSI,RCX
JNZ 0x001cbc70
MOV RAX,RSI
ADD RSP,0x8
POP RBX
POP RBP
POP R12
POP R13
RET
ADD RSP,0x8
MOV RAX,RBP
POP RBX
POP RBP
POP R12
POP R13
RET
LEA RAX,[R9 + -0x8]
MOV R12,qword ptr [R9 + -0x8]
CMP RBX,RAX
JZ 0x001cbcc8
SUB RAX,RBX
MOV RDI,R9
MOV RSI,RBX
MOV RDX,RAX
SUB RDI,RAX
CALL 0x001496d0
MOV qword ptr [RBX],R12
MOV RAX,RBP
JMP 0x001cbc8e
SHL RAX,0x3
LEA RSI,[RBX + 0x8]
MOV R13,qword ptr [RBX]
LEA R12,[RBX + RAX*0x1]
CMP RSI,R12
JZ 0x001cbcf0
LEA RDX,[RAX + -0x8]
MOV RDI,RBX
CALL 0x001496d0
MOV qword ptr [R12 + -0x8],R13
MOV RAX,RBP
JMP 0x001cbc8e
(translation_unit "undefined8 * FUN_001cbb40(undefined8 *param_1,undefined8 *param_2,undefined8 *param_3)\n\n{\n  undefined8 uVar1;\n  long lVar2;\n  long lVar3;\n  size_t __n;\n  long lVar4;\n  undefined8 *puVar5;\n  undefined8 *puVar6;\n  long lVar7;\n  long lVar8;\n  \n  if (param_1 == param_2) {\n    return param_3;\n  }\n  if (param_3 == param_2) {\n    return param_1;\n  }\n  lVar2 = (long)param_3 - (long)param_1 >> 3;\n  lVar8 = (long)param_2 - (long)param_1 >> 3;\n  puVar5 = (undefined8 *)((long)param_1 + ((long)param_3 - (long)param_2));\n  puVar6 = param_2;\n  if (lVar2 - lVar8 == lVar8) {\n    do {\n      uVar1 = *param_1;\n      puVar5 = param_1 + 1;\n      *param_1 = *puVar6;\n      *puVar6 = uVar1;\n      param_1 = puVar5;\n      puVar6 = puVar6 + 1;\n    } while (param_2 != puVar5);\n  }\n  else {\n    while( true ) {\n      lVar7 = lVar2 - lVar8;\n      lVar4 = lVar2;\n      lVar3 = lVar2;\n      lVar2 = lVar7;\n      if (lVar8 < lVar7) {\n        do {\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        } while (lVar8 < lVar7);\n      }\n      if (lVar2 == 1) break;\n      puVar6 = param_1 + (lVar3 - lVar2);\n      if (0 < lVar8) {\n        lVar4 = -8;\n        lVar7 = 0;\n        do {\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        } while (lVar7 != lVar8);\n        puVar6 = puVar6 + -lVar7;\n      }\n      lVar8 = lVar3 % lVar2;\n      param_1 = puVar6;\n      if (lVar8 == 0) {\n        return puVar5;\n      }\n    }\n    uVar1 = param_1[lVar3 + -1];\n    if (param_1 != param_1 + lVar3 + -1) {\n      __n = (long)(param_1 + lVar3 + -1) - (long)param_1;\n      memmove((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n);\n    }\n    *param_1 = uVar1;\n    param_2 = puVar5;\n  }\n  return param_2;\n}\n\n" (function_definition "undefined8 * FUN_001cbb40(undefined8 *param_1,undefined8 *param_2,undefined8 *param_3)\n\n{\n  undefined8 uVar1;\n  long lVar2;\n  long lVar3;\n  size_t __n;\n  long lVar4;\n  undefined8 *puVar5;\n  undefined8 *puVar6;\n  long lVar7;\n  long lVar8;\n  \n  if (param_1 == param_2) {\n    return param_3;\n  }\n  if (param_3 == param_2) {\n    return param_1;\n  }\n  lVar2 = (long)param_3 - (long)param_1 >> 3;\n  lVar8 = (long)param_2 - (long)param_1 >> 3;\n  puVar5 = (undefined8 *)((long)param_1 + ((long)param_3 - (long)param_2));\n  puVar6 = param_2;\n  if (lVar2 - lVar8 == lVar8) {\n    do {\n      uVar1 = *param_1;\n      puVar5 = param_1 + 1;\n      *param_1 = *puVar6;\n      *puVar6 = uVar1;\n      param_1 = puVar5;\n      puVar6 = puVar6 + 1;\n    } while (param_2 != puVar5);\n  }\n  else {\n    while( true ) {\n      lVar7 = lVar2 - lVar8;\n      lVar4 = lVar2;\n      lVar3 = lVar2;\n      lVar2 = lVar7;\n      if (lVar8 < lVar7) {\n        do {\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        } while (lVar8 < lVar7);\n      }\n      if (lVar2 == 1) break;\n      puVar6 = param_1 + (lVar3 - lVar2);\n      if (0 < lVar8) {\n        lVar4 = -8;\n        lVar7 = 0;\n        do {\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        } while (lVar7 != lVar8);\n        puVar6 = puVar6 + -lVar7;\n      }\n      lVar8 = lVar3 % lVar2;\n      param_1 = puVar6;\n      if (lVar8 == 0) {\n        return puVar5;\n      }\n    }\n    uVar1 = param_1[lVar3 + -1];\n    if (param_1 != param_1 + lVar3 + -1) {\n      __n = (long)(param_1 + lVar3 + -1) - (long)param_1;\n      memmove((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n);\n    }\n    *param_1 = uVar1;\n    param_2 = puVar5;\n  }\n  return param_2;\n}" type_identifier (pointer_declarator "* FUN_001cbb40(undefined8 *param_1,undefined8 *param_2,undefined8 *param_3)" * (function_declarator "FUN_001cbb40(undefined8 *param_1,undefined8 *param_2,undefined8 *param_3)" identifier (parameter_list "(undefined8 *param_1,undefined8 *param_2,undefined8 *param_3)" ( (parameter_declaration "undefined8 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined8 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined8 *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) )))) (compound_statement "{\n  undefined8 uVar1;\n  long lVar2;\n  long lVar3;\n  size_t __n;\n  long lVar4;\n  undefined8 *puVar5;\n  undefined8 *puVar6;\n  long lVar7;\n  long lVar8;\n  \n  if (param_1 == param_2) {\n    return param_3;\n  }\n  if (param_3 == param_2) {\n    return param_1;\n  }\n  lVar2 = (long)param_3 - (long)param_1 >> 3;\n  lVar8 = (long)param_2 - (long)param_1 >> 3;\n  puVar5 = (undefined8 *)((long)param_1 + ((long)param_3 - (long)param_2));\n  puVar6 = param_2;\n  if (lVar2 - lVar8 == lVar8) {\n    do {\n      uVar1 = *param_1;\n      puVar5 = param_1 + 1;\n      *param_1 = *puVar6;\n      *puVar6 = uVar1;\n      param_1 = puVar5;\n      puVar6 = puVar6 + 1;\n    } while (param_2 != puVar5);\n  }\n  else {\n    while( true ) {\n      lVar7 = lVar2 - lVar8;\n      lVar4 = lVar2;\n      lVar3 = lVar2;\n      lVar2 = lVar7;\n      if (lVar8 < lVar7) {\n        do {\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        } while (lVar8 < lVar7);\n      }\n      if (lVar2 == 1) break;\n      puVar6 = param_1 + (lVar3 - lVar2);\n      if (0 < lVar8) {\n        lVar4 = -8;\n        lVar7 = 0;\n        do {\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        } while (lVar7 != lVar8);\n        puVar6 = puVar6 + -lVar7;\n      }\n      lVar8 = lVar3 % lVar2;\n      param_1 = puVar6;\n      if (lVar8 == 0) {\n        return puVar5;\n      }\n    }\n    uVar1 = param_1[lVar3 + -1];\n    if (param_1 != param_1 + lVar3 + -1) {\n      __n = (long)(param_1 + lVar3 + -1) - (long)param_1;\n      memmove((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n);\n    }\n    *param_1 = uVar1;\n    param_2 = puVar5;\n  }\n  return param_2;\n}" { (declaration "undefined8 uVar1;" type_identifier identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "size_t __n;" primitive_type identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "undefined8 *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "long lVar7;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (if_statement "if (param_1 == param_2) {\n    return param_3;\n  }" if (parenthesized_expression "(param_1 == param_2)" ( (binary_expression "param_1 == param_2" identifier == identifier) )) (compound_statement "{\n    return param_3;\n  }" { (return_statement "return param_3;" return identifier ;) })) (if_statement "if (param_3 == param_2) {\n    return param_1;\n  }" if (parenthesized_expression "(param_3 == param_2)" ( (binary_expression "param_3 == param_2" identifier == identifier) )) (compound_statement "{\n    return param_1;\n  }" { (return_statement "return param_1;" return identifier ;) })) (expression_statement "lVar2 = (long)param_3 - (long)param_1 >> 3;" (assignment_expression "lVar2 = (long)param_3 - (long)param_1 >> 3" identifier = (binary_expression "(long)param_3 - (long)param_1 >> 3" (binary_expression "(long)param_3 - (long)param_1" (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) >> number_literal)) ;) (expression_statement "lVar8 = (long)param_2 - (long)param_1 >> 3;" (assignment_expression "lVar8 = (long)param_2 - (long)param_1 >> 3" identifier = (binary_expression "(long)param_2 - (long)param_1 >> 3" (binary_expression "(long)param_2 - (long)param_1" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) >> number_literal)) ;) (expression_statement "puVar5 = (undefined8 *)((long)param_1 + ((long)param_3 - (long)param_2));" (assignment_expression "puVar5 = (undefined8 *)((long)param_1 + ((long)param_3 - (long)param_2))" identifier = (cast_expression "(undefined8 *)((long)param_1 + ((long)param_3 - (long)param_2))" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + ((long)param_3 - (long)param_2))" ( (binary_expression "(long)param_1 + ((long)param_3 - (long)param_2)" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "((long)param_3 - (long)param_2)" ( (binary_expression "(long)param_3 - (long)param_2" (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) )))) ;) (expression_statement "puVar6 = param_2;" (assignment_expression "puVar6 = param_2" identifier = identifier) ;) (if_statement "if (lVar2 - lVar8 == lVar8) {\n    do {\n      uVar1 = *param_1;\n      puVar5 = param_1 + 1;\n      *param_1 = *puVar6;\n      *puVar6 = uVar1;\n      param_1 = puVar5;\n      puVar6 = puVar6 + 1;\n    } while (param_2 != puVar5);\n  }\n  else {\n    while( true ) {\n      lVar7 = lVar2 - lVar8;\n      lVar4 = lVar2;\n      lVar3 = lVar2;\n      lVar2 = lVar7;\n      if (lVar8 < lVar7) {\n        do {\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        } while (lVar8 < lVar7);\n      }\n      if (lVar2 == 1) break;\n      puVar6 = param_1 + (lVar3 - lVar2);\n      if (0 < lVar8) {\n        lVar4 = -8;\n        lVar7 = 0;\n        do {\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        } while (lVar7 != lVar8);\n        puVar6 = puVar6 + -lVar7;\n      }\n      lVar8 = lVar3 % lVar2;\n      param_1 = puVar6;\n      if (lVar8 == 0) {\n        return puVar5;\n      }\n    }\n    uVar1 = param_1[lVar3 + -1];\n    if (param_1 != param_1 + lVar3 + -1) {\n      __n = (long)(param_1 + lVar3 + -1) - (long)param_1;\n      memmove((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n);\n    }\n    *param_1 = uVar1;\n    param_2 = puVar5;\n  }" if (parenthesized_expression "(lVar2 - lVar8 == lVar8)" ( (binary_expression "lVar2 - lVar8 == lVar8" (binary_expression "lVar2 - lVar8" identifier - identifier) == identifier) )) (compound_statement "{\n    do {\n      uVar1 = *param_1;\n      puVar5 = param_1 + 1;\n      *param_1 = *puVar6;\n      *puVar6 = uVar1;\n      param_1 = puVar5;\n      puVar6 = puVar6 + 1;\n    } while (param_2 != puVar5);\n  }" { (do_statement "do {\n      uVar1 = *param_1;\n      puVar5 = param_1 + 1;\n      *param_1 = *puVar6;\n      *puVar6 = uVar1;\n      param_1 = puVar5;\n      puVar6 = puVar6 + 1;\n    } while (param_2 != puVar5);" do (compound_statement "{\n      uVar1 = *param_1;\n      puVar5 = param_1 + 1;\n      *param_1 = *puVar6;\n      *puVar6 = uVar1;\n      param_1 = puVar5;\n      puVar6 = puVar6 + 1;\n    }" { (expression_statement "uVar1 = *param_1;" (assignment_expression "uVar1 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "puVar5 = param_1 + 1;" (assignment_expression "puVar5 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ;) (expression_statement "*param_1 = *puVar6;" (assignment_expression "*param_1 = *puVar6" (pointer_expression "*param_1" * identifier) = (pointer_expression "*puVar6" * identifier)) ;) (expression_statement "*puVar6 = uVar1;" (assignment_expression "*puVar6 = uVar1" (pointer_expression "*puVar6" * identifier) = identifier) ;) (expression_statement "param_1 = puVar5;" (assignment_expression "param_1 = puVar5" identifier = identifier) ;) (expression_statement "puVar6 = puVar6 + 1;" (assignment_expression "puVar6 = puVar6 + 1" identifier = (binary_expression "puVar6 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(param_2 != puVar5)" ( (binary_expression "param_2 != puVar5" identifier != identifier) )) ;) }) (else_clause "else {\n    while( true ) {\n      lVar7 = lVar2 - lVar8;\n      lVar4 = lVar2;\n      lVar3 = lVar2;\n      lVar2 = lVar7;\n      if (lVar8 < lVar7) {\n        do {\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        } while (lVar8 < lVar7);\n      }\n      if (lVar2 == 1) break;\n      puVar6 = param_1 + (lVar3 - lVar2);\n      if (0 < lVar8) {\n        lVar4 = -8;\n        lVar7 = 0;\n        do {\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        } while (lVar7 != lVar8);\n        puVar6 = puVar6 + -lVar7;\n      }\n      lVar8 = lVar3 % lVar2;\n      param_1 = puVar6;\n      if (lVar8 == 0) {\n        return puVar5;\n      }\n    }\n    uVar1 = param_1[lVar3 + -1];\n    if (param_1 != param_1 + lVar3 + -1) {\n      __n = (long)(param_1 + lVar3 + -1) - (long)param_1;\n      memmove((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n);\n    }\n    *param_1 = uVar1;\n    param_2 = puVar5;\n  }" else (compound_statement "{\n    while( true ) {\n      lVar7 = lVar2 - lVar8;\n      lVar4 = lVar2;\n      lVar3 = lVar2;\n      lVar2 = lVar7;\n      if (lVar8 < lVar7) {\n        do {\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        } while (lVar8 < lVar7);\n      }\n      if (lVar2 == 1) break;\n      puVar6 = param_1 + (lVar3 - lVar2);\n      if (0 < lVar8) {\n        lVar4 = -8;\n        lVar7 = 0;\n        do {\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        } while (lVar7 != lVar8);\n        puVar6 = puVar6 + -lVar7;\n      }\n      lVar8 = lVar3 % lVar2;\n      param_1 = puVar6;\n      if (lVar8 == 0) {\n        return puVar5;\n      }\n    }\n    uVar1 = param_1[lVar3 + -1];\n    if (param_1 != param_1 + lVar3 + -1) {\n      __n = (long)(param_1 + lVar3 + -1) - (long)param_1;\n      memmove((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n);\n    }\n    *param_1 = uVar1;\n    param_2 = puVar5;\n  }" { (while_statement "while( true ) {\n      lVar7 = lVar2 - lVar8;\n      lVar4 = lVar2;\n      lVar3 = lVar2;\n      lVar2 = lVar7;\n      if (lVar8 < lVar7) {\n        do {\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        } while (lVar8 < lVar7);\n      }\n      if (lVar2 == 1) break;\n      puVar6 = param_1 + (lVar3 - lVar2);\n      if (0 < lVar8) {\n        lVar4 = -8;\n        lVar7 = 0;\n        do {\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        } while (lVar7 != lVar8);\n        puVar6 = puVar6 + -lVar7;\n      }\n      lVar8 = lVar3 % lVar2;\n      param_1 = puVar6;\n      if (lVar8 == 0) {\n        return puVar5;\n      }\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      lVar7 = lVar2 - lVar8;\n      lVar4 = lVar2;\n      lVar3 = lVar2;\n      lVar2 = lVar7;\n      if (lVar8 < lVar7) {\n        do {\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        } while (lVar8 < lVar7);\n      }\n      if (lVar2 == 1) break;\n      puVar6 = param_1 + (lVar3 - lVar2);\n      if (0 < lVar8) {\n        lVar4 = -8;\n        lVar7 = 0;\n        do {\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        } while (lVar7 != lVar8);\n        puVar6 = puVar6 + -lVar7;\n      }\n      lVar8 = lVar3 % lVar2;\n      param_1 = puVar6;\n      if (lVar8 == 0) {\n        return puVar5;\n      }\n    }" { (expression_statement "lVar7 = lVar2 - lVar8;" (assignment_expression "lVar7 = lVar2 - lVar8" identifier = (binary_expression "lVar2 - lVar8" identifier - identifier)) ;) (expression_statement "lVar4 = lVar2;" (assignment_expression "lVar4 = lVar2" identifier = identifier) ;) (expression_statement "lVar3 = lVar2;" (assignment_expression "lVar3 = lVar2" identifier = identifier) ;) (expression_statement "lVar2 = lVar7;" (assignment_expression "lVar2 = lVar7" identifier = identifier) ;) (if_statement "if (lVar8 < lVar7) {\n        do {\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        } while (lVar8 < lVar7);\n      }" if (parenthesized_expression "(lVar8 < lVar7)" ( (binary_expression "lVar8 < lVar7" identifier < identifier) )) (compound_statement "{\n        do {\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        } while (lVar8 < lVar7);\n      }" { (do_statement "do {\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        } while (lVar8 < lVar7);" do (compound_statement "{\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        }" { (expression_statement "lVar3 = lVar8;" (assignment_expression "lVar3 = lVar8" identifier = identifier) ;) (if_statement "if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }" if (parenthesized_expression "(lVar3 == 1)" ( (binary_expression "lVar3 == 1" identifier == number_literal) )) (compound_statement "{\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }" { (expression_statement "uVar1 = *param_1;" (assignment_expression "uVar1 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }" if (parenthesized_expression "(param_1 + 1 != param_1 + lVar4)" ( (binary_expression "param_1 + 1 != param_1 + lVar4" (binary_expression "param_1 + 1" identifier + number_literal) != (binary_expression "param_1 + lVar4" identifier + identifier)) )) (compound_statement "{\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }" { (expression_statement "memmove(param_1,param_1 + 1,lVar4 * 8 - 8);" (call_expression "memmove(param_1,param_1 + 1,lVar4 * 8 - 8)" identifier (argument_list "(param_1,param_1 + 1,lVar4 * 8 - 8)" ( identifier , (binary_expression "param_1 + 1" identifier + number_literal) , (binary_expression "lVar4 * 8 - 8" (binary_expression "lVar4 * 8" identifier * number_literal) - number_literal) ))) ;) })) (expression_statement "(param_1 + lVar4)[-1] = uVar1;" (assignment_expression "(param_1 + lVar4)[-1] = uVar1" (subscript_expression "(param_1 + lVar4)[-1]" (parenthesized_expression "(param_1 + lVar4)" ( (binary_expression "param_1 + lVar4" identifier + identifier) )) [ number_literal ]) = identifier) ;) (return_statement "return puVar5;" return identifier ;) })) (if_statement "if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }" if (parenthesized_expression "(0 < lVar7)" ( (binary_expression "0 < lVar7" number_literal < identifier) )) (compound_statement "{\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }" { (expression_statement "lVar2 = 0;" (assignment_expression "lVar2 = 0" identifier = number_literal) ;) (do_statement "do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);" do (compound_statement "{\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            }" { (expression_statement "uVar1 = param_1[lVar2];" (assignment_expression "uVar1 = param_1[lVar2]" identifier = (subscript_expression "param_1[lVar2]" identifier [ identifier ])) ;) (expression_statement "param_1[lVar2] = param_1[lVar3 + lVar2];" (assignment_expression "param_1[lVar2] = param_1[lVar3 + lVar2]" (subscript_expression "param_1[lVar2]" identifier [ identifier ]) = (subscript_expression "param_1[lVar3 + lVar2]" identifier [ (binary_expression "lVar3 + lVar2" identifier + identifier) ])) ;) (expression_statement "param_1[lVar3 + lVar2] = uVar1;" (assignment_expression "param_1[lVar3 + lVar2] = uVar1" (subscript_expression "param_1[lVar3 + lVar2]" identifier [ (binary_expression "lVar3 + lVar2" identifier + identifier) ]) = identifier) ;) (expression_statement "lVar2 = lVar2 + 1;" (assignment_expression "lVar2 = lVar2 + 1" identifier = (binary_expression "lVar2 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(lVar7 != lVar2)" ( (binary_expression "lVar7 != lVar2" identifier != identifier) )) ;) (expression_statement "param_1 = param_1 + lVar7;" (assignment_expression "param_1 = param_1 + lVar7" identifier = (binary_expression "param_1 + lVar7" identifier + identifier)) ;) })) (if_statement "if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }" if (parenthesized_expression "(lVar4 % lVar3 == 0)" ( (binary_expression "lVar4 % lVar3 == 0" (binary_expression "lVar4 % lVar3" identifier % identifier) == number_literal) )) (compound_statement "{\n            return puVar5;\n          }" { (return_statement "return puVar5;" return identifier ;) })) (expression_statement "lVar8 = lVar3 - lVar4 % lVar3;" (assignment_expression "lVar8 = lVar3 - lVar4 % lVar3" identifier = (binary_expression "lVar3 - lVar4 % lVar3" identifier - (binary_expression "lVar4 % lVar3" identifier % identifier))) ;) (expression_statement "lVar7 = lVar3 - lVar8;" (assignment_expression "lVar7 = lVar3 - lVar8" identifier = (binary_expression "lVar3 - lVar8" identifier - identifier)) ;) (expression_statement "lVar4 = lVar3;" (assignment_expression "lVar4 = lVar3" identifier = identifier) ;) (expression_statement "lVar2 = lVar7;" (assignment_expression "lVar2 = lVar7" identifier = identifier) ;) }) while (parenthesized_expression "(lVar8 < lVar7)" ( (binary_expression "lVar8 < lVar7" identifier < identifier) )) ;) })) (if_statement "if (lVar2 == 1) break;" if (parenthesized_expression "(lVar2 == 1)" ( (binary_expression "lVar2 == 1" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "puVar6 = param_1 + (lVar3 - lVar2);" (assignment_expression "puVar6 = param_1 + (lVar3 - lVar2)" identifier = (binary_expression "param_1 + (lVar3 - lVar2)" identifier + (parenthesized_expression "(lVar3 - lVar2)" ( (binary_expression "lVar3 - lVar2" identifier - identifier) )))) ;) (if_statement "if (0 < lVar8) {\n        lVar4 = -8;\n        lVar7 = 0;\n        do {\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        } while (lVar7 != lVar8);\n        puVar6 = puVar6 + -lVar7;\n      }" if (parenthesized_expression "(0 < lVar8)" ( (binary_expression "0 < lVar8" number_literal < identifier) )) (compound_statement "{\n        lVar4 = -8;\n        lVar7 = 0;\n        do {\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        } while (lVar7 != lVar8);\n        puVar6 = puVar6 + -lVar7;\n      }" { (expression_statement "lVar4 = -8;" (assignment_expression "lVar4 = -8" identifier = number_literal) ;) (expression_statement "lVar7 = 0;" (assignment_expression "lVar7 = 0" identifier = number_literal) ;) (do_statement "do {\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        } while (lVar7 != lVar8);" do (compound_statement "{\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        }" { (expression_statement "uVar1 = *(undefined8 *)((long)puVar6 + lVar4);" (assignment_expression "uVar1 = *(undefined8 *)((long)puVar6 + lVar4)" identifier = (pointer_expression "*(undefined8 *)((long)puVar6 + lVar4)" * (cast_expression "(undefined8 *)((long)puVar6 + lVar4)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar6 + lVar4)" ( (binary_expression "(long)puVar6 + lVar4" (cast_expression "(long)puVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) ))))) ;) (expression_statement "lVar7 = lVar7 + 1;" (assignment_expression "lVar7 = lVar7 + 1" identifier = (binary_expression "lVar7 + 1" identifier + number_literal)) ;) (expression_statement "*(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;" (assignment_expression "*(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)" (pointer_expression "*(undefined8 *)((long)puVar6 + lVar4)" * (cast_expression "(undefined8 *)((long)puVar6 + lVar4)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar6 + lVar4)" ( (binary_expression "(long)puVar6 + lVar4" (cast_expression "(long)puVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) )))) = (pointer_expression "*(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)" * (cast_expression "(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + lVar4 + lVar3 * 8)" ( (binary_expression "(long)param_1 + lVar4 + lVar3 * 8" (binary_expression "(long)param_1 + lVar4" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + (binary_expression "lVar3 * 8" identifier * number_literal)) ))))) ;) (expression_statement "*(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;" (assignment_expression "*(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1" (pointer_expression "*(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)" * (cast_expression "(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + lVar4 + lVar3 * 8)" ( (binary_expression "(long)param_1 + lVar4 + lVar3 * 8" (binary_expression "(long)param_1 + lVar4" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + (binary_expression "lVar3 * 8" identifier * number_literal)) )))) = identifier) ;) (expression_statement "lVar4 = lVar4 + -8;" (assignment_expression "lVar4 = lVar4 + -8" identifier = (binary_expression "lVar4 + -8" identifier + number_literal)) ;) }) while (parenthesized_expression "(lVar7 != lVar8)" ( (binary_expression "lVar7 != lVar8" identifier != identifier) )) ;) (expression_statement "puVar6 = puVar6 + -lVar7;" (assignment_expression "puVar6 = puVar6 + -lVar7" identifier = (binary_expression "puVar6 + -lVar7" identifier + (unary_expression "-lVar7" - identifier))) ;) })) (expression_statement "lVar8 = lVar3 % lVar2;" (assignment_expression "lVar8 = lVar3 % lVar2" identifier = (binary_expression "lVar3 % lVar2" identifier % identifier)) ;) (expression_statement "param_1 = puVar6;" (assignment_expression "param_1 = puVar6" identifier = identifier) ;) (if_statement "if (lVar8 == 0) {\n        return puVar5;\n      }" if (parenthesized_expression "(lVar8 == 0)" ( (binary_expression "lVar8 == 0" identifier == number_literal) )) (compound_statement "{\n        return puVar5;\n      }" { (return_statement "return puVar5;" return identifier ;) })) })) (expression_statement "uVar1 = param_1[lVar3 + -1];" (assignment_expression "uVar1 = param_1[lVar3 + -1]" identifier = (subscript_expression "param_1[lVar3 + -1]" identifier [ (binary_expression "lVar3 + -1" identifier + number_literal) ])) ;) (if_statement "if (param_1 != param_1 + lVar3 + -1) {\n      __n = (long)(param_1 + lVar3 + -1) - (long)param_1;\n      memmove((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n);\n    }" if (parenthesized_expression "(param_1 != param_1 + lVar3 + -1)" ( (binary_expression "param_1 != param_1 + lVar3 + -1" identifier != (binary_expression "param_1 + lVar3 + -1" (binary_expression "param_1 + lVar3" identifier + identifier) + number_literal)) )) (compound_statement "{\n      __n = (long)(param_1 + lVar3 + -1) - (long)param_1;\n      memmove((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n);\n    }" { (expression_statement "__n = (long)(param_1 + lVar3 + -1) - (long)param_1;" (assignment_expression "__n = (long)(param_1 + lVar3 + -1) - (long)param_1" identifier = (binary_expression "(long)(param_1 + lVar3 + -1) - (long)param_1" (cast_expression "(long)(param_1 + lVar3 + -1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(param_1 + lVar3 + -1)" ( (binary_expression "param_1 + lVar3 + -1" (binary_expression "param_1 + lVar3" identifier + identifier) + number_literal) ))) - (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "memmove((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n);" (call_expression "memmove((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n)" identifier (argument_list "((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n)" ( (cast_expression "(void *)((long)param_1 + (lVar3 * 8 - __n))" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + (lVar3 * 8 - __n))" ( (binary_expression "(long)param_1 + (lVar3 * 8 - __n)" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(lVar3 * 8 - __n)" ( (binary_expression "lVar3 * 8 - __n" (binary_expression "lVar3 * 8" identifier * number_literal) - identifier) ))) ))) , identifier , identifier ))) ;) })) (expression_statement "*param_1 = uVar1;" (assignment_expression "*param_1 = uVar1" (pointer_expression "*param_1" * identifier) = identifier) ;) (expression_statement "param_2 = puVar5;" (assignment_expression "param_2 = puVar5" identifier = identifier) ;) }))) (return_statement "return param_2;" return identifier ;) })))
(translation_unit "/* DWARF original name: __rotate<__gnu_cxx::__normal_iterator<gold::Output_segment**,\n   std::vector<gold::Output_segment*> > > */\n\n__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n std::_V2::\n __rotate<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>_>\n           (Output_segment **__first,\n           __normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n           __middle,Output_segment **__last)\n\n{\n  Output_segment *pOVar1;\n  undefined8 uVar2;\n  long lVar3;\n  long lVar4;\n  size_t __n;\n  long lVar5;\n  Output_segment **ppOVar6;\n  Output_segment **ppOVar7;\n  long lVar8;\n  long lVar9;\n  \n  if (__first == __middle._M_current) {\n    return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n            )__last;\n  }\n  if (__last == __middle._M_current) {\n    return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n            )__first;\n  }\n  lVar3 = (long)__last - (long)__first >> 3;\n  lVar9 = (long)__middle._M_current - (long)__first >> 3;\n  ppOVar6 = (Output_segment **)((long)__first + ((long)__last - (long)__middle._M_current));\n  ppOVar7 = __middle._M_current;\n  if (lVar3 - lVar9 == lVar9) {\n    do {\n      pOVar1 = *__first;\n      ppOVar6 = __first + 1;\n      *__first = *ppOVar7;\n      *ppOVar7 = pOVar1;\n      __first = ppOVar6;\n      ppOVar7 = ppOVar7 + 1;\n    } while (__middle._M_current != ppOVar6);\n  }\n  else {\n    while( true ) {\n      lVar8 = lVar3 - lVar9;\n      lVar5 = lVar3;\n      lVar4 = lVar3;\n      lVar3 = lVar8;\n      if (lVar9 < lVar8) {\n        do {\n          lVar4 = lVar9;\n          if (lVar4 == 1) {\n            pOVar1 = *__first;\n            if (__first + 1 != __first + lVar5) {\n              memmove(__first,__first + 1,lVar5 * 8 - 8);\n            }\n            (__first + lVar5)[-1] = pOVar1;\n            return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                    )ppOVar6;\n          }\n          if (0 < lVar8) {\n            lVar3 = 0;\n            do {\n              pOVar1 = __first[lVar3];\n              __first[lVar3] = __first[lVar4 + lVar3];\n              __first[lVar4 + lVar3] = pOVar1;\n              lVar3 = lVar3 + 1;\n            } while (lVar8 != lVar3);\n            __first = __first + lVar8;\n          }\n          if (lVar5 % lVar4 == 0) {\n            return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                    )ppOVar6;\n          }\n          lVar9 = lVar4 - lVar5 % lVar4;\n          lVar8 = lVar4 - lVar9;\n          lVar5 = lVar4;\n          lVar3 = lVar8;\n        } while (lVar9 < lVar8);\n      }\n      if (lVar3 == 1) break;\n      ppOVar7 = __first + (lVar4 - lVar3);\n      if (0 < lVar9) {\n        lVar5 = -8;\n        lVar8 = 0;\n        do {\n          uVar2 = *(undefined8 *)((long)ppOVar7 + lVar5);\n          lVar8 = lVar8 + 1;\n          *(undefined8 *)((long)ppOVar7 + lVar5) =\n               *(undefined8 *)((long)__first + lVar5 + lVar4 * 8);\n          *(undefined8 *)((long)__first + lVar5 + lVar4 * 8) = uVar2;\n          lVar5 = lVar5 + -8;\n        } while (lVar8 != lVar9);\n        ppOVar7 = ppOVar7 + -lVar8;\n      }\n      lVar9 = lVar4 % lVar3;\n      __first = ppOVar7;\n      if (lVar9 == 0) {\n        return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                )ppOVar6;\n      }\n    }\n    pOVar1 = __first[lVar4 + -1];\n    if (__first != __first + lVar4 + -1) {\n      __n = (long)(__first + lVar4 + -1) - (long)__first;\n      memmove((void *)((long)__first + (lVar4 * 8 - __n)),__first,__n);\n    }\n    *__first = pOVar1;\n    __middle._M_current = ppOVar6;\n  }\n  return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n          )__middle._M_current;\n}\n\n" comment (expression_statement "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n std::_V2::\n __rotate<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>_>\n           (Output_segment **__first,\n           __normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n           __middle,Output_segment **__last)\n\n{\n  Output_segment *pOVar1;" (update_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n std::_V2::\n __rotate<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>_>\n           (Output_segment **__first,\n           __normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n           __middle,Output_segment **__last)\n\n{\n  Output_segment *pOVar1" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n std::_V2::\n __rotate<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>_>\n           (Output_segment **__first,\n           __normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n           __middle,Output_segment **__last)\n\n{\n  Output_segment *pOVar1" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n std::_V2::\n __rotate<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>_" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n std::_V2::\n __rotate<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n std::_V2::\n __rotate<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n std::_V2::\n __rotate<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n std::_V2::\n __rotate<__gnu_cxx::__normal_iterator<gold" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n std::_V2::\n __rotate<__gnu_cxx" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n std" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold" (binary_expression "__normal_iterator<gold::Output_segment**,_std" (binary_expression "__normal_iterator<gold" identifier < identifier) (ERROR "::Output_segment" : : identifier) * (pointer_expression "*,_std" * (ERROR "," ,) identifier)) (ERROR "::vector" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR ">" >) identifier) > identifier) > identifier) (ERROR "::_V2::\n __rotate" : : identifier : : identifier) < identifier) (ERROR "::__normal_iterator" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (pointer_expression "*,_std" * (ERROR "," ,) identifier)) (ERROR "::vector" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR ">" >) identifier) > identifier) > (binary_expression "(Output_segment **__first,\n           __normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n           __middle,Output_segment **__last)\n\n{\n  Output_segment *pOVar1" (parenthesized_expression "(Output_segment **__first,\n           __normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n           __middle,Output_segment **__last)" ( (ERROR "Output_segment **__first,\n           __normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::" (comma_expression "Output_segment **__first,\n           __normal_iterator<gold" (binary_expression "Output_segment **__first" identifier * (pointer_expression "*__first" * identifier)) , (binary_expression "__normal_iterator<gold" identifier < identifier)) : : (type_descriptor "Output_segment**" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) , identifier : : (binary_expression "vector<gold" identifier < identifier) : : (type_descriptor "Output_segment*" type_identifier (abstract_pointer_declarator "*" *)) , identifier : : (binary_expression "allocator<gold" identifier < identifier) : :) (comma_expression "Output_segment*>_>_>\n           __middle,Output_segment **__last" (binary_expression "Output_segment*>_>_>\n           __middle" (binary_expression "Output_segment*>_>_" (binary_expression "Output_segment*>_" identifier * (ERROR ">" >) identifier) > identifier) > identifier) , (binary_expression "Output_segment **__last" identifier * (pointer_expression "*__last" * identifier))) )) (ERROR "{\n  Output_segment" { identifier) * identifier)) --) ;) (declaration "undefined8 uVar2;" type_identifier identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "size_t __n;" primitive_type identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "Output_segment **ppOVar6;" type_identifier (pointer_declarator "**ppOVar6" * (pointer_declarator "*ppOVar6" * identifier)) ;) (declaration "Output_segment **ppOVar7;" type_identifier (pointer_declarator "**ppOVar7" * (pointer_declarator "*ppOVar7" * identifier)) ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar9;" (sized_type_specifier "long" long) identifier ;) (if_statement "if (__first == __middle._M_current) {\n    return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n            )__last;\n  }" if (parenthesized_expression "(__first == __middle._M_current)" ( (binary_expression "__first == __middle._M_current" identifier == (field_expression "__middle._M_current" identifier . field_identifier)) )) (compound_statement "{\n    return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n            )__last;\n  }" { (return_statement "return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n            )__last;" return (parenthesized_expression "(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n            )__last" ( (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n            )__last" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold" (binary_expression "__normal_iterator<gold::Output_segment**,_std" (binary_expression "__normal_iterator<gold" identifier < identifier) (ERROR "::Output_segment" : : identifier) * (pointer_expression "*,_std" * (ERROR "," ,) identifier)) (ERROR "::vector" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR ">" >) identifier) > identifier) > (ERROR ")" )) identifier) )) ;) })) (if_statement "if (__last == __middle._M_current) {\n    return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n            )__first;\n  }" if (parenthesized_expression "(__last == __middle._M_current)" ( (binary_expression "__last == __middle._M_current" identifier == (field_expression "__middle._M_current" identifier . field_identifier)) )) (compound_statement "{\n    return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n            )__first;\n  }" { (return_statement "return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n            )__first;" return (parenthesized_expression "(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n            )__first" ( (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n            )__first" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold" (binary_expression "__normal_iterator<gold::Output_segment**,_std" (binary_expression "__normal_iterator<gold" identifier < identifier) (ERROR "::Output_segment" : : identifier) * (pointer_expression "*,_std" * (ERROR "," ,) identifier)) (ERROR "::vector" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR ">" >) identifier) > identifier) > (ERROR ")" )) identifier) )) ;) })) (expression_statement "lVar3 = (long)__last - (long)__first >> 3;" (assignment_expression "lVar3 = (long)__last - (long)__first >> 3" identifier = (binary_expression "(long)__last - (long)__first >> 3" (binary_expression "(long)__last - (long)__first" (cast_expression "(long)__last" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)__first" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) >> number_literal)) ;) (expression_statement "lVar9 = (long)__middle._M_current - (long)__first >> 3;" (assignment_expression "lVar9 = (long)__middle._M_current - (long)__first >> 3" identifier = (binary_expression "(long)__middle._M_current - (long)__first >> 3" (binary_expression "(long)__middle._M_current - (long)__first" (cast_expression "(long)__middle._M_current" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "__middle._M_current" identifier . field_identifier)) - (cast_expression "(long)__first" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) >> number_literal)) ;) (expression_statement "ppOVar6 = (Output_segment **)((long)__first + ((long)__last - (long)__middle._M_current));" (assignment_expression "ppOVar6 = (Output_segment **)((long)__first + ((long)__last - (long)__middle._M_current))" identifier = (cast_expression "(Output_segment **)((long)__first + ((long)__last - (long)__middle._M_current))" ( (type_descriptor "Output_segment **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((long)__first + ((long)__last - (long)__middle._M_current))" ( (binary_expression "(long)__first + ((long)__last - (long)__middle._M_current)" (cast_expression "(long)__first" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "((long)__last - (long)__middle._M_current)" ( (binary_expression "(long)__last - (long)__middle._M_current" (cast_expression "(long)__last" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)__middle._M_current" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "__middle._M_current" identifier . field_identifier))) ))) )))) ;) (expression_statement "ppOVar7 = __middle._M_current;" (assignment_expression "ppOVar7 = __middle._M_current" identifier = (field_expression "__middle._M_current" identifier . field_identifier)) ;) (if_statement "if (lVar3 - lVar9 == lVar9) {\n    do {\n      pOVar1 = *__first;\n      ppOVar6 = __first + 1;\n      *__first = *ppOVar7;\n      *ppOVar7 = pOVar1;\n      __first = ppOVar6;\n      ppOVar7 = ppOVar7 + 1;\n    } while (__middle._M_current != ppOVar6);\n  }\n  else {\n    while( true ) {\n      lVar8 = lVar3 - lVar9;\n      lVar5 = lVar3;\n      lVar4 = lVar3;\n      lVar3 = lVar8;\n      if (lVar9 < lVar8) {\n        do {\n          lVar4 = lVar9;\n          if (lVar4 == 1) {\n            pOVar1 = *__first;\n            if (__first + 1 != __first + lVar5) {\n              memmove(__first,__first + 1,lVar5 * 8 - 8);\n            }\n            (__first + lVar5)[-1] = pOVar1;\n            return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                    )ppOVar6;\n          }\n          if (0 < lVar8) {\n            lVar3 = 0;\n            do {\n              pOVar1 = __first[lVar3];\n              __first[lVar3] = __first[lVar4 + lVar3];\n              __first[lVar4 + lVar3] = pOVar1;\n              lVar3 = lVar3 + 1;\n            } while (lVar8 != lVar3);\n            __first = __first + lVar8;\n          }\n          if (lVar5 % lVar4 == 0) {\n            return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                    )ppOVar6;\n          }\n          lVar9 = lVar4 - lVar5 % lVar4;\n          lVar8 = lVar4 - lVar9;\n          lVar5 = lVar4;\n          lVar3 = lVar8;\n        } while (lVar9 < lVar8);\n      }\n      if (lVar3 == 1) break;\n      ppOVar7 = __first + (lVar4 - lVar3);\n      if (0 < lVar9) {\n        lVar5 = -8;\n        lVar8 = 0;\n        do {\n          uVar2 = *(undefined8 *)((long)ppOVar7 + lVar5);\n          lVar8 = lVar8 + 1;\n          *(undefined8 *)((long)ppOVar7 + lVar5) =\n               *(undefined8 *)((long)__first + lVar5 + lVar4 * 8);\n          *(undefined8 *)((long)__first + lVar5 + lVar4 * 8) = uVar2;\n          lVar5 = lVar5 + -8;\n        } while (lVar8 != lVar9);\n        ppOVar7 = ppOVar7 + -lVar8;\n      }\n      lVar9 = lVar4 % lVar3;\n      __first = ppOVar7;\n      if (lVar9 == 0) {\n        return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                )ppOVar6;\n      }\n    }\n    pOVar1 = __first[lVar4 + -1];\n    if (__first != __first + lVar4 + -1) {\n      __n = (long)(__first + lVar4 + -1) - (long)__first;\n      memmove((void *)((long)__first + (lVar4 * 8 - __n)),__first,__n);\n    }\n    *__first = pOVar1;\n    __middle._M_current = ppOVar6;\n  }" if (parenthesized_expression "(lVar3 - lVar9 == lVar9)" ( (binary_expression "lVar3 - lVar9 == lVar9" (binary_expression "lVar3 - lVar9" identifier - identifier) == identifier) )) (compound_statement "{\n    do {\n      pOVar1 = *__first;\n      ppOVar6 = __first + 1;\n      *__first = *ppOVar7;\n      *ppOVar7 = pOVar1;\n      __first = ppOVar6;\n      ppOVar7 = ppOVar7 + 1;\n    } while (__middle._M_current != ppOVar6);\n  }" { (do_statement "do {\n      pOVar1 = *__first;\n      ppOVar6 = __first + 1;\n      *__first = *ppOVar7;\n      *ppOVar7 = pOVar1;\n      __first = ppOVar6;\n      ppOVar7 = ppOVar7 + 1;\n    } while (__middle._M_current != ppOVar6);" do (compound_statement "{\n      pOVar1 = *__first;\n      ppOVar6 = __first + 1;\n      *__first = *ppOVar7;\n      *ppOVar7 = pOVar1;\n      __first = ppOVar6;\n      ppOVar7 = ppOVar7 + 1;\n    }" { (expression_statement "pOVar1 = *__first;" (assignment_expression "pOVar1 = *__first" identifier = (pointer_expression "*__first" * identifier)) ;) (expression_statement "ppOVar6 = __first + 1;" (assignment_expression "ppOVar6 = __first + 1" identifier = (binary_expression "__first + 1" identifier + number_literal)) ;) (expression_statement "*__first = *ppOVar7;" (assignment_expression "*__first = *ppOVar7" (pointer_expression "*__first" * identifier) = (pointer_expression "*ppOVar7" * identifier)) ;) (expression_statement "*ppOVar7 = pOVar1;" (assignment_expression "*ppOVar7 = pOVar1" (pointer_expression "*ppOVar7" * identifier) = identifier) ;) (expression_statement "__first = ppOVar6;" (assignment_expression "__first = ppOVar6" identifier = identifier) ;) (expression_statement "ppOVar7 = ppOVar7 + 1;" (assignment_expression "ppOVar7 = ppOVar7 + 1" identifier = (binary_expression "ppOVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(__middle._M_current != ppOVar6)" ( (binary_expression "__middle._M_current != ppOVar6" (field_expression "__middle._M_current" identifier . field_identifier) != identifier) )) ;) }) (else_clause "else {\n    while( true ) {\n      lVar8 = lVar3 - lVar9;\n      lVar5 = lVar3;\n      lVar4 = lVar3;\n      lVar3 = lVar8;\n      if (lVar9 < lVar8) {\n        do {\n          lVar4 = lVar9;\n          if (lVar4 == 1) {\n            pOVar1 = *__first;\n            if (__first + 1 != __first + lVar5) {\n              memmove(__first,__first + 1,lVar5 * 8 - 8);\n            }\n            (__first + lVar5)[-1] = pOVar1;\n            return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                    )ppOVar6;\n          }\n          if (0 < lVar8) {\n            lVar3 = 0;\n            do {\n              pOVar1 = __first[lVar3];\n              __first[lVar3] = __first[lVar4 + lVar3];\n              __first[lVar4 + lVar3] = pOVar1;\n              lVar3 = lVar3 + 1;\n            } while (lVar8 != lVar3);\n            __first = __first + lVar8;\n          }\n          if (lVar5 % lVar4 == 0) {\n            return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                    )ppOVar6;\n          }\n          lVar9 = lVar4 - lVar5 % lVar4;\n          lVar8 = lVar4 - lVar9;\n          lVar5 = lVar4;\n          lVar3 = lVar8;\n        } while (lVar9 < lVar8);\n      }\n      if (lVar3 == 1) break;\n      ppOVar7 = __first + (lVar4 - lVar3);\n      if (0 < lVar9) {\n        lVar5 = -8;\n        lVar8 = 0;\n        do {\n          uVar2 = *(undefined8 *)((long)ppOVar7 + lVar5);\n          lVar8 = lVar8 + 1;\n          *(undefined8 *)((long)ppOVar7 + lVar5) =\n               *(undefined8 *)((long)__first + lVar5 + lVar4 * 8);\n          *(undefined8 *)((long)__first + lVar5 + lVar4 * 8) = uVar2;\n          lVar5 = lVar5 + -8;\n        } while (lVar8 != lVar9);\n        ppOVar7 = ppOVar7 + -lVar8;\n      }\n      lVar9 = lVar4 % lVar3;\n      __first = ppOVar7;\n      if (lVar9 == 0) {\n        return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                )ppOVar6;\n      }\n    }\n    pOVar1 = __first[lVar4 + -1];\n    if (__first != __first + lVar4 + -1) {\n      __n = (long)(__first + lVar4 + -1) - (long)__first;\n      memmove((void *)((long)__first + (lVar4 * 8 - __n)),__first,__n);\n    }\n    *__first = pOVar1;\n    __middle._M_current = ppOVar6;\n  }" else (compound_statement "{\n    while( true ) {\n      lVar8 = lVar3 - lVar9;\n      lVar5 = lVar3;\n      lVar4 = lVar3;\n      lVar3 = lVar8;\n      if (lVar9 < lVar8) {\n        do {\n          lVar4 = lVar9;\n          if (lVar4 == 1) {\n            pOVar1 = *__first;\n            if (__first + 1 != __first + lVar5) {\n              memmove(__first,__first + 1,lVar5 * 8 - 8);\n            }\n            (__first + lVar5)[-1] = pOVar1;\n            return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                    )ppOVar6;\n          }\n          if (0 < lVar8) {\n            lVar3 = 0;\n            do {\n              pOVar1 = __first[lVar3];\n              __first[lVar3] = __first[lVar4 + lVar3];\n              __first[lVar4 + lVar3] = pOVar1;\n              lVar3 = lVar3 + 1;\n            } while (lVar8 != lVar3);\n            __first = __first + lVar8;\n          }\n          if (lVar5 % lVar4 == 0) {\n            return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                    )ppOVar6;\n          }\n          lVar9 = lVar4 - lVar5 % lVar4;\n          lVar8 = lVar4 - lVar9;\n          lVar5 = lVar4;\n          lVar3 = lVar8;\n        } while (lVar9 < lVar8);\n      }\n      if (lVar3 == 1) break;\n      ppOVar7 = __first + (lVar4 - lVar3);\n      if (0 < lVar9) {\n        lVar5 = -8;\n        lVar8 = 0;\n        do {\n          uVar2 = *(undefined8 *)((long)ppOVar7 + lVar5);\n          lVar8 = lVar8 + 1;\n          *(undefined8 *)((long)ppOVar7 + lVar5) =\n               *(undefined8 *)((long)__first + lVar5 + lVar4 * 8);\n          *(undefined8 *)((long)__first + lVar5 + lVar4 * 8) = uVar2;\n          lVar5 = lVar5 + -8;\n        } while (lVar8 != lVar9);\n        ppOVar7 = ppOVar7 + -lVar8;\n      }\n      lVar9 = lVar4 % lVar3;\n      __first = ppOVar7;\n      if (lVar9 == 0) {\n        return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                )ppOVar6;\n      }\n    }\n    pOVar1 = __first[lVar4 + -1];\n    if (__first != __first + lVar4 + -1) {\n      __n = (long)(__first + lVar4 + -1) - (long)__first;\n      memmove((void *)((long)__first + (lVar4 * 8 - __n)),__first,__n);\n    }\n    *__first = pOVar1;\n    __middle._M_current = ppOVar6;\n  }" { (while_statement "while( true ) {\n      lVar8 = lVar3 - lVar9;\n      lVar5 = lVar3;\n      lVar4 = lVar3;\n      lVar3 = lVar8;\n      if (lVar9 < lVar8) {\n        do {\n          lVar4 = lVar9;\n          if (lVar4 == 1) {\n            pOVar1 = *__first;\n            if (__first + 1 != __first + lVar5) {\n              memmove(__first,__first + 1,lVar5 * 8 - 8);\n            }\n            (__first + lVar5)[-1] = pOVar1;\n            return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                    )ppOVar6;\n          }\n          if (0 < lVar8) {\n            lVar3 = 0;\n            do {\n              pOVar1 = __first[lVar3];\n              __first[lVar3] = __first[lVar4 + lVar3];\n              __first[lVar4 + lVar3] = pOVar1;\n              lVar3 = lVar3 + 1;\n            } while (lVar8 != lVar3);\n            __first = __first + lVar8;\n          }\n          if (lVar5 % lVar4 == 0) {\n            return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                    )ppOVar6;\n          }\n          lVar9 = lVar4 - lVar5 % lVar4;\n          lVar8 = lVar4 - lVar9;\n          lVar5 = lVar4;\n          lVar3 = lVar8;\n        } while (lVar9 < lVar8);\n      }\n      if (lVar3 == 1) break;\n      ppOVar7 = __first + (lVar4 - lVar3);\n      if (0 < lVar9) {\n        lVar5 = -8;\n        lVar8 = 0;\n        do {\n          uVar2 = *(undefined8 *)((long)ppOVar7 + lVar5);\n          lVar8 = lVar8 + 1;\n          *(undefined8 *)((long)ppOVar7 + lVar5) =\n               *(undefined8 *)((long)__first + lVar5 + lVar4 * 8);\n          *(undefined8 *)((long)__first + lVar5 + lVar4 * 8) = uVar2;\n          lVar5 = lVar5 + -8;\n        } while (lVar8 != lVar9);\n        ppOVar7 = ppOVar7 + -lVar8;\n      }\n      lVar9 = lVar4 % lVar3;\n      __first = ppOVar7;\n      if (lVar9 == 0) {\n        return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                )ppOVar6;\n      }\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      lVar8 = lVar3 - lVar9;\n      lVar5 = lVar3;\n      lVar4 = lVar3;\n      lVar3 = lVar8;\n      if (lVar9 < lVar8) {\n        do {\n          lVar4 = lVar9;\n          if (lVar4 == 1) {\n            pOVar1 = *__first;\n            if (__first + 1 != __first + lVar5) {\n              memmove(__first,__first + 1,lVar5 * 8 - 8);\n            }\n            (__first + lVar5)[-1] = pOVar1;\n            return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                    )ppOVar6;\n          }\n          if (0 < lVar8) {\n            lVar3 = 0;\n            do {\n              pOVar1 = __first[lVar3];\n              __first[lVar3] = __first[lVar4 + lVar3];\n              __first[lVar4 + lVar3] = pOVar1;\n              lVar3 = lVar3 + 1;\n            } while (lVar8 != lVar3);\n            __first = __first + lVar8;\n          }\n          if (lVar5 % lVar4 == 0) {\n            return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                    )ppOVar6;\n          }\n          lVar9 = lVar4 - lVar5 % lVar4;\n          lVar8 = lVar4 - lVar9;\n          lVar5 = lVar4;\n          lVar3 = lVar8;\n        } while (lVar9 < lVar8);\n      }\n      if (lVar3 == 1) break;\n      ppOVar7 = __first + (lVar4 - lVar3);\n      if (0 < lVar9) {\n        lVar5 = -8;\n        lVar8 = 0;\n        do {\n          uVar2 = *(undefined8 *)((long)ppOVar7 + lVar5);\n          lVar8 = lVar8 + 1;\n          *(undefined8 *)((long)ppOVar7 + lVar5) =\n               *(undefined8 *)((long)__first + lVar5 + lVar4 * 8);\n          *(undefined8 *)((long)__first + lVar5 + lVar4 * 8) = uVar2;\n          lVar5 = lVar5 + -8;\n        } while (lVar8 != lVar9);\n        ppOVar7 = ppOVar7 + -lVar8;\n      }\n      lVar9 = lVar4 % lVar3;\n      __first = ppOVar7;\n      if (lVar9 == 0) {\n        return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                )ppOVar6;\n      }\n    }" { (expression_statement "lVar8 = lVar3 - lVar9;" (assignment_expression "lVar8 = lVar3 - lVar9" identifier = (binary_expression "lVar3 - lVar9" identifier - identifier)) ;) (expression_statement "lVar5 = lVar3;" (assignment_expression "lVar5 = lVar3" identifier = identifier) ;) (expression_statement "lVar4 = lVar3;" (assignment_expression "lVar4 = lVar3" identifier = identifier) ;) (expression_statement "lVar3 = lVar8;" (assignment_expression "lVar3 = lVar8" identifier = identifier) ;) (if_statement "if (lVar9 < lVar8) {\n        do {\n          lVar4 = lVar9;\n          if (lVar4 == 1) {\n            pOVar1 = *__first;\n            if (__first + 1 != __first + lVar5) {\n              memmove(__first,__first + 1,lVar5 * 8 - 8);\n            }\n            (__first + lVar5)[-1] = pOVar1;\n            return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                    )ppOVar6;\n          }\n          if (0 < lVar8) {\n            lVar3 = 0;\n            do {\n              pOVar1 = __first[lVar3];\n              __first[lVar3] = __first[lVar4 + lVar3];\n              __first[lVar4 + lVar3] = pOVar1;\n              lVar3 = lVar3 + 1;\n            } while (lVar8 != lVar3);\n            __first = __first + lVar8;\n          }\n          if (lVar5 % lVar4 == 0) {\n            return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                    )ppOVar6;\n          }\n          lVar9 = lVar4 - lVar5 % lVar4;\n          lVar8 = lVar4 - lVar9;\n          lVar5 = lVar4;\n          lVar3 = lVar8;\n        } while (lVar9 < lVar8);\n      }" if (parenthesized_expression "(lVar9 < lVar8)" ( (binary_expression "lVar9 < lVar8" identifier < identifier) )) (compound_statement "{\n        do {\n          lVar4 = lVar9;\n          if (lVar4 == 1) {\n            pOVar1 = *__first;\n            if (__first + 1 != __first + lVar5) {\n              memmove(__first,__first + 1,lVar5 * 8 - 8);\n            }\n            (__first + lVar5)[-1] = pOVar1;\n            return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                    )ppOVar6;\n          }\n          if (0 < lVar8) {\n            lVar3 = 0;\n            do {\n              pOVar1 = __first[lVar3];\n              __first[lVar3] = __first[lVar4 + lVar3];\n              __first[lVar4 + lVar3] = pOVar1;\n              lVar3 = lVar3 + 1;\n            } while (lVar8 != lVar3);\n            __first = __first + lVar8;\n          }\n          if (lVar5 % lVar4 == 0) {\n            return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                    )ppOVar6;\n          }\n          lVar9 = lVar4 - lVar5 % lVar4;\n          lVar8 = lVar4 - lVar9;\n          lVar5 = lVar4;\n          lVar3 = lVar8;\n        } while (lVar9 < lVar8);\n      }" { (do_statement "do {\n          lVar4 = lVar9;\n          if (lVar4 == 1) {\n            pOVar1 = *__first;\n            if (__first + 1 != __first + lVar5) {\n              memmove(__first,__first + 1,lVar5 * 8 - 8);\n            }\n            (__first + lVar5)[-1] = pOVar1;\n            return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                    )ppOVar6;\n          }\n          if (0 < lVar8) {\n            lVar3 = 0;\n            do {\n              pOVar1 = __first[lVar3];\n              __first[lVar3] = __first[lVar4 + lVar3];\n              __first[lVar4 + lVar3] = pOVar1;\n              lVar3 = lVar3 + 1;\n            } while (lVar8 != lVar3);\n            __first = __first + lVar8;\n          }\n          if (lVar5 % lVar4 == 0) {\n            return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                    )ppOVar6;\n          }\n          lVar9 = lVar4 - lVar5 % lVar4;\n          lVar8 = lVar4 - lVar9;\n          lVar5 = lVar4;\n          lVar3 = lVar8;\n        } while (lVar9 < lVar8);" do (compound_statement "{\n          lVar4 = lVar9;\n          if (lVar4 == 1) {\n            pOVar1 = *__first;\n            if (__first + 1 != __first + lVar5) {\n              memmove(__first,__first + 1,lVar5 * 8 - 8);\n            }\n            (__first + lVar5)[-1] = pOVar1;\n            return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                    )ppOVar6;\n          }\n          if (0 < lVar8) {\n            lVar3 = 0;\n            do {\n              pOVar1 = __first[lVar3];\n              __first[lVar3] = __first[lVar4 + lVar3];\n              __first[lVar4 + lVar3] = pOVar1;\n              lVar3 = lVar3 + 1;\n            } while (lVar8 != lVar3);\n            __first = __first + lVar8;\n          }\n          if (lVar5 % lVar4 == 0) {\n            return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                    )ppOVar6;\n          }\n          lVar9 = lVar4 - lVar5 % lVar4;\n          lVar8 = lVar4 - lVar9;\n          lVar5 = lVar4;\n          lVar3 = lVar8;\n        }" { (expression_statement "lVar4 = lVar9;" (assignment_expression "lVar4 = lVar9" identifier = identifier) ;) (if_statement "if (lVar4 == 1) {\n            pOVar1 = *__first;\n            if (__first + 1 != __first + lVar5) {\n              memmove(__first,__first + 1,lVar5 * 8 - 8);\n            }\n            (__first + lVar5)[-1] = pOVar1;\n            return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                    )ppOVar6;\n          }" if (parenthesized_expression "(lVar4 == 1)" ( (binary_expression "lVar4 == 1" identifier == number_literal) )) (compound_statement "{\n            pOVar1 = *__first;\n            if (__first + 1 != __first + lVar5) {\n              memmove(__first,__first + 1,lVar5 * 8 - 8);\n            }\n            (__first + lVar5)[-1] = pOVar1;\n            return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                    )ppOVar6;\n          }" { (expression_statement "pOVar1 = *__first;" (assignment_expression "pOVar1 = *__first" identifier = (pointer_expression "*__first" * identifier)) ;) (if_statement "if (__first + 1 != __first + lVar5) {\n              memmove(__first,__first + 1,lVar5 * 8 - 8);\n            }" if (parenthesized_expression "(__first + 1 != __first + lVar5)" ( (binary_expression "__first + 1 != __first + lVar5" (binary_expression "__first + 1" identifier + number_literal) != (binary_expression "__first + lVar5" identifier + identifier)) )) (compound_statement "{\n              memmove(__first,__first + 1,lVar5 * 8 - 8);\n            }" { (expression_statement "memmove(__first,__first + 1,lVar5 * 8 - 8);" (call_expression "memmove(__first,__first + 1,lVar5 * 8 - 8)" identifier (argument_list "(__first,__first + 1,lVar5 * 8 - 8)" ( identifier , (binary_expression "__first + 1" identifier + number_literal) , (binary_expression "lVar5 * 8 - 8" (binary_expression "lVar5 * 8" identifier * number_literal) - number_literal) ))) ;) })) (expression_statement "(__first + lVar5)[-1] = pOVar1;" (assignment_expression "(__first + lVar5)[-1] = pOVar1" (subscript_expression "(__first + lVar5)[-1]" (parenthesized_expression "(__first + lVar5)" ( (binary_expression "__first + lVar5" identifier + identifier) )) [ number_literal ]) = identifier) ;) (return_statement "return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                    )ppOVar6;" return (parenthesized_expression "(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                    )ppOVar6" ( (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                    )ppOVar6" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold" (binary_expression "__normal_iterator<gold::Output_segment**,_std" (binary_expression "__normal_iterator<gold" identifier < identifier) (ERROR "::Output_segment" : : identifier) * (pointer_expression "*,_std" * (ERROR "," ,) identifier)) (ERROR "::vector" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR ">" >) identifier) > identifier) > (ERROR ")" )) identifier) )) ;) })) (if_statement "if (0 < lVar8) {\n            lVar3 = 0;\n            do {\n              pOVar1 = __first[lVar3];\n              __first[lVar3] = __first[lVar4 + lVar3];\n              __first[lVar4 + lVar3] = pOVar1;\n              lVar3 = lVar3 + 1;\n            } while (lVar8 != lVar3);\n            __first = __first + lVar8;\n          }" if (parenthesized_expression "(0 < lVar8)" ( (binary_expression "0 < lVar8" number_literal < identifier) )) (compound_statement "{\n            lVar3 = 0;\n            do {\n              pOVar1 = __first[lVar3];\n              __first[lVar3] = __first[lVar4 + lVar3];\n              __first[lVar4 + lVar3] = pOVar1;\n              lVar3 = lVar3 + 1;\n            } while (lVar8 != lVar3);\n            __first = __first + lVar8;\n          }" { (expression_statement "lVar3 = 0;" (assignment_expression "lVar3 = 0" identifier = number_literal) ;) (do_statement "do {\n              pOVar1 = __first[lVar3];\n              __first[lVar3] = __first[lVar4 + lVar3];\n              __first[lVar4 + lVar3] = pOVar1;\n              lVar3 = lVar3 + 1;\n            } while (lVar8 != lVar3);" do (compound_statement "{\n              pOVar1 = __first[lVar3];\n              __first[lVar3] = __first[lVar4 + lVar3];\n              __first[lVar4 + lVar3] = pOVar1;\n              lVar3 = lVar3 + 1;\n            }" { (expression_statement "pOVar1 = __first[lVar3];" (assignment_expression "pOVar1 = __first[lVar3]" identifier = (subscript_expression "__first[lVar3]" identifier [ identifier ])) ;) (expression_statement "__first[lVar3] = __first[lVar4 + lVar3];" (assignment_expression "__first[lVar3] = __first[lVar4 + lVar3]" (subscript_expression "__first[lVar3]" identifier [ identifier ]) = (subscript_expression "__first[lVar4 + lVar3]" identifier [ (binary_expression "lVar4 + lVar3" identifier + identifier) ])) ;) (expression_statement "__first[lVar4 + lVar3] = pOVar1;" (assignment_expression "__first[lVar4 + lVar3] = pOVar1" (subscript_expression "__first[lVar4 + lVar3]" identifier [ (binary_expression "lVar4 + lVar3" identifier + identifier) ]) = identifier) ;) (expression_statement "lVar3 = lVar3 + 1;" (assignment_expression "lVar3 = lVar3 + 1" identifier = (binary_expression "lVar3 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(lVar8 != lVar3)" ( (binary_expression "lVar8 != lVar3" identifier != identifier) )) ;) (expression_statement "__first = __first + lVar8;" (assignment_expression "__first = __first + lVar8" identifier = (binary_expression "__first + lVar8" identifier + identifier)) ;) })) (if_statement "if (lVar5 % lVar4 == 0) {\n            return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                    )ppOVar6;\n          }" if (parenthesized_expression "(lVar5 % lVar4 == 0)" ( (binary_expression "lVar5 % lVar4 == 0" (binary_expression "lVar5 % lVar4" identifier % identifier) == number_literal) )) (compound_statement "{\n            return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                    )ppOVar6;\n          }" { (return_statement "return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                    )ppOVar6;" return (parenthesized_expression "(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                    )ppOVar6" ( (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                    )ppOVar6" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold" (binary_expression "__normal_iterator<gold::Output_segment**,_std" (binary_expression "__normal_iterator<gold" identifier < identifier) (ERROR "::Output_segment" : : identifier) * (pointer_expression "*,_std" * (ERROR "," ,) identifier)) (ERROR "::vector" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR ">" >) identifier) > identifier) > (ERROR ")" )) identifier) )) ;) })) (expression_statement "lVar9 = lVar4 - lVar5 % lVar4;" (assignment_expression "lVar9 = lVar4 - lVar5 % lVar4" identifier = (binary_expression "lVar4 - lVar5 % lVar4" identifier - (binary_expression "lVar5 % lVar4" identifier % identifier))) ;) (expression_statement "lVar8 = lVar4 - lVar9;" (assignment_expression "lVar8 = lVar4 - lVar9" identifier = (binary_expression "lVar4 - lVar9" identifier - identifier)) ;) (expression_statement "lVar5 = lVar4;" (assignment_expression "lVar5 = lVar4" identifier = identifier) ;) (expression_statement "lVar3 = lVar8;" (assignment_expression "lVar3 = lVar8" identifier = identifier) ;) }) while (parenthesized_expression "(lVar9 < lVar8)" ( (binary_expression "lVar9 < lVar8" identifier < identifier) )) ;) })) (if_statement "if (lVar3 == 1) break;" if (parenthesized_expression "(lVar3 == 1)" ( (binary_expression "lVar3 == 1" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "ppOVar7 = __first + (lVar4 - lVar3);" (assignment_expression "ppOVar7 = __first + (lVar4 - lVar3)" identifier = (binary_expression "__first + (lVar4 - lVar3)" identifier + (parenthesized_expression "(lVar4 - lVar3)" ( (binary_expression "lVar4 - lVar3" identifier - identifier) )))) ;) (if_statement "if (0 < lVar9) {\n        lVar5 = -8;\n        lVar8 = 0;\n        do {\n          uVar2 = *(undefined8 *)((long)ppOVar7 + lVar5);\n          lVar8 = lVar8 + 1;\n          *(undefined8 *)((long)ppOVar7 + lVar5) =\n               *(undefined8 *)((long)__first + lVar5 + lVar4 * 8);\n          *(undefined8 *)((long)__first + lVar5 + lVar4 * 8) = uVar2;\n          lVar5 = lVar5 + -8;\n        } while (lVar8 != lVar9);\n        ppOVar7 = ppOVar7 + -lVar8;\n      }" if (parenthesized_expression "(0 < lVar9)" ( (binary_expression "0 < lVar9" number_literal < identifier) )) (compound_statement "{\n        lVar5 = -8;\n        lVar8 = 0;\n        do {\n          uVar2 = *(undefined8 *)((long)ppOVar7 + lVar5);\n          lVar8 = lVar8 + 1;\n          *(undefined8 *)((long)ppOVar7 + lVar5) =\n               *(undefined8 *)((long)__first + lVar5 + lVar4 * 8);\n          *(undefined8 *)((long)__first + lVar5 + lVar4 * 8) = uVar2;\n          lVar5 = lVar5 + -8;\n        } while (lVar8 != lVar9);\n        ppOVar7 = ppOVar7 + -lVar8;\n      }" { (expression_statement "lVar5 = -8;" (assignment_expression "lVar5 = -8" identifier = number_literal) ;) (expression_statement "lVar8 = 0;" (assignment_expression "lVar8 = 0" identifier = number_literal) ;) (do_statement "do {\n          uVar2 = *(undefined8 *)((long)ppOVar7 + lVar5);\n          lVar8 = lVar8 + 1;\n          *(undefined8 *)((long)ppOVar7 + lVar5) =\n               *(undefined8 *)((long)__first + lVar5 + lVar4 * 8);\n          *(undefined8 *)((long)__first + lVar5 + lVar4 * 8) = uVar2;\n          lVar5 = lVar5 + -8;\n        } while (lVar8 != lVar9);" do (compound_statement "{\n          uVar2 = *(undefined8 *)((long)ppOVar7 + lVar5);\n          lVar8 = lVar8 + 1;\n          *(undefined8 *)((long)ppOVar7 + lVar5) =\n               *(undefined8 *)((long)__first + lVar5 + lVar4 * 8);\n          *(undefined8 *)((long)__first + lVar5 + lVar4 * 8) = uVar2;\n          lVar5 = lVar5 + -8;\n        }" { (expression_statement "uVar2 = *(undefined8 *)((long)ppOVar7 + lVar5);" (assignment_expression "uVar2 = *(undefined8 *)((long)ppOVar7 + lVar5)" identifier = (pointer_expression "*(undefined8 *)((long)ppOVar7 + lVar5)" * (cast_expression "(undefined8 *)((long)ppOVar7 + lVar5)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)ppOVar7 + lVar5)" ( (binary_expression "(long)ppOVar7 + lVar5" (cast_expression "(long)ppOVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) ))))) ;) (expression_statement "lVar8 = lVar8 + 1;" (assignment_expression "lVar8 = lVar8 + 1" identifier = (binary_expression "lVar8 + 1" identifier + number_literal)) ;) (expression_statement "*(undefined8 *)((long)ppOVar7 + lVar5) =\n               *(undefined8 *)((long)__first + lVar5 + lVar4 * 8);" (assignment_expression "*(undefined8 *)((long)ppOVar7 + lVar5) =\n               *(undefined8 *)((long)__first + lVar5 + lVar4 * 8)" (pointer_expression "*(undefined8 *)((long)ppOVar7 + lVar5)" * (cast_expression "(undefined8 *)((long)ppOVar7 + lVar5)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)ppOVar7 + lVar5)" ( (binary_expression "(long)ppOVar7 + lVar5" (cast_expression "(long)ppOVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) )))) = (pointer_expression "*(undefined8 *)((long)__first + lVar5 + lVar4 * 8)" * (cast_expression "(undefined8 *)((long)__first + lVar5 + lVar4 * 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)__first + lVar5 + lVar4 * 8)" ( (binary_expression "(long)__first + lVar5 + lVar4 * 8" (binary_expression "(long)__first + lVar5" (cast_expression "(long)__first" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + (binary_expression "lVar4 * 8" identifier * number_literal)) ))))) ;) (expression_statement "*(undefined8 *)((long)__first + lVar5 + lVar4 * 8) = uVar2;" (assignment_expression "*(undefined8 *)((long)__first + lVar5 + lVar4 * 8) = uVar2" (pointer_expression "*(undefined8 *)((long)__first + lVar5 + lVar4 * 8)" * (cast_expression "(undefined8 *)((long)__first + lVar5 + lVar4 * 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)__first + lVar5 + lVar4 * 8)" ( (binary_expression "(long)__first + lVar5 + lVar4 * 8" (binary_expression "(long)__first + lVar5" (cast_expression "(long)__first" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + (binary_expression "lVar4 * 8" identifier * number_literal)) )))) = identifier) ;) (expression_statement "lVar5 = lVar5 + -8;" (assignment_expression "lVar5 = lVar5 + -8" identifier = (binary_expression "lVar5 + -8" identifier + number_literal)) ;) }) while (parenthesized_expression "(lVar8 != lVar9)" ( (binary_expression "lVar8 != lVar9" identifier != identifier) )) ;) (expression_statement "ppOVar7 = ppOVar7 + -lVar8;" (assignment_expression "ppOVar7 = ppOVar7 + -lVar8" identifier = (binary_expression "ppOVar7 + -lVar8" identifier + (unary_expression "-lVar8" - identifier))) ;) })) (expression_statement "lVar9 = lVar4 % lVar3;" (assignment_expression "lVar9 = lVar4 % lVar3" identifier = (binary_expression "lVar4 % lVar3" identifier % identifier)) ;) (expression_statement "__first = ppOVar7;" (assignment_expression "__first = ppOVar7" identifier = identifier) ;) (if_statement "if (lVar9 == 0) {\n        return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                )ppOVar6;\n      }" if (parenthesized_expression "(lVar9 == 0)" ( (binary_expression "lVar9 == 0" identifier == number_literal) )) (compound_statement "{\n        return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                )ppOVar6;\n      }" { (return_statement "return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                )ppOVar6;" return (parenthesized_expression "(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                )ppOVar6" ( (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                )ppOVar6" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold" (binary_expression "__normal_iterator<gold::Output_segment**,_std" (binary_expression "__normal_iterator<gold" identifier < identifier) (ERROR "::Output_segment" : : identifier) * (pointer_expression "*,_std" * (ERROR "," ,) identifier)) (ERROR "::vector" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR ">" >) identifier) > identifier) > (ERROR ")" )) identifier) )) ;) })) })) (expression_statement "pOVar1 = __first[lVar4 + -1];" (assignment_expression "pOVar1 = __first[lVar4 + -1]" identifier = (subscript_expression "__first[lVar4 + -1]" identifier [ (binary_expression "lVar4 + -1" identifier + number_literal) ])) ;) (if_statement "if (__first != __first + lVar4 + -1) {\n      __n = (long)(__first + lVar4 + -1) - (long)__first;\n      memmove((void *)((long)__first + (lVar4 * 8 - __n)),__first,__n);\n    }" if (parenthesized_expression "(__first != __first + lVar4 + -1)" ( (binary_expression "__first != __first + lVar4 + -1" identifier != (binary_expression "__first + lVar4 + -1" (binary_expression "__first + lVar4" identifier + identifier) + number_literal)) )) (compound_statement "{\n      __n = (long)(__first + lVar4 + -1) - (long)__first;\n      memmove((void *)((long)__first + (lVar4 * 8 - __n)),__first,__n);\n    }" { (expression_statement "__n = (long)(__first + lVar4 + -1) - (long)__first;" (assignment_expression "__n = (long)(__first + lVar4 + -1) - (long)__first" identifier = (binary_expression "(long)(__first + lVar4 + -1) - (long)__first" (cast_expression "(long)(__first + lVar4 + -1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(__first + lVar4 + -1)" ( (binary_expression "__first + lVar4 + -1" (binary_expression "__first + lVar4" identifier + identifier) + number_literal) ))) - (cast_expression "(long)__first" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "memmove((void *)((long)__first + (lVar4 * 8 - __n)),__first,__n);" (call_expression "memmove((void *)((long)__first + (lVar4 * 8 - __n)),__first,__n)" identifier (argument_list "((void *)((long)__first + (lVar4 * 8 - __n)),__first,__n)" ( (cast_expression "(void *)((long)__first + (lVar4 * 8 - __n))" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)__first + (lVar4 * 8 - __n))" ( (binary_expression "(long)__first + (lVar4 * 8 - __n)" (cast_expression "(long)__first" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(lVar4 * 8 - __n)" ( (binary_expression "lVar4 * 8 - __n" (binary_expression "lVar4 * 8" identifier * number_literal) - identifier) ))) ))) , identifier , identifier ))) ;) })) (expression_statement "*__first = pOVar1;" (assignment_expression "*__first = pOVar1" (pointer_expression "*__first" * identifier) = identifier) ;) (expression_statement "__middle._M_current = ppOVar6;" (assignment_expression "__middle._M_current = ppOVar6" (field_expression "__middle._M_current" identifier . field_identifier) = identifier) ;) }))) (ERROR "return (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n          )__middle._M_current;\n}" return ( (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n          )__middle._M_current" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold" (binary_expression "__normal_iterator<gold::Output_segment**,_std" (binary_expression "__normal_iterator<gold" identifier < identifier) (ERROR "::Output_segment" : : identifier) * (pointer_expression "*,_std" * (ERROR "," ,) identifier)) (ERROR "::vector" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR ">" >) identifier) > identifier) > (ERROR ")" )) (field_expression "__middle._M_current" identifier . field_identifier)) ; }))
(translation_unit "undefined8 * FUN_001cbb40(undefined8 *param_1,undefined8 *param_2,undefined8 *param_3)\n\n{\n  undefined8 uVar1;\n  long lVar2;\n  long lVar3;\n  size_t __n;\n  long lVar4;\n  undefined8 *puVar5;\n  undefined8 *puVar6;\n  long lVar7;\n  long lVar8;\n  \n  if (param_1 == param_2) {\n    return param_3;\n  }\n  if (param_3 == param_2) {\n    return param_1;\n  }\n  lVar2 = (long)param_3 - (long)param_1 >> 3;\n  lVar8 = (long)param_2 - (long)param_1 >> 3;\n  puVar5 = (undefined8 *)((long)param_1 + ((long)param_3 - (long)param_2));\n  puVar6 = param_2;\n  if (lVar2 - lVar8 == lVar8) {\n    do {\n      uVar1 = *param_1;\n      puVar5 = param_1 + 1;\n      *param_1 = *puVar6;\n      *puVar6 = uVar1;\n      param_1 = puVar5;\n      puVar6 = puVar6 + 1;\n    } while (param_2 != puVar5);\n  }\n  else {\n    while( true ) {\n      lVar7 = lVar2 - lVar8;\n      lVar4 = lVar2;\n      lVar3 = lVar2;\n      lVar2 = lVar7;\n      if (lVar8 < lVar7) {\n        do {\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        } while (lVar8 < lVar7);\n      }\n      if (lVar2 == 1) break;\n      puVar6 = param_1 + (lVar3 - lVar2);\n      if (0 < lVar8) {\n        lVar4 = -8;\n        lVar7 = 0;\n        do {\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        } while (lVar7 != lVar8);\n        puVar6 = puVar6 + -lVar7;\n      }\n      lVar8 = lVar3 % lVar2;\n      param_1 = puVar6;\n      if (lVar8 == 0) {\n        return puVar5;\n      }\n    }\n    uVar1 = param_1[lVar3 + -1];\n    if (param_1 != param_1 + lVar3 + -1) {\n      __n = (long)(param_1 + lVar3 + -1) - (long)param_1;\n      memmove((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n);\n    }\n    *param_1 = uVar1;\n    param_2 = puVar5;\n  }\n  return param_2;\n}\n\n" (function_definition "undefined8 * FUN_001cbb40(undefined8 *param_1,undefined8 *param_2,undefined8 *param_3)\n\n{\n  undefined8 uVar1;\n  long lVar2;\n  long lVar3;\n  size_t __n;\n  long lVar4;\n  undefined8 *puVar5;\n  undefined8 *puVar6;\n  long lVar7;\n  long lVar8;\n  \n  if (param_1 == param_2) {\n    return param_3;\n  }\n  if (param_3 == param_2) {\n    return param_1;\n  }\n  lVar2 = (long)param_3 - (long)param_1 >> 3;\n  lVar8 = (long)param_2 - (long)param_1 >> 3;\n  puVar5 = (undefined8 *)((long)param_1 + ((long)param_3 - (long)param_2));\n  puVar6 = param_2;\n  if (lVar2 - lVar8 == lVar8) {\n    do {\n      uVar1 = *param_1;\n      puVar5 = param_1 + 1;\n      *param_1 = *puVar6;\n      *puVar6 = uVar1;\n      param_1 = puVar5;\n      puVar6 = puVar6 + 1;\n    } while (param_2 != puVar5);\n  }\n  else {\n    while( true ) {\n      lVar7 = lVar2 - lVar8;\n      lVar4 = lVar2;\n      lVar3 = lVar2;\n      lVar2 = lVar7;\n      if (lVar8 < lVar7) {\n        do {\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        } while (lVar8 < lVar7);\n      }\n      if (lVar2 == 1) break;\n      puVar6 = param_1 + (lVar3 - lVar2);\n      if (0 < lVar8) {\n        lVar4 = -8;\n        lVar7 = 0;\n        do {\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        } while (lVar7 != lVar8);\n        puVar6 = puVar6 + -lVar7;\n      }\n      lVar8 = lVar3 % lVar2;\n      param_1 = puVar6;\n      if (lVar8 == 0) {\n        return puVar5;\n      }\n    }\n    uVar1 = param_1[lVar3 + -1];\n    if (param_1 != param_1 + lVar3 + -1) {\n      __n = (long)(param_1 + lVar3 + -1) - (long)param_1;\n      memmove((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n);\n    }\n    *param_1 = uVar1;\n    param_2 = puVar5;\n  }\n  return param_2;\n}" type_identifier (pointer_declarator "* FUN_001cbb40(undefined8 *param_1,undefined8 *param_2,undefined8 *param_3)" * (function_declarator "FUN_001cbb40(undefined8 *param_1,undefined8 *param_2,undefined8 *param_3)" identifier (parameter_list "(undefined8 *param_1,undefined8 *param_2,undefined8 *param_3)" ( (parameter_declaration "undefined8 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined8 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined8 *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) )))) (compound_statement "{\n  undefined8 uVar1;\n  long lVar2;\n  long lVar3;\n  size_t __n;\n  long lVar4;\n  undefined8 *puVar5;\n  undefined8 *puVar6;\n  long lVar7;\n  long lVar8;\n  \n  if (param_1 == param_2) {\n    return param_3;\n  }\n  if (param_3 == param_2) {\n    return param_1;\n  }\n  lVar2 = (long)param_3 - (long)param_1 >> 3;\n  lVar8 = (long)param_2 - (long)param_1 >> 3;\n  puVar5 = (undefined8 *)((long)param_1 + ((long)param_3 - (long)param_2));\n  puVar6 = param_2;\n  if (lVar2 - lVar8 == lVar8) {\n    do {\n      uVar1 = *param_1;\n      puVar5 = param_1 + 1;\n      *param_1 = *puVar6;\n      *puVar6 = uVar1;\n      param_1 = puVar5;\n      puVar6 = puVar6 + 1;\n    } while (param_2 != puVar5);\n  }\n  else {\n    while( true ) {\n      lVar7 = lVar2 - lVar8;\n      lVar4 = lVar2;\n      lVar3 = lVar2;\n      lVar2 = lVar7;\n      if (lVar8 < lVar7) {\n        do {\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        } while (lVar8 < lVar7);\n      }\n      if (lVar2 == 1) break;\n      puVar6 = param_1 + (lVar3 - lVar2);\n      if (0 < lVar8) {\n        lVar4 = -8;\n        lVar7 = 0;\n        do {\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        } while (lVar7 != lVar8);\n        puVar6 = puVar6 + -lVar7;\n      }\n      lVar8 = lVar3 % lVar2;\n      param_1 = puVar6;\n      if (lVar8 == 0) {\n        return puVar5;\n      }\n    }\n    uVar1 = param_1[lVar3 + -1];\n    if (param_1 != param_1 + lVar3 + -1) {\n      __n = (long)(param_1 + lVar3 + -1) - (long)param_1;\n      memmove((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n);\n    }\n    *param_1 = uVar1;\n    param_2 = puVar5;\n  }\n  return param_2;\n}" { (declaration "undefined8 uVar1;" type_identifier identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "size_t __n;" primitive_type identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "undefined8 *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "long lVar7;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (if_statement "if (param_1 == param_2) {\n    return param_3;\n  }" if (parenthesized_expression "(param_1 == param_2)" ( (binary_expression "param_1 == param_2" identifier == identifier) )) (compound_statement "{\n    return param_3;\n  }" { (return_statement "return param_3;" return identifier ;) })) (if_statement "if (param_3 == param_2) {\n    return param_1;\n  }" if (parenthesized_expression "(param_3 == param_2)" ( (binary_expression "param_3 == param_2" identifier == identifier) )) (compound_statement "{\n    return param_1;\n  }" { (return_statement "return param_1;" return identifier ;) })) (expression_statement "lVar2 = (long)param_3 - (long)param_1 >> 3;" (assignment_expression "lVar2 = (long)param_3 - (long)param_1 >> 3" identifier = (binary_expression "(long)param_3 - (long)param_1 >> 3" (binary_expression "(long)param_3 - (long)param_1" (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) >> number_literal)) ;) (expression_statement "lVar8 = (long)param_2 - (long)param_1 >> 3;" (assignment_expression "lVar8 = (long)param_2 - (long)param_1 >> 3" identifier = (binary_expression "(long)param_2 - (long)param_1 >> 3" (binary_expression "(long)param_2 - (long)param_1" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) >> number_literal)) ;) (expression_statement "puVar5 = (undefined8 *)((long)param_1 + ((long)param_3 - (long)param_2));" (assignment_expression "puVar5 = (undefined8 *)((long)param_1 + ((long)param_3 - (long)param_2))" identifier = (cast_expression "(undefined8 *)((long)param_1 + ((long)param_3 - (long)param_2))" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + ((long)param_3 - (long)param_2))" ( (binary_expression "(long)param_1 + ((long)param_3 - (long)param_2)" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "((long)param_3 - (long)param_2)" ( (binary_expression "(long)param_3 - (long)param_2" (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) )))) ;) (expression_statement "puVar6 = param_2;" (assignment_expression "puVar6 = param_2" identifier = identifier) ;) (if_statement "if (lVar2 - lVar8 == lVar8) {\n    do {\n      uVar1 = *param_1;\n      puVar5 = param_1 + 1;\n      *param_1 = *puVar6;\n      *puVar6 = uVar1;\n      param_1 = puVar5;\n      puVar6 = puVar6 + 1;\n    } while (param_2 != puVar5);\n  }\n  else {\n    while( true ) {\n      lVar7 = lVar2 - lVar8;\n      lVar4 = lVar2;\n      lVar3 = lVar2;\n      lVar2 = lVar7;\n      if (lVar8 < lVar7) {\n        do {\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        } while (lVar8 < lVar7);\n      }\n      if (lVar2 == 1) break;\n      puVar6 = param_1 + (lVar3 - lVar2);\n      if (0 < lVar8) {\n        lVar4 = -8;\n        lVar7 = 0;\n        do {\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        } while (lVar7 != lVar8);\n        puVar6 = puVar6 + -lVar7;\n      }\n      lVar8 = lVar3 % lVar2;\n      param_1 = puVar6;\n      if (lVar8 == 0) {\n        return puVar5;\n      }\n    }\n    uVar1 = param_1[lVar3 + -1];\n    if (param_1 != param_1 + lVar3 + -1) {\n      __n = (long)(param_1 + lVar3 + -1) - (long)param_1;\n      memmove((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n);\n    }\n    *param_1 = uVar1;\n    param_2 = puVar5;\n  }" if (parenthesized_expression "(lVar2 - lVar8 == lVar8)" ( (binary_expression "lVar2 - lVar8 == lVar8" (binary_expression "lVar2 - lVar8" identifier - identifier) == identifier) )) (compound_statement "{\n    do {\n      uVar1 = *param_1;\n      puVar5 = param_1 + 1;\n      *param_1 = *puVar6;\n      *puVar6 = uVar1;\n      param_1 = puVar5;\n      puVar6 = puVar6 + 1;\n    } while (param_2 != puVar5);\n  }" { (do_statement "do {\n      uVar1 = *param_1;\n      puVar5 = param_1 + 1;\n      *param_1 = *puVar6;\n      *puVar6 = uVar1;\n      param_1 = puVar5;\n      puVar6 = puVar6 + 1;\n    } while (param_2 != puVar5);" do (compound_statement "{\n      uVar1 = *param_1;\n      puVar5 = param_1 + 1;\n      *param_1 = *puVar6;\n      *puVar6 = uVar1;\n      param_1 = puVar5;\n      puVar6 = puVar6 + 1;\n    }" { (expression_statement "uVar1 = *param_1;" (assignment_expression "uVar1 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "puVar5 = param_1 + 1;" (assignment_expression "puVar5 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ;) (expression_statement "*param_1 = *puVar6;" (assignment_expression "*param_1 = *puVar6" (pointer_expression "*param_1" * identifier) = (pointer_expression "*puVar6" * identifier)) ;) (expression_statement "*puVar6 = uVar1;" (assignment_expression "*puVar6 = uVar1" (pointer_expression "*puVar6" * identifier) = identifier) ;) (expression_statement "param_1 = puVar5;" (assignment_expression "param_1 = puVar5" identifier = identifier) ;) (expression_statement "puVar6 = puVar6 + 1;" (assignment_expression "puVar6 = puVar6 + 1" identifier = (binary_expression "puVar6 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(param_2 != puVar5)" ( (binary_expression "param_2 != puVar5" identifier != identifier) )) ;) }) (else_clause "else {\n    while( true ) {\n      lVar7 = lVar2 - lVar8;\n      lVar4 = lVar2;\n      lVar3 = lVar2;\n      lVar2 = lVar7;\n      if (lVar8 < lVar7) {\n        do {\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        } while (lVar8 < lVar7);\n      }\n      if (lVar2 == 1) break;\n      puVar6 = param_1 + (lVar3 - lVar2);\n      if (0 < lVar8) {\n        lVar4 = -8;\n        lVar7 = 0;\n        do {\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        } while (lVar7 != lVar8);\n        puVar6 = puVar6 + -lVar7;\n      }\n      lVar8 = lVar3 % lVar2;\n      param_1 = puVar6;\n      if (lVar8 == 0) {\n        return puVar5;\n      }\n    }\n    uVar1 = param_1[lVar3 + -1];\n    if (param_1 != param_1 + lVar3 + -1) {\n      __n = (long)(param_1 + lVar3 + -1) - (long)param_1;\n      memmove((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n);\n    }\n    *param_1 = uVar1;\n    param_2 = puVar5;\n  }" else (compound_statement "{\n    while( true ) {\n      lVar7 = lVar2 - lVar8;\n      lVar4 = lVar2;\n      lVar3 = lVar2;\n      lVar2 = lVar7;\n      if (lVar8 < lVar7) {\n        do {\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        } while (lVar8 < lVar7);\n      }\n      if (lVar2 == 1) break;\n      puVar6 = param_1 + (lVar3 - lVar2);\n      if (0 < lVar8) {\n        lVar4 = -8;\n        lVar7 = 0;\n        do {\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        } while (lVar7 != lVar8);\n        puVar6 = puVar6 + -lVar7;\n      }\n      lVar8 = lVar3 % lVar2;\n      param_1 = puVar6;\n      if (lVar8 == 0) {\n        return puVar5;\n      }\n    }\n    uVar1 = param_1[lVar3 + -1];\n    if (param_1 != param_1 + lVar3 + -1) {\n      __n = (long)(param_1 + lVar3 + -1) - (long)param_1;\n      memmove((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n);\n    }\n    *param_1 = uVar1;\n    param_2 = puVar5;\n  }" { (while_statement "while( true ) {\n      lVar7 = lVar2 - lVar8;\n      lVar4 = lVar2;\n      lVar3 = lVar2;\n      lVar2 = lVar7;\n      if (lVar8 < lVar7) {\n        do {\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        } while (lVar8 < lVar7);\n      }\n      if (lVar2 == 1) break;\n      puVar6 = param_1 + (lVar3 - lVar2);\n      if (0 < lVar8) {\n        lVar4 = -8;\n        lVar7 = 0;\n        do {\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        } while (lVar7 != lVar8);\n        puVar6 = puVar6 + -lVar7;\n      }\n      lVar8 = lVar3 % lVar2;\n      param_1 = puVar6;\n      if (lVar8 == 0) {\n        return puVar5;\n      }\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      lVar7 = lVar2 - lVar8;\n      lVar4 = lVar2;\n      lVar3 = lVar2;\n      lVar2 = lVar7;\n      if (lVar8 < lVar7) {\n        do {\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        } while (lVar8 < lVar7);\n      }\n      if (lVar2 == 1) break;\n      puVar6 = param_1 + (lVar3 - lVar2);\n      if (0 < lVar8) {\n        lVar4 = -8;\n        lVar7 = 0;\n        do {\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        } while (lVar7 != lVar8);\n        puVar6 = puVar6 + -lVar7;\n      }\n      lVar8 = lVar3 % lVar2;\n      param_1 = puVar6;\n      if (lVar8 == 0) {\n        return puVar5;\n      }\n    }" { (expression_statement "lVar7 = lVar2 - lVar8;" (assignment_expression "lVar7 = lVar2 - lVar8" identifier = (binary_expression "lVar2 - lVar8" identifier - identifier)) ;) (expression_statement "lVar4 = lVar2;" (assignment_expression "lVar4 = lVar2" identifier = identifier) ;) (expression_statement "lVar3 = lVar2;" (assignment_expression "lVar3 = lVar2" identifier = identifier) ;) (expression_statement "lVar2 = lVar7;" (assignment_expression "lVar2 = lVar7" identifier = identifier) ;) (if_statement "if (lVar8 < lVar7) {\n        do {\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        } while (lVar8 < lVar7);\n      }" if (parenthesized_expression "(lVar8 < lVar7)" ( (binary_expression "lVar8 < lVar7" identifier < identifier) )) (compound_statement "{\n        do {\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        } while (lVar8 < lVar7);\n      }" { (do_statement "do {\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        } while (lVar8 < lVar7);" do (compound_statement "{\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        }" { (expression_statement "lVar3 = lVar8;" (assignment_expression "lVar3 = lVar8" identifier = identifier) ;) (if_statement "if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }" if (parenthesized_expression "(lVar3 == 1)" ( (binary_expression "lVar3 == 1" identifier == number_literal) )) (compound_statement "{\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }" { (expression_statement "uVar1 = *param_1;" (assignment_expression "uVar1 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }" if (parenthesized_expression "(param_1 + 1 != param_1 + lVar4)" ( (binary_expression "param_1 + 1 != param_1 + lVar4" (binary_expression "param_1 + 1" identifier + number_literal) != (binary_expression "param_1 + lVar4" identifier + identifier)) )) (compound_statement "{\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }" { (expression_statement "memmove(param_1,param_1 + 1,lVar4 * 8 - 8);" (call_expression "memmove(param_1,param_1 + 1,lVar4 * 8 - 8)" identifier (argument_list "(param_1,param_1 + 1,lVar4 * 8 - 8)" ( identifier , (binary_expression "param_1 + 1" identifier + number_literal) , (binary_expression "lVar4 * 8 - 8" (binary_expression "lVar4 * 8" identifier * number_literal) - number_literal) ))) ;) })) (expression_statement "(param_1 + lVar4)[-1] = uVar1;" (assignment_expression "(param_1 + lVar4)[-1] = uVar1" (subscript_expression "(param_1 + lVar4)[-1]" (parenthesized_expression "(param_1 + lVar4)" ( (binary_expression "param_1 + lVar4" identifier + identifier) )) [ number_literal ]) = identifier) ;) (return_statement "return puVar5;" return identifier ;) })) (if_statement "if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }" if (parenthesized_expression "(0 < lVar7)" ( (binary_expression "0 < lVar7" number_literal < identifier) )) (compound_statement "{\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }" { (expression_statement "lVar2 = 0;" (assignment_expression "lVar2 = 0" identifier = number_literal) ;) (do_statement "do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);" do (compound_statement "{\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            }" { (expression_statement "uVar1 = param_1[lVar2];" (assignment_expression "uVar1 = param_1[lVar2]" identifier = (subscript_expression "param_1[lVar2]" identifier [ identifier ])) ;) (expression_statement "param_1[lVar2] = param_1[lVar3 + lVar2];" (assignment_expression "param_1[lVar2] = param_1[lVar3 + lVar2]" (subscript_expression "param_1[lVar2]" identifier [ identifier ]) = (subscript_expression "param_1[lVar3 + lVar2]" identifier [ (binary_expression "lVar3 + lVar2" identifier + identifier) ])) ;) (expression_statement "param_1[lVar3 + lVar2] = uVar1;" (assignment_expression "param_1[lVar3 + lVar2] = uVar1" (subscript_expression "param_1[lVar3 + lVar2]" identifier [ (binary_expression "lVar3 + lVar2" identifier + identifier) ]) = identifier) ;) (expression_statement "lVar2 = lVar2 + 1;" (assignment_expression "lVar2 = lVar2 + 1" identifier = (binary_expression "lVar2 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(lVar7 != lVar2)" ( (binary_expression "lVar7 != lVar2" identifier != identifier) )) ;) (expression_statement "param_1 = param_1 + lVar7;" (assignment_expression "param_1 = param_1 + lVar7" identifier = (binary_expression "param_1 + lVar7" identifier + identifier)) ;) })) (if_statement "if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }" if (parenthesized_expression "(lVar4 % lVar3 == 0)" ( (binary_expression "lVar4 % lVar3 == 0" (binary_expression "lVar4 % lVar3" identifier % identifier) == number_literal) )) (compound_statement "{\n            return puVar5;\n          }" { (return_statement "return puVar5;" return identifier ;) })) (expression_statement "lVar8 = lVar3 - lVar4 % lVar3;" (assignment_expression "lVar8 = lVar3 - lVar4 % lVar3" identifier = (binary_expression "lVar3 - lVar4 % lVar3" identifier - (binary_expression "lVar4 % lVar3" identifier % identifier))) ;) (expression_statement "lVar7 = lVar3 - lVar8;" (assignment_expression "lVar7 = lVar3 - lVar8" identifier = (binary_expression "lVar3 - lVar8" identifier - identifier)) ;) (expression_statement "lVar4 = lVar3;" (assignment_expression "lVar4 = lVar3" identifier = identifier) ;) (expression_statement "lVar2 = lVar7;" (assignment_expression "lVar2 = lVar7" identifier = identifier) ;) }) while (parenthesized_expression "(lVar8 < lVar7)" ( (binary_expression "lVar8 < lVar7" identifier < identifier) )) ;) })) (if_statement "if (lVar2 == 1) break;" if (parenthesized_expression "(lVar2 == 1)" ( (binary_expression "lVar2 == 1" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "puVar6 = param_1 + (lVar3 - lVar2);" (assignment_expression "puVar6 = param_1 + (lVar3 - lVar2)" identifier = (binary_expression "param_1 + (lVar3 - lVar2)" identifier + (parenthesized_expression "(lVar3 - lVar2)" ( (binary_expression "lVar3 - lVar2" identifier - identifier) )))) ;) (if_statement "if (0 < lVar8) {\n        lVar4 = -8;\n        lVar7 = 0;\n        do {\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        } while (lVar7 != lVar8);\n        puVar6 = puVar6 + -lVar7;\n      }" if (parenthesized_expression "(0 < lVar8)" ( (binary_expression "0 < lVar8" number_literal < identifier) )) (compound_statement "{\n        lVar4 = -8;\n        lVar7 = 0;\n        do {\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        } while (lVar7 != lVar8);\n        puVar6 = puVar6 + -lVar7;\n      }" { (expression_statement "lVar4 = -8;" (assignment_expression "lVar4 = -8" identifier = number_literal) ;) (expression_statement "lVar7 = 0;" (assignment_expression "lVar7 = 0" identifier = number_literal) ;) (do_statement "do {\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        } while (lVar7 != lVar8);" do (compound_statement "{\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        }" { (expression_statement "uVar1 = *(undefined8 *)((long)puVar6 + lVar4);" (assignment_expression "uVar1 = *(undefined8 *)((long)puVar6 + lVar4)" identifier = (pointer_expression "*(undefined8 *)((long)puVar6 + lVar4)" * (cast_expression "(undefined8 *)((long)puVar6 + lVar4)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar6 + lVar4)" ( (binary_expression "(long)puVar6 + lVar4" (cast_expression "(long)puVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) ))))) ;) (expression_statement "lVar7 = lVar7 + 1;" (assignment_expression "lVar7 = lVar7 + 1" identifier = (binary_expression "lVar7 + 1" identifier + number_literal)) ;) (expression_statement "*(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;" (assignment_expression "*(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)" (pointer_expression "*(undefined8 *)((long)puVar6 + lVar4)" * (cast_expression "(undefined8 *)((long)puVar6 + lVar4)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar6 + lVar4)" ( (binary_expression "(long)puVar6 + lVar4" (cast_expression "(long)puVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) )))) = (pointer_expression "*(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)" * (cast_expression "(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + lVar4 + lVar3 * 8)" ( (binary_expression "(long)param_1 + lVar4 + lVar3 * 8" (binary_expression "(long)param_1 + lVar4" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + (binary_expression "lVar3 * 8" identifier * number_literal)) ))))) ;) (expression_statement "*(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;" (assignment_expression "*(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1" (pointer_expression "*(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)" * (cast_expression "(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + lVar4 + lVar3 * 8)" ( (binary_expression "(long)param_1 + lVar4 + lVar3 * 8" (binary_expression "(long)param_1 + lVar4" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + (binary_expression "lVar3 * 8" identifier * number_literal)) )))) = identifier) ;) (expression_statement "lVar4 = lVar4 + -8;" (assignment_expression "lVar4 = lVar4 + -8" identifier = (binary_expression "lVar4 + -8" identifier + number_literal)) ;) }) while (parenthesized_expression "(lVar7 != lVar8)" ( (binary_expression "lVar7 != lVar8" identifier != identifier) )) ;) (expression_statement "puVar6 = puVar6 + -lVar7;" (assignment_expression "puVar6 = puVar6 + -lVar7" identifier = (binary_expression "puVar6 + -lVar7" identifier + (unary_expression "-lVar7" - identifier))) ;) })) (expression_statement "lVar8 = lVar3 % lVar2;" (assignment_expression "lVar8 = lVar3 % lVar2" identifier = (binary_expression "lVar3 % lVar2" identifier % identifier)) ;) (expression_statement "param_1 = puVar6;" (assignment_expression "param_1 = puVar6" identifier = identifier) ;) (if_statement "if (lVar8 == 0) {\n        return puVar5;\n      }" if (parenthesized_expression "(lVar8 == 0)" ( (binary_expression "lVar8 == 0" identifier == number_literal) )) (compound_statement "{\n        return puVar5;\n      }" { (return_statement "return puVar5;" return identifier ;) })) })) (expression_statement "uVar1 = param_1[lVar3 + -1];" (assignment_expression "uVar1 = param_1[lVar3 + -1]" identifier = (subscript_expression "param_1[lVar3 + -1]" identifier [ (binary_expression "lVar3 + -1" identifier + number_literal) ])) ;) (if_statement "if (param_1 != param_1 + lVar3 + -1) {\n      __n = (long)(param_1 + lVar3 + -1) - (long)param_1;\n      memmove((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n);\n    }" if (parenthesized_expression "(param_1 != param_1 + lVar3 + -1)" ( (binary_expression "param_1 != param_1 + lVar3 + -1" identifier != (binary_expression "param_1 + lVar3 + -1" (binary_expression "param_1 + lVar3" identifier + identifier) + number_literal)) )) (compound_statement "{\n      __n = (long)(param_1 + lVar3 + -1) - (long)param_1;\n      memmove((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n);\n    }" { (expression_statement "__n = (long)(param_1 + lVar3 + -1) - (long)param_1;" (assignment_expression "__n = (long)(param_1 + lVar3 + -1) - (long)param_1" identifier = (binary_expression "(long)(param_1 + lVar3 + -1) - (long)param_1" (cast_expression "(long)(param_1 + lVar3 + -1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(param_1 + lVar3 + -1)" ( (binary_expression "param_1 + lVar3 + -1" (binary_expression "param_1 + lVar3" identifier + identifier) + number_literal) ))) - (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "memmove((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n);" (call_expression "memmove((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n)" identifier (argument_list "((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n)" ( (cast_expression "(void *)((long)param_1 + (lVar3 * 8 - __n))" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + (lVar3 * 8 - __n))" ( (binary_expression "(long)param_1 + (lVar3 * 8 - __n)" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(lVar3 * 8 - __n)" ( (binary_expression "lVar3 * 8 - __n" (binary_expression "lVar3 * 8" identifier * number_literal) - identifier) ))) ))) , identifier , identifier ))) ;) })) (expression_statement "*param_1 = uVar1;" (assignment_expression "*param_1 = uVar1" (pointer_expression "*param_1" * identifier) = identifier) ;) (expression_statement "param_2 = puVar5;" (assignment_expression "param_2 = puVar5" identifier = identifier) ;) }))) (return_statement "return param_2;" return identifier ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) )))) (compound_statement { (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) >> LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) >> LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ))) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT - IDENT) == IDENT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) }) (else_clause else (compound_statement { (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) != (binary_expression IDENT + IDENT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT + LIT) , (binary_expression (binary_expression IDENT * LIT) - LIT) ))) ;) })) (expression_statement (assignment_expression (subscript_expression (parenthesized_expression ( (binary_expression IDENT + IDENT) )) [ LIT ]) = IDENT) ;) (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ IDENT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ IDENT ]) = (subscript_expression IDENT [ (binary_expression IDENT + IDENT) ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression IDENT + IDENT) ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT % IDENT) == LIT) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - (binary_expression IDENT % IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (parenthesized_expression ( (binary_expression IDENT - IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (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 (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) + (binary_expression IDENT * LIT)) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) + (binary_expression IDENT * LIT)) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (unary_expression - IDENT))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT % IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return IDENT ;) })) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ (binary_expression IDENT + LIT) ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (binary_expression (binary_expression IDENT + IDENT) + LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + IDENT) + LIT) ))) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT))) ;) (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (parenthesized_expression ( (binary_expression (binary_expression IDENT * LIT) - IDENT) ))) ))) , IDENT , IDENT ))) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) (return_statement return IDENT ;) })))
(function_definition "undefined8 * FUN_001cbb40(undefined8 *param_1,undefined8 *param_2,undefined8 *param_3)\n\n{\n  undefined8 uVar1;\n  long lVar2;\n  long lVar3;\n  size_t __n;\n  long lVar4;\n  undefined8 *puVar5;\n  undefined8 *puVar6;\n  long lVar7;\n  long lVar8;\n  \n  if (param_1 == param_2) {\n    return param_3;\n  }\n  if (param_3 == param_2) {\n    return param_1;\n  }\n  lVar2 = (long)param_3 - (long)param_1 >> 3;\n  lVar8 = (long)param_2 - (long)param_1 >> 3;\n  puVar5 = (undefined8 *)((long)param_1 + ((long)param_3 - (long)param_2));\n  puVar6 = param_2;\n  if (lVar2 - lVar8 == lVar8) {\n    do {\n      uVar1 = *param_1;\n      puVar5 = param_1 + 1;\n      *param_1 = *puVar6;\n      *puVar6 = uVar1;\n      param_1 = puVar5;\n      puVar6 = puVar6 + 1;\n    } while (param_2 != puVar5);\n  }\n  else {\n    while( true ) {\n      lVar7 = lVar2 - lVar8;\n      lVar4 = lVar2;\n      lVar3 = lVar2;\n      lVar2 = lVar7;\n      if (lVar8 < lVar7) {\n        do {\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        } while (lVar8 < lVar7);\n      }\n      if (lVar2 == 1) break;\n      puVar6 = param_1 + (lVar3 - lVar2);\n      if (0 < lVar8) {\n        lVar4 = -8;\n        lVar7 = 0;\n        do {\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        } while (lVar7 != lVar8);\n        puVar6 = puVar6 + -lVar7;\n      }\n      lVar8 = lVar3 % lVar2;\n      param_1 = puVar6;\n      if (lVar8 == 0) {\n        return puVar5;\n      }\n    }\n    uVar1 = param_1[lVar3 + -1];\n    if (param_1 != param_1 + lVar3 + -1) {\n      __n = (long)(param_1 + lVar3 + -1) - (long)param_1;\n      memmove((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n);\n    }\n    *param_1 = uVar1;\n    param_2 = puVar5;\n  }\n  return param_2;\n}" (type_identifier "undefined8") (pointer_declarator "* FUN_001cbb40(undefined8 *param_1,undefined8 *param_2,undefined8 *param_3)" (* "*") (function_declarator "FUN_001cbb40(undefined8 *param_1,undefined8 *param_2,undefined8 *param_3)" (identifier "FUN_001cbb40") (parameter_list "(undefined8 *param_1,undefined8 *param_2,undefined8 *param_3)" (( "(") (parameter_declaration "undefined8 *param_1" (type_identifier "undefined8") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "undefined8 *param_2" (type_identifier "undefined8") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "undefined8 *param_3" (type_identifier "undefined8") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) () ")")))) (compound_statement "{\n  undefined8 uVar1;\n  long lVar2;\n  long lVar3;\n  size_t __n;\n  long lVar4;\n  undefined8 *puVar5;\n  undefined8 *puVar6;\n  long lVar7;\n  long lVar8;\n  \n  if (param_1 == param_2) {\n    return param_3;\n  }\n  if (param_3 == param_2) {\n    return param_1;\n  }\n  lVar2 = (long)param_3 - (long)param_1 >> 3;\n  lVar8 = (long)param_2 - (long)param_1 >> 3;\n  puVar5 = (undefined8 *)((long)param_1 + ((long)param_3 - (long)param_2));\n  puVar6 = param_2;\n  if (lVar2 - lVar8 == lVar8) {\n    do {\n      uVar1 = *param_1;\n      puVar5 = param_1 + 1;\n      *param_1 = *puVar6;\n      *puVar6 = uVar1;\n      param_1 = puVar5;\n      puVar6 = puVar6 + 1;\n    } while (param_2 != puVar5);\n  }\n  else {\n    while( true ) {\n      lVar7 = lVar2 - lVar8;\n      lVar4 = lVar2;\n      lVar3 = lVar2;\n      lVar2 = lVar7;\n      if (lVar8 < lVar7) {\n        do {\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        } while (lVar8 < lVar7);\n      }\n      if (lVar2 == 1) break;\n      puVar6 = param_1 + (lVar3 - lVar2);\n      if (0 < lVar8) {\n        lVar4 = -8;\n        lVar7 = 0;\n        do {\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        } while (lVar7 != lVar8);\n        puVar6 = puVar6 + -lVar7;\n      }\n      lVar8 = lVar3 % lVar2;\n      param_1 = puVar6;\n      if (lVar8 == 0) {\n        return puVar5;\n      }\n    }\n    uVar1 = param_1[lVar3 + -1];\n    if (param_1 != param_1 + lVar3 + -1) {\n      __n = (long)(param_1 + lVar3 + -1) - (long)param_1;\n      memmove((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n);\n    }\n    *param_1 = uVar1;\n    param_2 = puVar5;\n  }\n  return param_2;\n}" ({ "{") (declaration "undefined8 uVar1;" (type_identifier "undefined8") (identifier "uVar1") (; ";")) (declaration "long lVar2;" (sized_type_specifier "long" (long "long")) (identifier "lVar2") (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (declaration "size_t __n;" (primitive_type "size_t") (identifier "__n") (; ";")) (declaration "long lVar4;" (sized_type_specifier "long" (long "long")) (identifier "lVar4") (; ";")) (declaration "undefined8 *puVar5;" (type_identifier "undefined8") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (declaration "undefined8 *puVar6;" (type_identifier "undefined8") (pointer_declarator "*puVar6" (* "*") (identifier "puVar6")) (; ";")) (declaration "long lVar7;" (sized_type_specifier "long" (long "long")) (identifier "lVar7") (; ";")) (declaration "long lVar8;" (sized_type_specifier "long" (long "long")) (identifier "lVar8") (; ";")) (if_statement "if (param_1 == param_2) {\n    return param_3;\n  }" (if "if") (parenthesized_expression "(param_1 == param_2)" (( "(") (binary_expression "param_1 == param_2" (identifier "param_1") (== "==") (identifier "param_2")) () ")")) (compound_statement "{\n    return param_3;\n  }" ({ "{") (return_statement "return param_3;" (return "return") (identifier "param_3") (; ";")) (} "}"))) (if_statement "if (param_3 == param_2) {\n    return param_1;\n  }" (if "if") (parenthesized_expression "(param_3 == param_2)" (( "(") (binary_expression "param_3 == param_2" (identifier "param_3") (== "==") (identifier "param_2")) () ")")) (compound_statement "{\n    return param_1;\n  }" ({ "{") (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}"))) (expression_statement "lVar2 = (long)param_3 - (long)param_1 >> 3;" (assignment_expression "lVar2 = (long)param_3 - (long)param_1 >> 3" (identifier "lVar2") (= "=") (binary_expression "(long)param_3 - (long)param_1 >> 3" (binary_expression "(long)param_3 - (long)param_1" (cast_expression "(long)param_3" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_3")) (- "-") (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1"))) (>> ">>") (number_literal "3"))) (; ";")) (expression_statement "lVar8 = (long)param_2 - (long)param_1 >> 3;" (assignment_expression "lVar8 = (long)param_2 - (long)param_1 >> 3" (identifier "lVar8") (= "=") (binary_expression "(long)param_2 - (long)param_1 >> 3" (binary_expression "(long)param_2 - (long)param_1" (cast_expression "(long)param_2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_2")) (- "-") (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1"))) (>> ">>") (number_literal "3"))) (; ";")) (expression_statement "puVar5 = (undefined8 *)((long)param_1 + ((long)param_3 - (long)param_2));" (assignment_expression "puVar5 = (undefined8 *)((long)param_1 + ((long)param_3 - (long)param_2))" (identifier "puVar5") (= "=") (cast_expression "(undefined8 *)((long)param_1 + ((long)param_3 - (long)param_2))" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + ((long)param_3 - (long)param_2))" (( "(") (binary_expression "(long)param_1 + ((long)param_3 - (long)param_2)" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (parenthesized_expression "((long)param_3 - (long)param_2)" (( "(") (binary_expression "(long)param_3 - (long)param_2" (cast_expression "(long)param_3" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_3")) (- "-") (cast_expression "(long)param_2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_2"))) () ")"))) () ")")))) (; ";")) (expression_statement "puVar6 = param_2;" (assignment_expression "puVar6 = param_2" (identifier "puVar6") (= "=") (identifier "param_2")) (; ";")) (if_statement "if (lVar2 - lVar8 == lVar8) {\n    do {\n      uVar1 = *param_1;\n      puVar5 = param_1 + 1;\n      *param_1 = *puVar6;\n      *puVar6 = uVar1;\n      param_1 = puVar5;\n      puVar6 = puVar6 + 1;\n    } while (param_2 != puVar5);\n  }\n  else {\n    while( true ) {\n      lVar7 = lVar2 - lVar8;\n      lVar4 = lVar2;\n      lVar3 = lVar2;\n      lVar2 = lVar7;\n      if (lVar8 < lVar7) {\n        do {\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        } while (lVar8 < lVar7);\n      }\n      if (lVar2 == 1) break;\n      puVar6 = param_1 + (lVar3 - lVar2);\n      if (0 < lVar8) {\n        lVar4 = -8;\n        lVar7 = 0;\n        do {\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        } while (lVar7 != lVar8);\n        puVar6 = puVar6 + -lVar7;\n      }\n      lVar8 = lVar3 % lVar2;\n      param_1 = puVar6;\n      if (lVar8 == 0) {\n        return puVar5;\n      }\n    }\n    uVar1 = param_1[lVar3 + -1];\n    if (param_1 != param_1 + lVar3 + -1) {\n      __n = (long)(param_1 + lVar3 + -1) - (long)param_1;\n      memmove((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n);\n    }\n    *param_1 = uVar1;\n    param_2 = puVar5;\n  }" (if "if") (parenthesized_expression "(lVar2 - lVar8 == lVar8)" (( "(") (binary_expression "lVar2 - lVar8 == lVar8" (binary_expression "lVar2 - lVar8" (identifier "lVar2") (- "-") (identifier "lVar8")) (== "==") (identifier "lVar8")) () ")")) (compound_statement "{\n    do {\n      uVar1 = *param_1;\n      puVar5 = param_1 + 1;\n      *param_1 = *puVar6;\n      *puVar6 = uVar1;\n      param_1 = puVar5;\n      puVar6 = puVar6 + 1;\n    } while (param_2 != puVar5);\n  }" ({ "{") (do_statement "do {\n      uVar1 = *param_1;\n      puVar5 = param_1 + 1;\n      *param_1 = *puVar6;\n      *puVar6 = uVar1;\n      param_1 = puVar5;\n      puVar6 = puVar6 + 1;\n    } while (param_2 != puVar5);" (do "do") (compound_statement "{\n      uVar1 = *param_1;\n      puVar5 = param_1 + 1;\n      *param_1 = *puVar6;\n      *puVar6 = uVar1;\n      param_1 = puVar5;\n      puVar6 = puVar6 + 1;\n    }" ({ "{") (expression_statement "uVar1 = *param_1;" (assignment_expression "uVar1 = *param_1" (identifier "uVar1") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "puVar5 = param_1 + 1;" (assignment_expression "puVar5 = param_1 + 1" (identifier "puVar5") (= "=") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*param_1 = *puVar6;" (assignment_expression "*param_1 = *puVar6" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (pointer_expression "*puVar6" (* "*") (identifier "puVar6"))) (; ";")) (expression_statement "*puVar6 = uVar1;" (assignment_expression "*puVar6 = uVar1" (pointer_expression "*puVar6" (* "*") (identifier "puVar6")) (= "=") (identifier "uVar1")) (; ";")) (expression_statement "param_1 = puVar5;" (assignment_expression "param_1 = puVar5" (identifier "param_1") (= "=") (identifier "puVar5")) (; ";")) (expression_statement "puVar6 = puVar6 + 1;" (assignment_expression "puVar6 = puVar6 + 1" (identifier "puVar6") (= "=") (binary_expression "puVar6 + 1" (identifier "puVar6") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_2 != puVar5)" (( "(") (binary_expression "param_2 != puVar5" (identifier "param_2") (!= "!=") (identifier "puVar5")) () ")")) (; ";")) (} "}")) (else_clause "else {\n    while( true ) {\n      lVar7 = lVar2 - lVar8;\n      lVar4 = lVar2;\n      lVar3 = lVar2;\n      lVar2 = lVar7;\n      if (lVar8 < lVar7) {\n        do {\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        } while (lVar8 < lVar7);\n      }\n      if (lVar2 == 1) break;\n      puVar6 = param_1 + (lVar3 - lVar2);\n      if (0 < lVar8) {\n        lVar4 = -8;\n        lVar7 = 0;\n        do {\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        } while (lVar7 != lVar8);\n        puVar6 = puVar6 + -lVar7;\n      }\n      lVar8 = lVar3 % lVar2;\n      param_1 = puVar6;\n      if (lVar8 == 0) {\n        return puVar5;\n      }\n    }\n    uVar1 = param_1[lVar3 + -1];\n    if (param_1 != param_1 + lVar3 + -1) {\n      __n = (long)(param_1 + lVar3 + -1) - (long)param_1;\n      memmove((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n);\n    }\n    *param_1 = uVar1;\n    param_2 = puVar5;\n  }" (else "else") (compound_statement "{\n    while( true ) {\n      lVar7 = lVar2 - lVar8;\n      lVar4 = lVar2;\n      lVar3 = lVar2;\n      lVar2 = lVar7;\n      if (lVar8 < lVar7) {\n        do {\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        } while (lVar8 < lVar7);\n      }\n      if (lVar2 == 1) break;\n      puVar6 = param_1 + (lVar3 - lVar2);\n      if (0 < lVar8) {\n        lVar4 = -8;\n        lVar7 = 0;\n        do {\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        } while (lVar7 != lVar8);\n        puVar6 = puVar6 + -lVar7;\n      }\n      lVar8 = lVar3 % lVar2;\n      param_1 = puVar6;\n      if (lVar8 == 0) {\n        return puVar5;\n      }\n    }\n    uVar1 = param_1[lVar3 + -1];\n    if (param_1 != param_1 + lVar3 + -1) {\n      __n = (long)(param_1 + lVar3 + -1) - (long)param_1;\n      memmove((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n);\n    }\n    *param_1 = uVar1;\n    param_2 = puVar5;\n  }" ({ "{") (while_statement "while( true ) {\n      lVar7 = lVar2 - lVar8;\n      lVar4 = lVar2;\n      lVar3 = lVar2;\n      lVar2 = lVar7;\n      if (lVar8 < lVar7) {\n        do {\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        } while (lVar8 < lVar7);\n      }\n      if (lVar2 == 1) break;\n      puVar6 = param_1 + (lVar3 - lVar2);\n      if (0 < lVar8) {\n        lVar4 = -8;\n        lVar7 = 0;\n        do {\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        } while (lVar7 != lVar8);\n        puVar6 = puVar6 + -lVar7;\n      }\n      lVar8 = lVar3 % lVar2;\n      param_1 = puVar6;\n      if (lVar8 == 0) {\n        return puVar5;\n      }\n    }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n      lVar7 = lVar2 - lVar8;\n      lVar4 = lVar2;\n      lVar3 = lVar2;\n      lVar2 = lVar7;\n      if (lVar8 < lVar7) {\n        do {\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        } while (lVar8 < lVar7);\n      }\n      if (lVar2 == 1) break;\n      puVar6 = param_1 + (lVar3 - lVar2);\n      if (0 < lVar8) {\n        lVar4 = -8;\n        lVar7 = 0;\n        do {\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        } while (lVar7 != lVar8);\n        puVar6 = puVar6 + -lVar7;\n      }\n      lVar8 = lVar3 % lVar2;\n      param_1 = puVar6;\n      if (lVar8 == 0) {\n        return puVar5;\n      }\n    }" ({ "{") (expression_statement "lVar7 = lVar2 - lVar8;" (assignment_expression "lVar7 = lVar2 - lVar8" (identifier "lVar7") (= "=") (binary_expression "lVar2 - lVar8" (identifier "lVar2") (- "-") (identifier "lVar8"))) (; ";")) (expression_statement "lVar4 = lVar2;" (assignment_expression "lVar4 = lVar2" (identifier "lVar4") (= "=") (identifier "lVar2")) (; ";")) (expression_statement "lVar3 = lVar2;" (assignment_expression "lVar3 = lVar2" (identifier "lVar3") (= "=") (identifier "lVar2")) (; ";")) (expression_statement "lVar2 = lVar7;" (assignment_expression "lVar2 = lVar7" (identifier "lVar2") (= "=") (identifier "lVar7")) (; ";")) (if_statement "if (lVar8 < lVar7) {\n        do {\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        } while (lVar8 < lVar7);\n      }" (if "if") (parenthesized_expression "(lVar8 < lVar7)" (( "(") (binary_expression "lVar8 < lVar7" (identifier "lVar8") (< "<") (identifier "lVar7")) () ")")) (compound_statement "{\n        do {\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        } while (lVar8 < lVar7);\n      }" ({ "{") (do_statement "do {\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        } while (lVar8 < lVar7);" (do "do") (compound_statement "{\n          lVar3 = lVar8;\n          if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }\n          if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }\n          if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }\n          lVar8 = lVar3 - lVar4 % lVar3;\n          lVar7 = lVar3 - lVar8;\n          lVar4 = lVar3;\n          lVar2 = lVar7;\n        }" ({ "{") (expression_statement "lVar3 = lVar8;" (assignment_expression "lVar3 = lVar8" (identifier "lVar3") (= "=") (identifier "lVar8")) (; ";")) (if_statement "if (lVar3 == 1) {\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }" (if "if") (parenthesized_expression "(lVar3 == 1)" (( "(") (binary_expression "lVar3 == 1" (identifier "lVar3") (== "==") (number_literal "1")) () ")")) (compound_statement "{\n            uVar1 = *param_1;\n            if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }\n            (param_1 + lVar4)[-1] = uVar1;\n            return puVar5;\n          }" ({ "{") (expression_statement "uVar1 = *param_1;" (assignment_expression "uVar1 = *param_1" (identifier "uVar1") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (if_statement "if (param_1 + 1 != param_1 + lVar4) {\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }" (if "if") (parenthesized_expression "(param_1 + 1 != param_1 + lVar4)" (( "(") (binary_expression "param_1 + 1 != param_1 + lVar4" (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1")) (!= "!=") (binary_expression "param_1 + lVar4" (identifier "param_1") (+ "+") (identifier "lVar4"))) () ")")) (compound_statement "{\n              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);\n            }" ({ "{") (expression_statement "memmove(param_1,param_1 + 1,lVar4 * 8 - 8);" (call_expression "memmove(param_1,param_1 + 1,lVar4 * 8 - 8)" (identifier "memmove") (argument_list "(param_1,param_1 + 1,lVar4 * 8 - 8)" (( "(") (identifier "param_1") (, ",") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1")) (, ",") (binary_expression "lVar4 * 8 - 8" (binary_expression "lVar4 * 8" (identifier "lVar4") (* "*") (number_literal "8")) (- "-") (number_literal "8")) () ")"))) (; ";")) (} "}"))) (expression_statement "(param_1 + lVar4)[-1] = uVar1;" (assignment_expression "(param_1 + lVar4)[-1] = uVar1" (subscript_expression "(param_1 + lVar4)[-1]" (parenthesized_expression "(param_1 + lVar4)" (( "(") (binary_expression "param_1 + lVar4" (identifier "param_1") (+ "+") (identifier "lVar4")) () ")")) ([ "[") (number_literal "-1") (] "]")) (= "=") (identifier "uVar1")) (; ";")) (return_statement "return puVar5;" (return "return") (identifier "puVar5") (; ";")) (} "}"))) (if_statement "if (0 < lVar7) {\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }" (if "if") (parenthesized_expression "(0 < lVar7)" (( "(") (binary_expression "0 < lVar7" (number_literal "0") (< "<") (identifier "lVar7")) () ")")) (compound_statement "{\n            lVar2 = 0;\n            do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);\n            param_1 = param_1 + lVar7;\n          }" ({ "{") (expression_statement "lVar2 = 0;" (assignment_expression "lVar2 = 0" (identifier "lVar2") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            } while (lVar7 != lVar2);" (do "do") (compound_statement "{\n              uVar1 = param_1[lVar2];\n              param_1[lVar2] = param_1[lVar3 + lVar2];\n              param_1[lVar3 + lVar2] = uVar1;\n              lVar2 = lVar2 + 1;\n            }" ({ "{") (expression_statement "uVar1 = param_1[lVar2];" (assignment_expression "uVar1 = param_1[lVar2]" (identifier "uVar1") (= "=") (subscript_expression "param_1[lVar2]" (identifier "param_1") ([ "[") (identifier "lVar2") (] "]"))) (; ";")) (expression_statement "param_1[lVar2] = param_1[lVar3 + lVar2];" (assignment_expression "param_1[lVar2] = param_1[lVar3 + lVar2]" (subscript_expression "param_1[lVar2]" (identifier "param_1") ([ "[") (identifier "lVar2") (] "]")) (= "=") (subscript_expression "param_1[lVar3 + lVar2]" (identifier "param_1") ([ "[") (binary_expression "lVar3 + lVar2" (identifier "lVar3") (+ "+") (identifier "lVar2")) (] "]"))) (; ";")) (expression_statement "param_1[lVar3 + lVar2] = uVar1;" (assignment_expression "param_1[lVar3 + lVar2] = uVar1" (subscript_expression "param_1[lVar3 + lVar2]" (identifier "param_1") ([ "[") (binary_expression "lVar3 + lVar2" (identifier "lVar3") (+ "+") (identifier "lVar2")) (] "]")) (= "=") (identifier "uVar1")) (; ";")) (expression_statement "lVar2 = lVar2 + 1;" (assignment_expression "lVar2 = lVar2 + 1" (identifier "lVar2") (= "=") (binary_expression "lVar2 + 1" (identifier "lVar2") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(lVar7 != lVar2)" (( "(") (binary_expression "lVar7 != lVar2" (identifier "lVar7") (!= "!=") (identifier "lVar2")) () ")")) (; ";")) (expression_statement "param_1 = param_1 + lVar7;" (assignment_expression "param_1 = param_1 + lVar7" (identifier "param_1") (= "=") (binary_expression "param_1 + lVar7" (identifier "param_1") (+ "+") (identifier "lVar7"))) (; ";")) (} "}"))) (if_statement "if (lVar4 % lVar3 == 0) {\n            return puVar5;\n          }" (if "if") (parenthesized_expression "(lVar4 % lVar3 == 0)" (( "(") (binary_expression "lVar4 % lVar3 == 0" (binary_expression "lVar4 % lVar3" (identifier "lVar4") (% "%") (identifier "lVar3")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n            return puVar5;\n          }" ({ "{") (return_statement "return puVar5;" (return "return") (identifier "puVar5") (; ";")) (} "}"))) (expression_statement "lVar8 = lVar3 - lVar4 % lVar3;" (assignment_expression "lVar8 = lVar3 - lVar4 % lVar3" (identifier "lVar8") (= "=") (binary_expression "lVar3 - lVar4 % lVar3" (identifier "lVar3") (- "-") (binary_expression "lVar4 % lVar3" (identifier "lVar4") (% "%") (identifier "lVar3")))) (; ";")) (expression_statement "lVar7 = lVar3 - lVar8;" (assignment_expression "lVar7 = lVar3 - lVar8" (identifier "lVar7") (= "=") (binary_expression "lVar3 - lVar8" (identifier "lVar3") (- "-") (identifier "lVar8"))) (; ";")) (expression_statement "lVar4 = lVar3;" (assignment_expression "lVar4 = lVar3" (identifier "lVar4") (= "=") (identifier "lVar3")) (; ";")) (expression_statement "lVar2 = lVar7;" (assignment_expression "lVar2 = lVar7" (identifier "lVar2") (= "=") (identifier "lVar7")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(lVar8 < lVar7)" (( "(") (binary_expression "lVar8 < lVar7" (identifier "lVar8") (< "<") (identifier "lVar7")) () ")")) (; ";")) (} "}"))) (if_statement "if (lVar2 == 1) break;" (if "if") (parenthesized_expression "(lVar2 == 1)" (( "(") (binary_expression "lVar2 == 1" (identifier "lVar2") (== "==") (number_literal "1")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "puVar6 = param_1 + (lVar3 - lVar2);" (assignment_expression "puVar6 = param_1 + (lVar3 - lVar2)" (identifier "puVar6") (= "=") (binary_expression "param_1 + (lVar3 - lVar2)" (identifier "param_1") (+ "+") (parenthesized_expression "(lVar3 - lVar2)" (( "(") (binary_expression "lVar3 - lVar2" (identifier "lVar3") (- "-") (identifier "lVar2")) () ")")))) (; ";")) (if_statement "if (0 < lVar8) {\n        lVar4 = -8;\n        lVar7 = 0;\n        do {\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        } while (lVar7 != lVar8);\n        puVar6 = puVar6 + -lVar7;\n      }" (if "if") (parenthesized_expression "(0 < lVar8)" (( "(") (binary_expression "0 < lVar8" (number_literal "0") (< "<") (identifier "lVar8")) () ")")) (compound_statement "{\n        lVar4 = -8;\n        lVar7 = 0;\n        do {\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        } while (lVar7 != lVar8);\n        puVar6 = puVar6 + -lVar7;\n      }" ({ "{") (expression_statement "lVar4 = -8;" (assignment_expression "lVar4 = -8" (identifier "lVar4") (= "=") (number_literal "-8")) (; ";")) (expression_statement "lVar7 = 0;" (assignment_expression "lVar7 = 0" (identifier "lVar7") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        } while (lVar7 != lVar8);" (do "do") (compound_statement "{\n          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);\n          lVar7 = lVar7 + 1;\n          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;\n          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;\n          lVar4 = lVar4 + -8;\n        }" ({ "{") (expression_statement "uVar1 = *(undefined8 *)((long)puVar6 + lVar4);" (assignment_expression "uVar1 = *(undefined8 *)((long)puVar6 + lVar4)" (identifier "uVar1") (= "=") (pointer_expression "*(undefined8 *)((long)puVar6 + lVar4)" (* "*") (cast_expression "(undefined8 *)((long)puVar6 + lVar4)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar6 + lVar4)" (( "(") (binary_expression "(long)puVar6 + lVar4" (cast_expression "(long)puVar6" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar6")) (+ "+") (identifier "lVar4")) () ")"))))) (; ";")) (expression_statement "lVar7 = lVar7 + 1;" (assignment_expression "lVar7 = lVar7 + 1" (identifier "lVar7") (= "=") (binary_expression "lVar7 + 1" (identifier "lVar7") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)\n          ;" (assignment_expression "*(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)" (pointer_expression "*(undefined8 *)((long)puVar6 + lVar4)" (* "*") (cast_expression "(undefined8 *)((long)puVar6 + lVar4)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar6 + lVar4)" (( "(") (binary_expression "(long)puVar6 + lVar4" (cast_expression "(long)puVar6" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar6")) (+ "+") (identifier "lVar4")) () ")")))) (= "=") (pointer_expression "*(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)" (* "*") (cast_expression "(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + lVar4 + lVar3 * 8)" (( "(") (binary_expression "(long)param_1 + lVar4 + lVar3 * 8" (binary_expression "(long)param_1 + lVar4" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (identifier "lVar4")) (+ "+") (binary_expression "lVar3 * 8" (identifier "lVar3") (* "*") (number_literal "8"))) () ")"))))) (; ";")) (expression_statement "*(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;" (assignment_expression "*(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1" (pointer_expression "*(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)" (* "*") (cast_expression "(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + lVar4 + lVar3 * 8)" (( "(") (binary_expression "(long)param_1 + lVar4 + lVar3 * 8" (binary_expression "(long)param_1 + lVar4" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (identifier "lVar4")) (+ "+") (binary_expression "lVar3 * 8" (identifier "lVar3") (* "*") (number_literal "8"))) () ")")))) (= "=") (identifier "uVar1")) (; ";")) (expression_statement "lVar4 = lVar4 + -8;" (assignment_expression "lVar4 = lVar4 + -8" (identifier "lVar4") (= "=") (binary_expression "lVar4 + -8" (identifier "lVar4") (+ "+") (number_literal "-8"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(lVar7 != lVar8)" (( "(") (binary_expression "lVar7 != lVar8" (identifier "lVar7") (!= "!=") (identifier "lVar8")) () ")")) (; ";")) (expression_statement "puVar6 = puVar6 + -lVar7;" (assignment_expression "puVar6 = puVar6 + -lVar7" (identifier "puVar6") (= "=") (binary_expression "puVar6 + -lVar7" (identifier "puVar6") (+ "+") (unary_expression "-lVar7" (- "-") (identifier "lVar7")))) (; ";")) (} "}"))) (expression_statement "lVar8 = lVar3 % lVar2;" (assignment_expression "lVar8 = lVar3 % lVar2" (identifier "lVar8") (= "=") (binary_expression "lVar3 % lVar2" (identifier "lVar3") (% "%") (identifier "lVar2"))) (; ";")) (expression_statement "param_1 = puVar6;" (assignment_expression "param_1 = puVar6" (identifier "param_1") (= "=") (identifier "puVar6")) (; ";")) (if_statement "if (lVar8 == 0) {\n        return puVar5;\n      }" (if "if") (parenthesized_expression "(lVar8 == 0)" (( "(") (binary_expression "lVar8 == 0" (identifier "lVar8") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return puVar5;\n      }" ({ "{") (return_statement "return puVar5;" (return "return") (identifier "puVar5") (; ";")) (} "}"))) (} "}"))) (expression_statement "uVar1 = param_1[lVar3 + -1];" (assignment_expression "uVar1 = param_1[lVar3 + -1]" (identifier "uVar1") (= "=") (subscript_expression "param_1[lVar3 + -1]" (identifier "param_1") ([ "[") (binary_expression "lVar3 + -1" (identifier "lVar3") (+ "+") (number_literal "-1")) (] "]"))) (; ";")) (if_statement "if (param_1 != param_1 + lVar3 + -1) {\n      __n = (long)(param_1 + lVar3 + -1) - (long)param_1;\n      memmove((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n);\n    }" (if "if") (parenthesized_expression "(param_1 != param_1 + lVar3 + -1)" (( "(") (binary_expression "param_1 != param_1 + lVar3 + -1" (identifier "param_1") (!= "!=") (binary_expression "param_1 + lVar3 + -1" (binary_expression "param_1 + lVar3" (identifier "param_1") (+ "+") (identifier "lVar3")) (+ "+") (number_literal "-1"))) () ")")) (compound_statement "{\n      __n = (long)(param_1 + lVar3 + -1) - (long)param_1;\n      memmove((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n);\n    }" ({ "{") (expression_statement "__n = (long)(param_1 + lVar3 + -1) - (long)param_1;" (assignment_expression "__n = (long)(param_1 + lVar3 + -1) - (long)param_1" (identifier "__n") (= "=") (binary_expression "(long)(param_1 + lVar3 + -1) - (long)param_1" (cast_expression "(long)(param_1 + lVar3 + -1)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "(param_1 + lVar3 + -1)" (( "(") (binary_expression "param_1 + lVar3 + -1" (binary_expression "param_1 + lVar3" (identifier "param_1") (+ "+") (identifier "lVar3")) (+ "+") (number_literal "-1")) () ")"))) (- "-") (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")))) (; ";")) (expression_statement "memmove((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n);" (call_expression "memmove((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n)" (identifier "memmove") (argument_list "((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n)" (( "(") (cast_expression "(void *)((long)param_1 + (lVar3 * 8 - __n))" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + (lVar3 * 8 - __n))" (( "(") (binary_expression "(long)param_1 + (lVar3 * 8 - __n)" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (parenthesized_expression "(lVar3 * 8 - __n)" (( "(") (binary_expression "lVar3 * 8 - __n" (binary_expression "lVar3 * 8" (identifier "lVar3") (* "*") (number_literal "8")) (- "-") (identifier "__n")) () ")"))) () ")"))) (, ",") (identifier "param_1") (, ",") (identifier "__n") () ")"))) (; ";")) (} "}"))) (expression_statement "*param_1 = uVar1;" (assignment_expression "*param_1 = uVar1" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (identifier "uVar1")) (; ";")) (expression_statement "param_2 = puVar5;" (assignment_expression "param_2 = puVar5" (identifier "param_2") (= "=") (identifier "puVar5")) (; ";")) (} "}")))) (return_statement "return param_2;" (return "return") (identifier "param_2") (; ";")) (} "}")))

/* DWARF original name: __rotate<__gnu_cxx::__normal_iterator<gold::Output_segment**,
   std::vector<gold::Output_segment*> > > */

var_1<var_2::var_7**,var_3::vector<var_2::var_7*,var_3::allocator<var_2::var_7*>var_4>var_4>
 var_5::_V2::
 __rotate<var_6::var_1<var_2::var_7**,var_3::vector<var_2::var_7*>var_4>var_4>
           (var_7 **var_10,
           var_1<var_2::var_7**,var_3::vector<var_2::var_7*,var_3::allocator<var_2::var_7*>var_4>var_4>
           var_8,var_7 **var_11)

{
  var_7 *var_9;
  type_1 uVar2;
  long var_12;
  long var_17;
  size_t var_20;
  long var_18;
  var_7 **var_15;
  var_7 **var_14;
  long var_16;
  long var_13;
  
  if (var_10 == var_8._M_current) {
    return (var_1<var_2::var_7**,var_3::vector<var_2::var_7*,var_3::allocator<var_2::var_7*>var_4>var_4>
            )var_11;
  }
  if (var_11 == var_8._M_current) {
    return (var_1<var_2::var_7**,var_3::vector<var_2::var_7*,var_3::allocator<var_2::var_7*>var_4>var_4>
            )var_10;
  }
  var_12 = (long)var_11 - (long)var_10 >> 3;
  var_13 = (long)var_8._M_current - (long)var_10 >> 3;
  var_15 = (var_7 **)((long)var_10 + ((long)var_11 - (long)var_8._M_current));
  var_14 = var_8._M_current;
  if (var_12 - var_13 == var_13) {
    do {
      var_9 = *var_10;
      var_15 = var_10 + 1;
      *var_10 = *var_14;
      *var_14 = var_9;
      var_10 = var_15;
      var_14 = var_14 + 1;
    } while (var_8._M_current != var_15);
  }
  else {
    while( true ) {
      var_16 = var_12 - var_13;
      var_18 = var_12;
      var_17 = var_12;
      var_12 = var_16;
      if (var_13 < var_16) {
        do {
          var_17 = var_13;
          if (var_17 == 1) {
            var_9 = *var_10;
            if (var_10 + 1 != var_10 + var_18) {
              var_19(var_10,var_10 + 1,var_18 * 8 - 8);
            }
            (var_10 + var_18)[-1] = var_9;
            return (var_1<var_2::var_7**,var_3::vector<var_2::var_7*,var_3::allocator<var_2::var_7*>var_4>var_4>
                    )var_15;
          }
          if (0 < var_16) {
            var_12 = 0;
            do {
              var_9 = var_10[var_12];
              var_10[var_12] = var_10[var_17 + var_12];
              var_10[var_17 + var_12] = var_9;
              var_12 = var_12 + 1;
            } while (var_16 != var_12);
            var_10 = var_10 + var_16;
          }
          if (var_18 % var_17 == 0) {
            return (var_1<var_2::var_7**,var_3::vector<var_2::var_7*,var_3::allocator<var_2::var_7*>var_4>var_4>
                    )var_15;
          }
          var_13 = var_17 - var_18 % var_17;
          var_16 = var_17 - var_13;
          var_18 = var_17;
          var_12 = var_16;
        } while (var_13 < var_16);
      }
      if (var_12 == 1) break;
      var_14 = var_10 + (var_17 - var_12);
      if (0 < var_13) {
        var_18 = -8;
        var_16 = 0;
        do {
          uVar2 = *(type_1 *)((long)var_14 + var_18);
          var_16 = var_16 + 1;
          *(type_1 *)((long)var_14 + var_18) =
               *(type_1 *)((long)var_10 + var_18 + var_17 * 8);
          *(type_1 *)((long)var_10 + var_18 + var_17 * 8) = uVar2;
          var_18 = var_18 + -8;
        } while (var_16 != var_13);
        var_14 = var_14 + -var_16;
      }
      var_13 = var_17 % var_12;
      var_10 = var_14;
      if (var_13 == 0) {
        return (var_1<var_2::var_7**,var_3::vector<var_2::var_7*,var_3::allocator<var_2::var_7*>var_4>var_4>
                )var_15;
      }
    }
    var_9 = var_10[var_17 + -1];
    if (var_10 != var_10 + var_17 + -1) {
      var_20 = (long)(var_10 + var_17 + -1) - (long)var_10;
      var_19((void *)((long)var_10 + (var_17 * 8 - var_20)),var_10,var_20);
    }
    *var_10 = var_9;
    var_8._M_current = var_15;
  }
  return (var_1<var_2::var_7**,var_3::vector<var_2::var_7*,var_3::allocator<var_2::var_7*>var_4>var_4>
          )var_8._M_current;
}


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

undefined8 * MASKED(undefined8 *param_1,undefined8 *param_2,undefined8 *param_3)

{
  undefined8 uVar1;
  long lVar2;
  long lVar3;
  size_t __n;
  long lVar4;
  undefined8 *puVar5;
  undefined8 *puVar6;
  long lVar7;
  long lVar8;
  
  if (param_1 == param_2) {
    return param_3;
  }
  if (param_3 == param_2) {
    return param_1;
  }
  lVar2 = (long)param_3 - (long)param_1 >> 3;
  lVar8 = (long)param_2 - (long)param_1 >> 3;
  puVar5 = (undefined8 *)((long)param_1 + ((long)param_3 - (long)param_2));
  puVar6 = param_2;
  if (lVar2 - lVar8 == lVar8) {
    do {
      uVar1 = *param_1;
      puVar5 = param_1 + 1;
      *param_1 = *puVar6;
      *puVar6 = uVar1;
      param_1 = puVar5;
      puVar6 = puVar6 + 1;
    } while (param_2 != puVar5);
  }
  else {
    while( true ) {
      lVar7 = lVar2 - lVar8;
      lVar4 = lVar2;
      lVar3 = lVar2;
      lVar2 = lVar7;
      if (lVar8 < lVar7) {
        do {
          lVar3 = lVar8;
          if (lVar3 == 1) {
            uVar1 = *param_1;
            if (param_1 + 1 != param_1 + lVar4) {
              memmove(param_1,param_1 + 1,lVar4 * 8 - 8);
            }
            (param_1 + lVar4)[-1] = uVar1;
            return puVar5;
          }
          if (0 < lVar7) {
            lVar2 = 0;
            do {
              uVar1 = param_1[lVar2];
              param_1[lVar2] = param_1[lVar3 + lVar2];
              param_1[lVar3 + lVar2] = uVar1;
              lVar2 = lVar2 + 1;
            } while (lVar7 != lVar2);
            param_1 = param_1 + lVar7;
          }
          if (lVar4 % lVar3 == 0) {
            return puVar5;
          }
          lVar8 = lVar3 - lVar4 % lVar3;
          lVar7 = lVar3 - lVar8;
          lVar4 = lVar3;
          lVar2 = lVar7;
        } while (lVar8 < lVar7);
      }
      if (lVar2 == 1) break;
      puVar6 = param_1 + (lVar3 - lVar2);
      if (0 < lVar8) {
        lVar4 = -8;
        lVar7 = 0;
        do {
          uVar1 = *(undefined8 *)((long)puVar6 + lVar4);
          lVar7 = lVar7 + 1;
          *(undefined8 *)((long)puVar6 + lVar4) = *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8)
          ;
          *(undefined8 *)((long)param_1 + lVar4 + lVar3 * 8) = uVar1;
          lVar4 = lVar4 + -8;
        } while (lVar7 != lVar8);
        puVar6 = puVar6 + -lVar7;
      }
      lVar8 = lVar3 % lVar2;
      param_1 = puVar6;
      if (lVar8 == 0) {
        return puVar5;
      }
    }
    uVar1 = param_1[lVar3 + -1];
    if (param_1 != param_1 + lVar3 + -1) {
      __n = (long)(param_1 + lVar3 + -1) - (long)param_1;
      memmove((void *)((long)param_1 + (lVar3 * 8 - __n)),param_1,__n);
    }
    *param_1 = uVar1;
    param_2 = puVar5;
  }
  return param_2;
}

