
/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* DWARF original name: __insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_section**,
   std::vector<gold::Output_section*> >,
   __gnu_cxx::__ops::_Iter_comp_iter<gold::Sort_output_sections> > */

void std::
     __insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_section**,_std::vector<gold::Output_section*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Sort_output_sections>_>
               (__normal_iterator<gold::Output_section**,_std::vector<gold::Output_section*,_std::allocator<gold::Output_section*>_>_>
                __first,__normal_iterator<gold::Output_section**,_std::vector<gold::Output_section*,_std::allocator<gold::Output_section*>_>_>
                        __last,_Iter_comp_iter<gold::Sort_output_sections> __comp)

{
  Output_section *pOVar1;
  bool bVar2;
  Output_section **ppOVar3;
  Output_section **ppOVar4;
  Sort_output_sections local_50 [2];
  Sort_output_sections local_40 [2];
  
  if ((__first._M_current != __last._M_current) &&
     (ppOVar3 = __first._M_current + 1, __last._M_current != ppOVar3)) {
    local_50[0].elements_ = (Sections_elements *)__comp._M_comp.elements_;
    do {
      while (bVar2 = gold::Sort_output_sections::operator()(local_50,*ppOVar3,*__first._M_current),
            !bVar2) {
        pOVar1 = *ppOVar3;
        local_40[0].elements_ = local_50[0].elements_;
        ppOVar4 = ppOVar3;
        while( true ) {
          bVar2 = gold::Sort_output_sections::operator()(local_40,pOVar1,ppOVar4[-1]);
          if (!bVar2) break;
          *ppOVar4 = ppOVar4[-1];
          ppOVar4 = ppOVar4 + -1;
        }
        *ppOVar4 = pOVar1;
        ppOVar3 = ppOVar3 + 1;
        if (__last._M_current == ppOVar3) {
          return;
        }
      }
      pOVar1 = *ppOVar3;
      if (__first._M_current != ppOVar3) {
        memmove(__first._M_current + 1,__first._M_current,(long)ppOVar3 - (long)__first._M_current);
      }
      *__first._M_current = pOVar1;
      ppOVar3 = ppOVar3 + 1;
    } while (__last._M_current != ppOVar3);
  }
  return;
}



void FUN_0020c220(undefined8 *param_1,undefined8 *param_2,undefined8 param_3)

{
  undefined8 uVar1;
  char cVar2;
  undefined8 *puVar3;
  undefined8 *puVar4;
  undefined8 local_50 [2];
  undefined8 local_40 [2];
  
  if ((param_1 != param_2) && (puVar3 = param_1 + 1, param_2 != puVar3)) {
    local_50[0] = param_3;
    do {
      while (cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1), cVar2 == '\0') {
        uVar1 = *puVar3;
        local_40[0] = local_50[0];
        puVar4 = puVar3;
        while( true ) {
          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);
          if (cVar2 == '\0') break;
          *puVar4 = puVar4[-1];
          puVar4 = puVar4 + -1;
        }
        *puVar4 = uVar1;
        puVar3 = puVar3 + 1;
        if (param_2 == puVar3) {
          return;
        }
      }
      uVar1 = *puVar3;
      if (param_1 != puVar3) {
        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);
      }
      *param_1 = uVar1;
      puVar3 = puVar3 + 1;
    } while (param_2 != puVar3);
  }
  return;
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x38
MOV qword ptr [RSP + 0x18],RDX
CMP RDI,RSI
JZ 0x0020c2f0
LEA R8,[RDI + 0x8]
CMP RSI,R8
JZ 0x0020c2f0
LEA RAX,[RSP + 0x18]
MOV qword ptr [RSP + 0x10],RSI
MOV RBX,RDI
MOV R12,R8
MOV qword ptr [RSP + 0x8],RAX
LEA R14,[RSP + 0x28]
JMP 0x0020c291
MOV RBP,qword ptr [R12]
CMP RBX,R12
JZ 0x0020c283
MOV RDX,R12
LEA RDI,[RBX + 0x8]
MOV RSI,RBX
SUB RDX,RBX
CALL 0x0013e6d0
MOV qword ptr [RBX],RBP
ADD R12,0x8
CMP qword ptr [RSP + 0x10],R12
JZ 0x0020c2f0
MOV RDX,qword ptr [RBX]
MOV RSI,qword ptr [R12]
MOV RDI,qword ptr [RSP + 0x8]
CALL 0x00205cd0
TEST AL,AL
JNZ 0x0020c268
MOV RAX,qword ptr [RSP + 0x18]
MOV RBP,qword ptr [R12]
MOV R15,R12
MOV qword ptr [RSP + 0x28],RAX
JMP 0x0020c2c7
MOV RAX,qword ptr [R15]
MOV qword ptr [R15 + 0x8],RAX
MOV RDX,qword ptr [R15 + -0x8]
MOV RSI,RBP
MOV RDI,R14
MOV R13,R15
SUB R15,0x8
CALL 0x00205cd0
TEST AL,AL
JNZ 0x0020c2c0
MOV qword ptr [R13],RBP
ADD R12,0x8
CMP qword ptr [RSP + 0x10],R12
JNZ 0x0020c291
ADD RSP,0x38
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
(translation_unit "void FUN_0020c220(undefined8 *param_1,undefined8 *param_2,undefined8 param_3)\n\n{\n  undefined8 uVar1;\n  char cVar2;\n  undefined8 *puVar3;\n  undefined8 *puVar4;\n  undefined8 local_50 [2];\n  undefined8 local_40 [2];\n  \n  if ((param_1 != param_2) && (puVar3 = param_1 + 1, param_2 != puVar3)) {\n    local_50[0] = param_3;\n    do {\n      while (cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1), cVar2 == '\0') {\n        uVar1 = *puVar3;\n        local_40[0] = local_50[0];\n        puVar4 = puVar3;\n        while( true ) {\n          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);\n          if (cVar2 == '\0') break;\n          *puVar4 = puVar4[-1];\n          puVar4 = puVar4 + -1;\n        }\n        *puVar4 = uVar1;\n        puVar3 = puVar3 + 1;\n        if (param_2 == puVar3) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar3 = puVar3 + 1;\n    } while (param_2 != puVar3);\n  }\n  return;\n}\n\n" (function_definition "void FUN_0020c220(undefined8 *param_1,undefined8 *param_2,undefined8 param_3)\n\n{\n  undefined8 uVar1;\n  char cVar2;\n  undefined8 *puVar3;\n  undefined8 *puVar4;\n  undefined8 local_50 [2];\n  undefined8 local_40 [2];\n  \n  if ((param_1 != param_2) && (puVar3 = param_1 + 1, param_2 != puVar3)) {\n    local_50[0] = param_3;\n    do {\n      while (cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1), cVar2 == '\0') {\n        uVar1 = *puVar3;\n        local_40[0] = local_50[0];\n        puVar4 = puVar3;\n        while( true ) {\n          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);\n          if (cVar2 == '\0') break;\n          *puVar4 = puVar4[-1];\n          puVar4 = puVar4 + -1;\n        }\n        *puVar4 = uVar1;\n        puVar3 = puVar3 + 1;\n        if (param_2 == puVar3) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar3 = puVar3 + 1;\n    } while (param_2 != puVar3);\n  }\n  return;\n}" primitive_type (function_declarator "FUN_0020c220(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 identifier) ))) (compound_statement "{\n  undefined8 uVar1;\n  char cVar2;\n  undefined8 *puVar3;\n  undefined8 *puVar4;\n  undefined8 local_50 [2];\n  undefined8 local_40 [2];\n  \n  if ((param_1 != param_2) && (puVar3 = param_1 + 1, param_2 != puVar3)) {\n    local_50[0] = param_3;\n    do {\n      while (cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1), cVar2 == '\0') {\n        uVar1 = *puVar3;\n        local_40[0] = local_50[0];\n        puVar4 = puVar3;\n        while( true ) {\n          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);\n          if (cVar2 == '\0') break;\n          *puVar4 = puVar4[-1];\n          puVar4 = puVar4 + -1;\n        }\n        *puVar4 = uVar1;\n        puVar3 = puVar3 + 1;\n        if (param_2 == puVar3) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar3 = puVar3 + 1;\n    } while (param_2 != puVar3);\n  }\n  return;\n}" { (declaration "undefined8 uVar1;" type_identifier identifier ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "undefined8 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined8 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "undefined8 local_50 [2];" type_identifier (array_declarator "local_50 [2]" identifier [ number_literal ]) ;) (declaration "undefined8 local_40 [2];" type_identifier (array_declarator "local_40 [2]" identifier [ number_literal ]) ;) (if_statement "if ((param_1 != param_2) && (puVar3 = param_1 + 1, param_2 != puVar3)) {\n    local_50[0] = param_3;\n    do {\n      while (cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1), cVar2 == '\0') {\n        uVar1 = *puVar3;\n        local_40[0] = local_50[0];\n        puVar4 = puVar3;\n        while( true ) {\n          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);\n          if (cVar2 == '\0') break;\n          *puVar4 = puVar4[-1];\n          puVar4 = puVar4 + -1;\n        }\n        *puVar4 = uVar1;\n        puVar3 = puVar3 + 1;\n        if (param_2 == puVar3) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar3 = puVar3 + 1;\n    } while (param_2 != puVar3);\n  }" if (parenthesized_expression "((param_1 != param_2) && (puVar3 = param_1 + 1, param_2 != puVar3))" ( (binary_expression "(param_1 != param_2) && (puVar3 = param_1 + 1, param_2 != puVar3)" (parenthesized_expression "(param_1 != param_2)" ( (binary_expression "param_1 != param_2" identifier != identifier) )) && (parenthesized_expression "(puVar3 = param_1 + 1, param_2 != puVar3)" ( (comma_expression "puVar3 = param_1 + 1, param_2 != puVar3" (assignment_expression "puVar3 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) , (binary_expression "param_2 != puVar3" identifier != identifier)) ))) )) (compound_statement "{\n    local_50[0] = param_3;\n    do {\n      while (cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1), cVar2 == '\0') {\n        uVar1 = *puVar3;\n        local_40[0] = local_50[0];\n        puVar4 = puVar3;\n        while( true ) {\n          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);\n          if (cVar2 == '\0') break;\n          *puVar4 = puVar4[-1];\n          puVar4 = puVar4 + -1;\n        }\n        *puVar4 = uVar1;\n        puVar3 = puVar3 + 1;\n        if (param_2 == puVar3) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar3 = puVar3 + 1;\n    } while (param_2 != puVar3);\n  }" { (expression_statement "local_50[0] = param_3;" (assignment_expression "local_50[0] = param_3" (subscript_expression "local_50[0]" identifier [ number_literal ]) = identifier) ;) (do_statement "do {\n      while (cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1), cVar2 == '\0') {\n        uVar1 = *puVar3;\n        local_40[0] = local_50[0];\n        puVar4 = puVar3;\n        while( true ) {\n          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);\n          if (cVar2 == '\0') break;\n          *puVar4 = puVar4[-1];\n          puVar4 = puVar4 + -1;\n        }\n        *puVar4 = uVar1;\n        puVar3 = puVar3 + 1;\n        if (param_2 == puVar3) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar3 = puVar3 + 1;\n    } while (param_2 != puVar3);" do (compound_statement "{\n      while (cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1), cVar2 == '\0') {\n        uVar1 = *puVar3;\n        local_40[0] = local_50[0];\n        puVar4 = puVar3;\n        while( true ) {\n          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);\n          if (cVar2 == '\0') break;\n          *puVar4 = puVar4[-1];\n          puVar4 = puVar4 + -1;\n        }\n        *puVar4 = uVar1;\n        puVar3 = puVar3 + 1;\n        if (param_2 == puVar3) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar3 = puVar3 + 1;\n    }" { (while_statement "while (cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1), cVar2 == '\0') {\n        uVar1 = *puVar3;\n        local_40[0] = local_50[0];\n        puVar4 = puVar3;\n        while( true ) {\n          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);\n          if (cVar2 == '\0') break;\n          *puVar4 = puVar4[-1];\n          puVar4 = puVar4 + -1;\n        }\n        *puVar4 = uVar1;\n        puVar3 = puVar3 + 1;\n        if (param_2 == puVar3) {\n          return;\n        }\n      }" while (parenthesized_expression "(cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1), cVar2 == '\0')" ( (comma_expression "cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1), cVar2 == '\0'" (assignment_expression "cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1)" identifier = (call_expression "FUN_00205cd0(local_50,*puVar3,*param_1)" identifier (argument_list "(local_50,*puVar3,*param_1)" ( identifier , (pointer_expression "*puVar3" * identifier) , (pointer_expression "*param_1" * identifier) )))) , (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence '))) )) (compound_statement "{\n        uVar1 = *puVar3;\n        local_40[0] = local_50[0];\n        puVar4 = puVar3;\n        while( true ) {\n          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);\n          if (cVar2 == '\0') break;\n          *puVar4 = puVar4[-1];\n          puVar4 = puVar4 + -1;\n        }\n        *puVar4 = uVar1;\n        puVar3 = puVar3 + 1;\n        if (param_2 == puVar3) {\n          return;\n        }\n      }" { (expression_statement "uVar1 = *puVar3;" (assignment_expression "uVar1 = *puVar3" identifier = (pointer_expression "*puVar3" * identifier)) ;) (expression_statement "local_40[0] = local_50[0];" (assignment_expression "local_40[0] = local_50[0]" (subscript_expression "local_40[0]" identifier [ number_literal ]) = (subscript_expression "local_50[0]" identifier [ number_literal ])) ;) (expression_statement "puVar4 = puVar3;" (assignment_expression "puVar4 = puVar3" identifier = identifier) ;) (while_statement "while( true ) {\n          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);\n          if (cVar2 == '\0') break;\n          *puVar4 = puVar4[-1];\n          puVar4 = puVar4 + -1;\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);\n          if (cVar2 == '\0') break;\n          *puVar4 = puVar4[-1];\n          puVar4 = puVar4 + -1;\n        }" { (expression_statement "cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);" (assignment_expression "cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1])" identifier = (call_expression "FUN_00205cd0(local_40,uVar1,puVar4[-1])" identifier (argument_list "(local_40,uVar1,puVar4[-1])" ( identifier , identifier , (subscript_expression "puVar4[-1]" identifier [ number_literal ]) )))) ;) (if_statement "if (cVar2 == '\0') break;" if (parenthesized_expression "(cVar2 == '\0')" ( (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (break_statement "break;" break ;)) (expression_statement "*puVar4 = puVar4[-1];" (assignment_expression "*puVar4 = puVar4[-1]" (pointer_expression "*puVar4" * identifier) = (subscript_expression "puVar4[-1]" identifier [ number_literal ])) ;) (expression_statement "puVar4 = puVar4 + -1;" (assignment_expression "puVar4 = puVar4 + -1" identifier = (binary_expression "puVar4 + -1" identifier + number_literal)) ;) })) (expression_statement "*puVar4 = uVar1;" (assignment_expression "*puVar4 = uVar1" (pointer_expression "*puVar4" * identifier) = identifier) ;) (expression_statement "puVar3 = puVar3 + 1;" (assignment_expression "puVar3 = puVar3 + 1" identifier = (binary_expression "puVar3 + 1" identifier + number_literal)) ;) (if_statement "if (param_2 == puVar3) {\n          return;\n        }" if (parenthesized_expression "(param_2 == puVar3)" ( (binary_expression "param_2 == puVar3" identifier == identifier) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) })) (expression_statement "uVar1 = *puVar3;" (assignment_expression "uVar1 = *puVar3" identifier = (pointer_expression "*puVar3" * identifier)) ;) (if_statement "if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }" if (parenthesized_expression "(param_1 != puVar3)" ( (binary_expression "param_1 != puVar3" identifier != identifier) )) (compound_statement "{\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }" { (expression_statement "memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);" (call_expression "memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1)" identifier (argument_list "(param_1 + 1,param_1,(long)puVar3 - (long)param_1)" ( (binary_expression "param_1 + 1" identifier + number_literal) , identifier , (binary_expression "(long)puVar3 - (long)param_1" (cast_expression "(long)puVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) ;) })) (expression_statement "*param_1 = uVar1;" (assignment_expression "*param_1 = uVar1" (pointer_expression "*param_1" * identifier) = identifier) ;) (expression_statement "puVar3 = puVar3 + 1;" (assignment_expression "puVar3 = puVar3 + 1" identifier = (binary_expression "puVar3 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(param_2 != puVar3)" ( (binary_expression "param_2 != puVar3" identifier != identifier) )) ;) })) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Unknown calling convention -- yet parameter storage is locked */\n/* DWARF original name: __insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_section**,\n   std::vector<gold::Output_section*> >,\n   __gnu_cxx::__ops::_Iter_comp_iter<gold::Sort_output_sections> > */\n\nvoid std::\n     __insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_section**,_std::vector<gold::Output_section*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Sort_output_sections>_>\n               (__normal_iterator<gold::Output_section**,_std::vector<gold::Output_section*,_std::allocator<gold::Output_section*>_>_>\n                __first,__normal_iterator<gold::Output_section**,_std::vector<gold::Output_section*,_std::allocator<gold::Output_section*>_>_>\n                        __last,_Iter_comp_iter<gold::Sort_output_sections> __comp)\n\n{\n  Output_section *pOVar1;\n  bool bVar2;\n  Output_section **ppOVar3;\n  Output_section **ppOVar4;\n  Sort_output_sections local_50 [2];\n  Sort_output_sections local_40 [2];\n  \n  if ((__first._M_current != __last._M_current) &&\n     (ppOVar3 = __first._M_current + 1, __last._M_current != ppOVar3)) {\n    local_50[0].elements_ = (Sections_elements *)__comp._M_comp.elements_;\n    do {\n      while (bVar2 = gold::Sort_output_sections::operator()(local_50,*ppOVar3,*__first._M_current),\n            !bVar2) {\n        pOVar1 = *ppOVar3;\n        local_40[0].elements_ = local_50[0].elements_;\n        ppOVar4 = ppOVar3;\n        while( true ) {\n          bVar2 = gold::Sort_output_sections::operator()(local_40,pOVar1,ppOVar4[-1]);\n          if (!bVar2) break;\n          *ppOVar4 = ppOVar4[-1];\n          ppOVar4 = ppOVar4 + -1;\n        }\n        *ppOVar4 = pOVar1;\n        ppOVar3 = ppOVar3 + 1;\n        if (__last._M_current == ppOVar3) {\n          return;\n        }\n      }\n      pOVar1 = *ppOVar3;\n      if (__first._M_current != ppOVar3) {\n        memmove(__first._M_current + 1,__first._M_current,(long)ppOVar3 - (long)__first._M_current);\n      }\n      *__first._M_current = pOVar1;\n      ppOVar3 = ppOVar3 + 1;\n    } while (__last._M_current != ppOVar3);\n  }\n  return;\n}\n\n" comment comment (declaration "void std::\n     __insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_section**,_std::vector<gold::Output_section*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Sort_output_sections>_>\n               (__normal_iterator<gold::Output_section**,_std::vector<gold::Output_section*,_std::allocator<gold::Output_section*>_>_>\n                __first,__normal_iterator<gold::Output_section**,_std::vector<gold::Output_section*,_std::allocator<gold::Output_section*>_>_>\n                        __last,_Iter_comp_iter<gold::Sort_output_sections> __comp)\n\n{\n  Output_section *pOVar1;" primitive_type (ERROR "std::\n     __insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_section" identifier : : identifier < identifier : : identifier < identifier : : identifier) (pointer_declarator "**,_std::vector<gold::Output_section*>_" * (pointer_declarator "*,_std::vector<gold::Output_section*>_" * (ERROR ",_std::vector<gold::Output_section*>" , identifier : : identifier < identifier : : identifier * >) identifier)) (ERROR ">" >) , (ERROR "___gnu_cxx::__ops::_Iter_comp_iter<gold::Sort_output_sections>_>\n               (__normal_iterator<gold::Output_section**,_std::vector<gold::Output_section*,_std::allocator<gold::Output_section*>_>_>\n                __first,__normal_iterator<gold::Output_section**,_std::vector<gold::Output_section*,_std::allocator<gold::Output_section*>_>_>\n                        __last,_Iter_comp_iter<gold::Sort_output_sections> __comp)\n\n{\n  Output_section" identifier : : identifier : : identifier < identifier : : identifier > (function_declarator "_>\n               (__normal_iterator<gold::Output_section**,_std::vector<gold::Output_section*,_std::allocator<gold::Output_section*>_>_>\n                __first,__normal_iterator<gold::Output_section**,_std::vector<gold::Output_section*,_std::allocator<gold::Output_section*>_>_>\n                        __last,_Iter_comp_iter<gold::Sort_output_sections> __comp)" identifier (ERROR ">" >) (parameter_list "(__normal_iterator<gold::Output_section**,_std::vector<gold::Output_section*,_std::allocator<gold::Output_section*>_>_>\n                __first,__normal_iterator<gold::Output_section**,_std::vector<gold::Output_section*,_std::allocator<gold::Output_section*>_>_>\n                        __last,_Iter_comp_iter<gold::Sort_output_sections> __comp)" ( (parameter_declaration "__normal_iterator<gold::Output_section**" type_identifier (ERROR "<gold::Output_section" < identifier : : identifier) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) , (parameter_declaration "_std::vector<gold::Output_section*" type_identifier (ERROR "::vector<gold::Output_section" : : identifier < identifier : : identifier) (abstract_pointer_declarator "*" *)) , (parameter_declaration "_std::allocator<gold::Output_section*>_>_>\n                __first" type_identifier (ERROR "::allocator<gold::Output_section*>_>_>" : : identifier < identifier : : identifier * > identifier > identifier >) identifier) , (parameter_declaration "__normal_iterator<gold::Output_section**" type_identifier (ERROR "<gold::Output_section" < identifier : : identifier) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) , (parameter_declaration "_std::vector<gold::Output_section*" type_identifier (ERROR "::vector<gold::Output_section" : : identifier < identifier : : identifier) (abstract_pointer_declarator "*" *)) , (parameter_declaration "_std::allocator<gold::Output_section*>_>_>\n                        __last" type_identifier (ERROR "::allocator<gold::Output_section*>_>_>" : : identifier < identifier : : identifier * > identifier > identifier >) identifier) , (parameter_declaration "_Iter_comp_iter<gold::Sort_output_sections> __comp" type_identifier (ERROR "<gold::Sort_output_sections>" < identifier : : identifier >) identifier) ))) { identifier) (pointer_declarator "*pOVar1" * identifier) ;) (declaration "bool bVar2;" primitive_type identifier ;) (declaration "Output_section **ppOVar3;" type_identifier (pointer_declarator "**ppOVar3" * (pointer_declarator "*ppOVar3" * identifier)) ;) (declaration "Output_section **ppOVar4;" type_identifier (pointer_declarator "**ppOVar4" * (pointer_declarator "*ppOVar4" * identifier)) ;) (declaration "Sort_output_sections local_50 [2];" type_identifier (array_declarator "local_50 [2]" identifier [ number_literal ]) ;) (declaration "Sort_output_sections local_40 [2];" type_identifier (array_declarator "local_40 [2]" identifier [ number_literal ]) ;) (if_statement "if ((__first._M_current != __last._M_current) &&\n     (ppOVar3 = __first._M_current + 1, __last._M_current != ppOVar3)) {\n    local_50[0].elements_ = (Sections_elements *)__comp._M_comp.elements_;\n    do {\n      while (bVar2 = gold::Sort_output_sections::operator()(local_50,*ppOVar3,*__first._M_current),\n            !bVar2) {\n        pOVar1 = *ppOVar3;\n        local_40[0].elements_ = local_50[0].elements_;\n        ppOVar4 = ppOVar3;\n        while( true ) {\n          bVar2 = gold::Sort_output_sections::operator()(local_40,pOVar1,ppOVar4[-1]);\n          if (!bVar2) break;\n          *ppOVar4 = ppOVar4[-1];\n          ppOVar4 = ppOVar4 + -1;\n        }\n        *ppOVar4 = pOVar1;\n        ppOVar3 = ppOVar3 + 1;\n        if (__last._M_current == ppOVar3) {\n          return;\n        }\n      }\n      pOVar1 = *ppOVar3;\n      if (__first._M_current != ppOVar3) {\n        memmove(__first._M_current + 1,__first._M_current,(long)ppOVar3 - (long)__first._M_current);\n      }\n      *__first._M_current = pOVar1;\n      ppOVar3 = ppOVar3 + 1;\n    } while (__last._M_current != ppOVar3);\n  }" if (parenthesized_expression "((__first._M_current != __last._M_current) &&\n     (ppOVar3 = __first._M_current + 1, __last._M_current != ppOVar3))" ( (binary_expression "(__first._M_current != __last._M_current) &&\n     (ppOVar3 = __first._M_current + 1, __last._M_current != ppOVar3)" (parenthesized_expression "(__first._M_current != __last._M_current)" ( (binary_expression "__first._M_current != __last._M_current" (field_expression "__first._M_current" identifier . field_identifier) != (field_expression "__last._M_current" identifier . field_identifier)) )) && (parenthesized_expression "(ppOVar3 = __first._M_current + 1, __last._M_current != ppOVar3)" ( (comma_expression "ppOVar3 = __first._M_current + 1, __last._M_current != ppOVar3" (assignment_expression "ppOVar3 = __first._M_current + 1" identifier = (binary_expression "__first._M_current + 1" (field_expression "__first._M_current" identifier . field_identifier) + number_literal)) , (binary_expression "__last._M_current != ppOVar3" (field_expression "__last._M_current" identifier . field_identifier) != identifier)) ))) )) (compound_statement "{\n    local_50[0].elements_ = (Sections_elements *)__comp._M_comp.elements_;\n    do {\n      while (bVar2 = gold::Sort_output_sections::operator()(local_50,*ppOVar3,*__first._M_current),\n            !bVar2) {\n        pOVar1 = *ppOVar3;\n        local_40[0].elements_ = local_50[0].elements_;\n        ppOVar4 = ppOVar3;\n        while( true ) {\n          bVar2 = gold::Sort_output_sections::operator()(local_40,pOVar1,ppOVar4[-1]);\n          if (!bVar2) break;\n          *ppOVar4 = ppOVar4[-1];\n          ppOVar4 = ppOVar4 + -1;\n        }\n        *ppOVar4 = pOVar1;\n        ppOVar3 = ppOVar3 + 1;\n        if (__last._M_current == ppOVar3) {\n          return;\n        }\n      }\n      pOVar1 = *ppOVar3;\n      if (__first._M_current != ppOVar3) {\n        memmove(__first._M_current + 1,__first._M_current,(long)ppOVar3 - (long)__first._M_current);\n      }\n      *__first._M_current = pOVar1;\n      ppOVar3 = ppOVar3 + 1;\n    } while (__last._M_current != ppOVar3);\n  }" { (expression_statement "local_50[0].elements_ = (Sections_elements *)__comp._M_comp.elements_;" (assignment_expression "local_50[0].elements_ = (Sections_elements *)__comp._M_comp.elements_" (field_expression "local_50[0].elements_" (subscript_expression "local_50[0]" identifier [ number_literal ]) . field_identifier) = (cast_expression "(Sections_elements *)__comp._M_comp.elements_" ( (type_descriptor "Sections_elements *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "__comp._M_comp.elements_" (field_expression "__comp._M_comp" identifier . field_identifier) . field_identifier))) ;) (do_statement "do {\n      while (bVar2 = gold::Sort_output_sections::operator()(local_50,*ppOVar3,*__first._M_current),\n            !bVar2) {\n        pOVar1 = *ppOVar3;\n        local_40[0].elements_ = local_50[0].elements_;\n        ppOVar4 = ppOVar3;\n        while( true ) {\n          bVar2 = gold::Sort_output_sections::operator()(local_40,pOVar1,ppOVar4[-1]);\n          if (!bVar2) break;\n          *ppOVar4 = ppOVar4[-1];\n          ppOVar4 = ppOVar4 + -1;\n        }\n        *ppOVar4 = pOVar1;\n        ppOVar3 = ppOVar3 + 1;\n        if (__last._M_current == ppOVar3) {\n          return;\n        }\n      }\n      pOVar1 = *ppOVar3;\n      if (__first._M_current != ppOVar3) {\n        memmove(__first._M_current + 1,__first._M_current,(long)ppOVar3 - (long)__first._M_current);\n      }\n      *__first._M_current = pOVar1;\n      ppOVar3 = ppOVar3 + 1;\n    } while (__last._M_current != ppOVar3);" do (compound_statement "{\n      while (bVar2 = gold::Sort_output_sections::operator()(local_50,*ppOVar3,*__first._M_current),\n            !bVar2) {\n        pOVar1 = *ppOVar3;\n        local_40[0].elements_ = local_50[0].elements_;\n        ppOVar4 = ppOVar3;\n        while( true ) {\n          bVar2 = gold::Sort_output_sections::operator()(local_40,pOVar1,ppOVar4[-1]);\n          if (!bVar2) break;\n          *ppOVar4 = ppOVar4[-1];\n          ppOVar4 = ppOVar4 + -1;\n        }\n        *ppOVar4 = pOVar1;\n        ppOVar3 = ppOVar3 + 1;\n        if (__last._M_current == ppOVar3) {\n          return;\n        }\n      }\n      pOVar1 = *ppOVar3;\n      if (__first._M_current != ppOVar3) {\n        memmove(__first._M_current + 1,__first._M_current,(long)ppOVar3 - (long)__first._M_current);\n      }\n      *__first._M_current = pOVar1;\n      ppOVar3 = ppOVar3 + 1;\n    }" { (while_statement "while (bVar2 = gold::Sort_output_sections::operator()(local_50,*ppOVar3,*__first._M_current),\n            !bVar2) {\n        pOVar1 = *ppOVar3;\n        local_40[0].elements_ = local_50[0].elements_;\n        ppOVar4 = ppOVar3;\n        while( true ) {\n          bVar2 = gold::Sort_output_sections::operator()(local_40,pOVar1,ppOVar4[-1]);\n          if (!bVar2) break;\n          *ppOVar4 = ppOVar4[-1];\n          ppOVar4 = ppOVar4 + -1;\n        }\n        *ppOVar4 = pOVar1;\n        ppOVar3 = ppOVar3 + 1;\n        if (__last._M_current == ppOVar3) {\n          return;\n        }\n      }" while (parenthesized_expression "(bVar2 = gold::Sort_output_sections::operator()(local_50,*ppOVar3,*__first._M_current),\n            !bVar2)" ( (ERROR "bVar2 = gold::Sort_output_sections::" (assignment_expression "bVar2 = gold" identifier = identifier) : : identifier : :) (comma_expression "operator()(local_50,*ppOVar3,*__first._M_current),\n            !bVar2" (call_expression "operator()(local_50,*ppOVar3,*__first._M_current)" (call_expression "operator()" identifier (argument_list "()" ( ))) (argument_list "(local_50,*ppOVar3,*__first._M_current)" ( identifier , (pointer_expression "*ppOVar3" * identifier) , (pointer_expression "*__first._M_current" * (field_expression "__first._M_current" identifier . field_identifier)) ))) , (unary_expression "!bVar2" ! identifier)) )) (compound_statement "{\n        pOVar1 = *ppOVar3;\n        local_40[0].elements_ = local_50[0].elements_;\n        ppOVar4 = ppOVar3;\n        while( true ) {\n          bVar2 = gold::Sort_output_sections::operator()(local_40,pOVar1,ppOVar4[-1]);\n          if (!bVar2) break;\n          *ppOVar4 = ppOVar4[-1];\n          ppOVar4 = ppOVar4 + -1;\n        }\n        *ppOVar4 = pOVar1;\n        ppOVar3 = ppOVar3 + 1;\n        if (__last._M_current == ppOVar3) {\n          return;\n        }\n      }" { (expression_statement "pOVar1 = *ppOVar3;" (assignment_expression "pOVar1 = *ppOVar3" identifier = (pointer_expression "*ppOVar3" * identifier)) ;) (expression_statement "local_40[0].elements_ = local_50[0].elements_;" (assignment_expression "local_40[0].elements_ = local_50[0].elements_" (field_expression "local_40[0].elements_" (subscript_expression "local_40[0]" identifier [ number_literal ]) . field_identifier) = (field_expression "local_50[0].elements_" (subscript_expression "local_50[0]" identifier [ number_literal ]) . field_identifier)) ;) (expression_statement "ppOVar4 = ppOVar3;" (assignment_expression "ppOVar4 = ppOVar3" identifier = identifier) ;) (while_statement "while( true ) {\n          bVar2 = gold::Sort_output_sections::operator()(local_40,pOVar1,ppOVar4[-1]);\n          if (!bVar2) break;\n          *ppOVar4 = ppOVar4[-1];\n          ppOVar4 = ppOVar4 + -1;\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          bVar2 = gold::Sort_output_sections::operator()(local_40,pOVar1,ppOVar4[-1]);\n          if (!bVar2) break;\n          *ppOVar4 = ppOVar4[-1];\n          ppOVar4 = ppOVar4 + -1;\n        }" { (ERROR "bVar2 = gold::" (assignment_expression "bVar2 = gold" identifier = identifier) : :) (labeled_statement "Sort_output_sections::operator()(local_40,pOVar1,ppOVar4[-1]);" statement_identifier : (ERROR ":" :) (expression_statement "operator()(local_40,pOVar1,ppOVar4[-1]);" (call_expression "operator()(local_40,pOVar1,ppOVar4[-1])" (call_expression "operator()" identifier (argument_list "()" ( ))) (argument_list "(local_40,pOVar1,ppOVar4[-1])" ( identifier , identifier , (subscript_expression "ppOVar4[-1]" identifier [ number_literal ]) ))) ;)) (if_statement "if (!bVar2) break;" if (parenthesized_expression "(!bVar2)" ( (unary_expression "!bVar2" ! identifier) )) (break_statement "break;" break ;)) (expression_statement "*ppOVar4 = ppOVar4[-1];" (assignment_expression "*ppOVar4 = ppOVar4[-1]" (pointer_expression "*ppOVar4" * identifier) = (subscript_expression "ppOVar4[-1]" identifier [ number_literal ])) ;) (expression_statement "ppOVar4 = ppOVar4 + -1;" (assignment_expression "ppOVar4 = ppOVar4 + -1" identifier = (binary_expression "ppOVar4 + -1" identifier + number_literal)) ;) })) (expression_statement "*ppOVar4 = pOVar1;" (assignment_expression "*ppOVar4 = pOVar1" (pointer_expression "*ppOVar4" * identifier) = identifier) ;) (expression_statement "ppOVar3 = ppOVar3 + 1;" (assignment_expression "ppOVar3 = ppOVar3 + 1" identifier = (binary_expression "ppOVar3 + 1" identifier + number_literal)) ;) (if_statement "if (__last._M_current == ppOVar3) {\n          return;\n        }" if (parenthesized_expression "(__last._M_current == ppOVar3)" ( (binary_expression "__last._M_current == ppOVar3" (field_expression "__last._M_current" identifier . field_identifier) == identifier) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) })) (expression_statement "pOVar1 = *ppOVar3;" (assignment_expression "pOVar1 = *ppOVar3" identifier = (pointer_expression "*ppOVar3" * identifier)) ;) (if_statement "if (__first._M_current != ppOVar3) {\n        memmove(__first._M_current + 1,__first._M_current,(long)ppOVar3 - (long)__first._M_current);\n      }" if (parenthesized_expression "(__first._M_current != ppOVar3)" ( (binary_expression "__first._M_current != ppOVar3" (field_expression "__first._M_current" identifier . field_identifier) != identifier) )) (compound_statement "{\n        memmove(__first._M_current + 1,__first._M_current,(long)ppOVar3 - (long)__first._M_current);\n      }" { (expression_statement "memmove(__first._M_current + 1,__first._M_current,(long)ppOVar3 - (long)__first._M_current);" (call_expression "memmove(__first._M_current + 1,__first._M_current,(long)ppOVar3 - (long)__first._M_current)" identifier (argument_list "(__first._M_current + 1,__first._M_current,(long)ppOVar3 - (long)__first._M_current)" ( (binary_expression "__first._M_current + 1" (field_expression "__first._M_current" identifier . field_identifier) + number_literal) , (field_expression "__first._M_current" identifier . field_identifier) , (binary_expression "(long)ppOVar3 - (long)__first._M_current" (cast_expression "(long)ppOVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)__first._M_current" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "__first._M_current" identifier . field_identifier))) ))) ;) })) (expression_statement "*__first._M_current = pOVar1;" (assignment_expression "*__first._M_current = pOVar1" (pointer_expression "*__first._M_current" * (field_expression "__first._M_current" identifier . field_identifier)) = identifier) ;) (expression_statement "ppOVar3 = ppOVar3 + 1;" (assignment_expression "ppOVar3 = ppOVar3 + 1" identifier = (binary_expression "ppOVar3 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(__last._M_current != ppOVar3)" ( (binary_expression "__last._M_current != ppOVar3" (field_expression "__last._M_current" identifier . field_identifier) != identifier) )) ;) })) (return_statement "return;" return ;) (ERROR "}" }))
(translation_unit "void FUN_0020c220(undefined8 *param_1,undefined8 *param_2,undefined8 param_3)\n\n{\n  undefined8 uVar1;\n  char cVar2;\n  undefined8 *puVar3;\n  undefined8 *puVar4;\n  undefined8 local_50 [2];\n  undefined8 local_40 [2];\n  \n  if ((param_1 != param_2) && (puVar3 = param_1 + 1, param_2 != puVar3)) {\n    local_50[0] = param_3;\n    do {\n      while (cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1), cVar2 == '\0') {\n        uVar1 = *puVar3;\n        local_40[0] = local_50[0];\n        puVar4 = puVar3;\n        while( true ) {\n          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);\n          if (cVar2 == '\0') break;\n          *puVar4 = puVar4[-1];\n          puVar4 = puVar4 + -1;\n        }\n        *puVar4 = uVar1;\n        puVar3 = puVar3 + 1;\n        if (param_2 == puVar3) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar3 = puVar3 + 1;\n    } while (param_2 != puVar3);\n  }\n  return;\n}\n\n" (function_definition "void FUN_0020c220(undefined8 *param_1,undefined8 *param_2,undefined8 param_3)\n\n{\n  undefined8 uVar1;\n  char cVar2;\n  undefined8 *puVar3;\n  undefined8 *puVar4;\n  undefined8 local_50 [2];\n  undefined8 local_40 [2];\n  \n  if ((param_1 != param_2) && (puVar3 = param_1 + 1, param_2 != puVar3)) {\n    local_50[0] = param_3;\n    do {\n      while (cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1), cVar2 == '\0') {\n        uVar1 = *puVar3;\n        local_40[0] = local_50[0];\n        puVar4 = puVar3;\n        while( true ) {\n          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);\n          if (cVar2 == '\0') break;\n          *puVar4 = puVar4[-1];\n          puVar4 = puVar4 + -1;\n        }\n        *puVar4 = uVar1;\n        puVar3 = puVar3 + 1;\n        if (param_2 == puVar3) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar3 = puVar3 + 1;\n    } while (param_2 != puVar3);\n  }\n  return;\n}" primitive_type (function_declarator "FUN_0020c220(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 identifier) ))) (compound_statement "{\n  undefined8 uVar1;\n  char cVar2;\n  undefined8 *puVar3;\n  undefined8 *puVar4;\n  undefined8 local_50 [2];\n  undefined8 local_40 [2];\n  \n  if ((param_1 != param_2) && (puVar3 = param_1 + 1, param_2 != puVar3)) {\n    local_50[0] = param_3;\n    do {\n      while (cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1), cVar2 == '\0') {\n        uVar1 = *puVar3;\n        local_40[0] = local_50[0];\n        puVar4 = puVar3;\n        while( true ) {\n          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);\n          if (cVar2 == '\0') break;\n          *puVar4 = puVar4[-1];\n          puVar4 = puVar4 + -1;\n        }\n        *puVar4 = uVar1;\n        puVar3 = puVar3 + 1;\n        if (param_2 == puVar3) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar3 = puVar3 + 1;\n    } while (param_2 != puVar3);\n  }\n  return;\n}" { (declaration "undefined8 uVar1;" type_identifier identifier ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "undefined8 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined8 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "undefined8 local_50 [2];" type_identifier (array_declarator "local_50 [2]" identifier [ number_literal ]) ;) (declaration "undefined8 local_40 [2];" type_identifier (array_declarator "local_40 [2]" identifier [ number_literal ]) ;) (if_statement "if ((param_1 != param_2) && (puVar3 = param_1 + 1, param_2 != puVar3)) {\n    local_50[0] = param_3;\n    do {\n      while (cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1), cVar2 == '\0') {\n        uVar1 = *puVar3;\n        local_40[0] = local_50[0];\n        puVar4 = puVar3;\n        while( true ) {\n          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);\n          if (cVar2 == '\0') break;\n          *puVar4 = puVar4[-1];\n          puVar4 = puVar4 + -1;\n        }\n        *puVar4 = uVar1;\n        puVar3 = puVar3 + 1;\n        if (param_2 == puVar3) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar3 = puVar3 + 1;\n    } while (param_2 != puVar3);\n  }" if (parenthesized_expression "((param_1 != param_2) && (puVar3 = param_1 + 1, param_2 != puVar3))" ( (binary_expression "(param_1 != param_2) && (puVar3 = param_1 + 1, param_2 != puVar3)" (parenthesized_expression "(param_1 != param_2)" ( (binary_expression "param_1 != param_2" identifier != identifier) )) && (parenthesized_expression "(puVar3 = param_1 + 1, param_2 != puVar3)" ( (comma_expression "puVar3 = param_1 + 1, param_2 != puVar3" (assignment_expression "puVar3 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) , (binary_expression "param_2 != puVar3" identifier != identifier)) ))) )) (compound_statement "{\n    local_50[0] = param_3;\n    do {\n      while (cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1), cVar2 == '\0') {\n        uVar1 = *puVar3;\n        local_40[0] = local_50[0];\n        puVar4 = puVar3;\n        while( true ) {\n          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);\n          if (cVar2 == '\0') break;\n          *puVar4 = puVar4[-1];\n          puVar4 = puVar4 + -1;\n        }\n        *puVar4 = uVar1;\n        puVar3 = puVar3 + 1;\n        if (param_2 == puVar3) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar3 = puVar3 + 1;\n    } while (param_2 != puVar3);\n  }" { (expression_statement "local_50[0] = param_3;" (assignment_expression "local_50[0] = param_3" (subscript_expression "local_50[0]" identifier [ number_literal ]) = identifier) ;) (do_statement "do {\n      while (cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1), cVar2 == '\0') {\n        uVar1 = *puVar3;\n        local_40[0] = local_50[0];\n        puVar4 = puVar3;\n        while( true ) {\n          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);\n          if (cVar2 == '\0') break;\n          *puVar4 = puVar4[-1];\n          puVar4 = puVar4 + -1;\n        }\n        *puVar4 = uVar1;\n        puVar3 = puVar3 + 1;\n        if (param_2 == puVar3) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar3 = puVar3 + 1;\n    } while (param_2 != puVar3);" do (compound_statement "{\n      while (cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1), cVar2 == '\0') {\n        uVar1 = *puVar3;\n        local_40[0] = local_50[0];\n        puVar4 = puVar3;\n        while( true ) {\n          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);\n          if (cVar2 == '\0') break;\n          *puVar4 = puVar4[-1];\n          puVar4 = puVar4 + -1;\n        }\n        *puVar4 = uVar1;\n        puVar3 = puVar3 + 1;\n        if (param_2 == puVar3) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar3 = puVar3 + 1;\n    }" { (while_statement "while (cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1), cVar2 == '\0') {\n        uVar1 = *puVar3;\n        local_40[0] = local_50[0];\n        puVar4 = puVar3;\n        while( true ) {\n          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);\n          if (cVar2 == '\0') break;\n          *puVar4 = puVar4[-1];\n          puVar4 = puVar4 + -1;\n        }\n        *puVar4 = uVar1;\n        puVar3 = puVar3 + 1;\n        if (param_2 == puVar3) {\n          return;\n        }\n      }" while (parenthesized_expression "(cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1), cVar2 == '\0')" ( (comma_expression "cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1), cVar2 == '\0'" (assignment_expression "cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1)" identifier = (call_expression "FUN_00205cd0(local_50,*puVar3,*param_1)" identifier (argument_list "(local_50,*puVar3,*param_1)" ( identifier , (pointer_expression "*puVar3" * identifier) , (pointer_expression "*param_1" * identifier) )))) , (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence '))) )) (compound_statement "{\n        uVar1 = *puVar3;\n        local_40[0] = local_50[0];\n        puVar4 = puVar3;\n        while( true ) {\n          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);\n          if (cVar2 == '\0') break;\n          *puVar4 = puVar4[-1];\n          puVar4 = puVar4 + -1;\n        }\n        *puVar4 = uVar1;\n        puVar3 = puVar3 + 1;\n        if (param_2 == puVar3) {\n          return;\n        }\n      }" { (expression_statement "uVar1 = *puVar3;" (assignment_expression "uVar1 = *puVar3" identifier = (pointer_expression "*puVar3" * identifier)) ;) (expression_statement "local_40[0] = local_50[0];" (assignment_expression "local_40[0] = local_50[0]" (subscript_expression "local_40[0]" identifier [ number_literal ]) = (subscript_expression "local_50[0]" identifier [ number_literal ])) ;) (expression_statement "puVar4 = puVar3;" (assignment_expression "puVar4 = puVar3" identifier = identifier) ;) (while_statement "while( true ) {\n          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);\n          if (cVar2 == '\0') break;\n          *puVar4 = puVar4[-1];\n          puVar4 = puVar4 + -1;\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);\n          if (cVar2 == '\0') break;\n          *puVar4 = puVar4[-1];\n          puVar4 = puVar4 + -1;\n        }" { (expression_statement "cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);" (assignment_expression "cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1])" identifier = (call_expression "FUN_00205cd0(local_40,uVar1,puVar4[-1])" identifier (argument_list "(local_40,uVar1,puVar4[-1])" ( identifier , identifier , (subscript_expression "puVar4[-1]" identifier [ number_literal ]) )))) ;) (if_statement "if (cVar2 == '\0') break;" if (parenthesized_expression "(cVar2 == '\0')" ( (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (break_statement "break;" break ;)) (expression_statement "*puVar4 = puVar4[-1];" (assignment_expression "*puVar4 = puVar4[-1]" (pointer_expression "*puVar4" * identifier) = (subscript_expression "puVar4[-1]" identifier [ number_literal ])) ;) (expression_statement "puVar4 = puVar4 + -1;" (assignment_expression "puVar4 = puVar4 + -1" identifier = (binary_expression "puVar4 + -1" identifier + number_literal)) ;) })) (expression_statement "*puVar4 = uVar1;" (assignment_expression "*puVar4 = uVar1" (pointer_expression "*puVar4" * identifier) = identifier) ;) (expression_statement "puVar3 = puVar3 + 1;" (assignment_expression "puVar3 = puVar3 + 1" identifier = (binary_expression "puVar3 + 1" identifier + number_literal)) ;) (if_statement "if (param_2 == puVar3) {\n          return;\n        }" if (parenthesized_expression "(param_2 == puVar3)" ( (binary_expression "param_2 == puVar3" identifier == identifier) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) })) (expression_statement "uVar1 = *puVar3;" (assignment_expression "uVar1 = *puVar3" identifier = (pointer_expression "*puVar3" * identifier)) ;) (if_statement "if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }" if (parenthesized_expression "(param_1 != puVar3)" ( (binary_expression "param_1 != puVar3" identifier != identifier) )) (compound_statement "{\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }" { (expression_statement "memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);" (call_expression "memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1)" identifier (argument_list "(param_1 + 1,param_1,(long)puVar3 - (long)param_1)" ( (binary_expression "param_1 + 1" identifier + number_literal) , identifier , (binary_expression "(long)puVar3 - (long)param_1" (cast_expression "(long)puVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) ;) })) (expression_statement "*param_1 = uVar1;" (assignment_expression "*param_1 = uVar1" (pointer_expression "*param_1" * identifier) = identifier) ;) (expression_statement "puVar3 = puVar3 + 1;" (assignment_expression "puVar3 = puVar3 + 1" identifier = (binary_expression "puVar3 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(param_2 != puVar3)" ( (binary_expression "param_2 != puVar3" identifier != identifier) )) ;) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != IDENT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression IDENT + LIT)) , (binary_expression IDENT != IDENT)) ))) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (pointer_expression * IDENT) , (pointer_expression * IDENT) )))) , (binary_expression IDENT == (char_literal ' escape_sequence '))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (subscript_expression IDENT [ LIT ]) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (break_statement break ;)) (expression_statement (assignment_expression (pointer_expression * IDENT) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (return_statement return ;) })) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , IDENT , (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ))) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) })) (return_statement return ;) })))
(function_definition "void FUN_0020c220(undefined8 *param_1,undefined8 *param_2,undefined8 param_3)\n\n{\n  undefined8 uVar1;\n  char cVar2;\n  undefined8 *puVar3;\n  undefined8 *puVar4;\n  undefined8 local_50 [2];\n  undefined8 local_40 [2];\n  \n  if ((param_1 != param_2) && (puVar3 = param_1 + 1, param_2 != puVar3)) {\n    local_50[0] = param_3;\n    do {\n      while (cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1), cVar2 == '\0') {\n        uVar1 = *puVar3;\n        local_40[0] = local_50[0];\n        puVar4 = puVar3;\n        while( true ) {\n          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);\n          if (cVar2 == '\0') break;\n          *puVar4 = puVar4[-1];\n          puVar4 = puVar4 + -1;\n        }\n        *puVar4 = uVar1;\n        puVar3 = puVar3 + 1;\n        if (param_2 == puVar3) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar3 = puVar3 + 1;\n    } while (param_2 != puVar3);\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_0020c220(undefined8 *param_1,undefined8 *param_2,undefined8 param_3)" (identifier "FUN_0020c220") (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") (identifier "param_3")) () ")"))) (compound_statement "{\n  undefined8 uVar1;\n  char cVar2;\n  undefined8 *puVar3;\n  undefined8 *puVar4;\n  undefined8 local_50 [2];\n  undefined8 local_40 [2];\n  \n  if ((param_1 != param_2) && (puVar3 = param_1 + 1, param_2 != puVar3)) {\n    local_50[0] = param_3;\n    do {\n      while (cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1), cVar2 == '\0') {\n        uVar1 = *puVar3;\n        local_40[0] = local_50[0];\n        puVar4 = puVar3;\n        while( true ) {\n          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);\n          if (cVar2 == '\0') break;\n          *puVar4 = puVar4[-1];\n          puVar4 = puVar4 + -1;\n        }\n        *puVar4 = uVar1;\n        puVar3 = puVar3 + 1;\n        if (param_2 == puVar3) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar3 = puVar3 + 1;\n    } while (param_2 != puVar3);\n  }\n  return;\n}" ({ "{") (declaration "undefined8 uVar1;" (type_identifier "undefined8") (identifier "uVar1") (; ";")) (declaration "char cVar2;" (primitive_type "char") (identifier "cVar2") (; ";")) (declaration "undefined8 *puVar3;" (type_identifier "undefined8") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "undefined8 *puVar4;" (type_identifier "undefined8") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (declaration "undefined8 local_50 [2];" (type_identifier "undefined8") (array_declarator "local_50 [2]" (identifier "local_50") ([ "[") (number_literal "2") (] "]")) (; ";")) (declaration "undefined8 local_40 [2];" (type_identifier "undefined8") (array_declarator "local_40 [2]" (identifier "local_40") ([ "[") (number_literal "2") (] "]")) (; ";")) (if_statement "if ((param_1 != param_2) && (puVar3 = param_1 + 1, param_2 != puVar3)) {\n    local_50[0] = param_3;\n    do {\n      while (cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1), cVar2 == '\0') {\n        uVar1 = *puVar3;\n        local_40[0] = local_50[0];\n        puVar4 = puVar3;\n        while( true ) {\n          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);\n          if (cVar2 == '\0') break;\n          *puVar4 = puVar4[-1];\n          puVar4 = puVar4 + -1;\n        }\n        *puVar4 = uVar1;\n        puVar3 = puVar3 + 1;\n        if (param_2 == puVar3) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar3 = puVar3 + 1;\n    } while (param_2 != puVar3);\n  }" (if "if") (parenthesized_expression "((param_1 != param_2) && (puVar3 = param_1 + 1, param_2 != puVar3))" (( "(") (binary_expression "(param_1 != param_2) && (puVar3 = param_1 + 1, param_2 != puVar3)" (parenthesized_expression "(param_1 != param_2)" (( "(") (binary_expression "param_1 != param_2" (identifier "param_1") (!= "!=") (identifier "param_2")) () ")")) (&& "&&") (parenthesized_expression "(puVar3 = param_1 + 1, param_2 != puVar3)" (( "(") (comma_expression "puVar3 = param_1 + 1, param_2 != puVar3" (assignment_expression "puVar3 = param_1 + 1" (identifier "puVar3") (= "=") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1"))) (, ",") (binary_expression "param_2 != puVar3" (identifier "param_2") (!= "!=") (identifier "puVar3"))) () ")"))) () ")")) (compound_statement "{\n    local_50[0] = param_3;\n    do {\n      while (cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1), cVar2 == '\0') {\n        uVar1 = *puVar3;\n        local_40[0] = local_50[0];\n        puVar4 = puVar3;\n        while( true ) {\n          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);\n          if (cVar2 == '\0') break;\n          *puVar4 = puVar4[-1];\n          puVar4 = puVar4 + -1;\n        }\n        *puVar4 = uVar1;\n        puVar3 = puVar3 + 1;\n        if (param_2 == puVar3) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar3 = puVar3 + 1;\n    } while (param_2 != puVar3);\n  }" ({ "{") (expression_statement "local_50[0] = param_3;" (assignment_expression "local_50[0] = param_3" (subscript_expression "local_50[0]" (identifier "local_50") ([ "[") (number_literal "0") (] "]")) (= "=") (identifier "param_3")) (; ";")) (do_statement "do {\n      while (cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1), cVar2 == '\0') {\n        uVar1 = *puVar3;\n        local_40[0] = local_50[0];\n        puVar4 = puVar3;\n        while( true ) {\n          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);\n          if (cVar2 == '\0') break;\n          *puVar4 = puVar4[-1];\n          puVar4 = puVar4 + -1;\n        }\n        *puVar4 = uVar1;\n        puVar3 = puVar3 + 1;\n        if (param_2 == puVar3) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar3 = puVar3 + 1;\n    } while (param_2 != puVar3);" (do "do") (compound_statement "{\n      while (cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1), cVar2 == '\0') {\n        uVar1 = *puVar3;\n        local_40[0] = local_50[0];\n        puVar4 = puVar3;\n        while( true ) {\n          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);\n          if (cVar2 == '\0') break;\n          *puVar4 = puVar4[-1];\n          puVar4 = puVar4 + -1;\n        }\n        *puVar4 = uVar1;\n        puVar3 = puVar3 + 1;\n        if (param_2 == puVar3) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar3 = puVar3 + 1;\n    }" ({ "{") (while_statement "while (cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1), cVar2 == '\0') {\n        uVar1 = *puVar3;\n        local_40[0] = local_50[0];\n        puVar4 = puVar3;\n        while( true ) {\n          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);\n          if (cVar2 == '\0') break;\n          *puVar4 = puVar4[-1];\n          puVar4 = puVar4 + -1;\n        }\n        *puVar4 = uVar1;\n        puVar3 = puVar3 + 1;\n        if (param_2 == puVar3) {\n          return;\n        }\n      }" (while "while") (parenthesized_expression "(cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1), cVar2 == '\0')" (( "(") (comma_expression "cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1), cVar2 == '\0'" (assignment_expression "cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1)" (identifier "cVar2") (= "=") (call_expression "FUN_00205cd0(local_50,*puVar3,*param_1)" (identifier "FUN_00205cd0") (argument_list "(local_50,*puVar3,*param_1)" (( "(") (identifier "local_50") (, ",") (pointer_expression "*puVar3" (* "*") (identifier "puVar3")) (, ",") (pointer_expression "*param_1" (* "*") (identifier "param_1")) () ")")))) (, ",") (binary_expression "cVar2 == '\0'" (identifier "cVar2") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'")))) () ")")) (compound_statement "{\n        uVar1 = *puVar3;\n        local_40[0] = local_50[0];\n        puVar4 = puVar3;\n        while( true ) {\n          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);\n          if (cVar2 == '\0') break;\n          *puVar4 = puVar4[-1];\n          puVar4 = puVar4 + -1;\n        }\n        *puVar4 = uVar1;\n        puVar3 = puVar3 + 1;\n        if (param_2 == puVar3) {\n          return;\n        }\n      }" ({ "{") (expression_statement "uVar1 = *puVar3;" (assignment_expression "uVar1 = *puVar3" (identifier "uVar1") (= "=") (pointer_expression "*puVar3" (* "*") (identifier "puVar3"))) (; ";")) (expression_statement "local_40[0] = local_50[0];" (assignment_expression "local_40[0] = local_50[0]" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (= "=") (subscript_expression "local_50[0]" (identifier "local_50") ([ "[") (number_literal "0") (] "]"))) (; ";")) (expression_statement "puVar4 = puVar3;" (assignment_expression "puVar4 = puVar3" (identifier "puVar4") (= "=") (identifier "puVar3")) (; ";")) (while_statement "while( true ) {\n          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);\n          if (cVar2 == '\0') break;\n          *puVar4 = puVar4[-1];\n          puVar4 = puVar4 + -1;\n        }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);\n          if (cVar2 == '\0') break;\n          *puVar4 = puVar4[-1];\n          puVar4 = puVar4 + -1;\n        }" ({ "{") (expression_statement "cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);" (assignment_expression "cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1])" (identifier "cVar2") (= "=") (call_expression "FUN_00205cd0(local_40,uVar1,puVar4[-1])" (identifier "FUN_00205cd0") (argument_list "(local_40,uVar1,puVar4[-1])" (( "(") (identifier "local_40") (, ",") (identifier "uVar1") (, ",") (subscript_expression "puVar4[-1]" (identifier "puVar4") ([ "[") (number_literal "-1") (] "]")) () ")")))) (; ";")) (if_statement "if (cVar2 == '\0') break;" (if "if") (parenthesized_expression "(cVar2 == '\0')" (( "(") (binary_expression "cVar2 == '\0'" (identifier "cVar2") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "*puVar4 = puVar4[-1];" (assignment_expression "*puVar4 = puVar4[-1]" (pointer_expression "*puVar4" (* "*") (identifier "puVar4")) (= "=") (subscript_expression "puVar4[-1]" (identifier "puVar4") ([ "[") (number_literal "-1") (] "]"))) (; ";")) (expression_statement "puVar4 = puVar4 + -1;" (assignment_expression "puVar4 = puVar4 + -1" (identifier "puVar4") (= "=") (binary_expression "puVar4 + -1" (identifier "puVar4") (+ "+") (number_literal "-1"))) (; ";")) (} "}"))) (expression_statement "*puVar4 = uVar1;" (assignment_expression "*puVar4 = uVar1" (pointer_expression "*puVar4" (* "*") (identifier "puVar4")) (= "=") (identifier "uVar1")) (; ";")) (expression_statement "puVar3 = puVar3 + 1;" (assignment_expression "puVar3 = puVar3 + 1" (identifier "puVar3") (= "=") (binary_expression "puVar3 + 1" (identifier "puVar3") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (param_2 == puVar3) {\n          return;\n        }" (if "if") (parenthesized_expression "(param_2 == puVar3)" (( "(") (binary_expression "param_2 == puVar3" (identifier "param_2") (== "==") (identifier "puVar3")) () ")")) (compound_statement "{\n          return;\n        }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (} "}"))) (expression_statement "uVar1 = *puVar3;" (assignment_expression "uVar1 = *puVar3" (identifier "uVar1") (= "=") (pointer_expression "*puVar3" (* "*") (identifier "puVar3"))) (; ";")) (if_statement "if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }" (if "if") (parenthesized_expression "(param_1 != puVar3)" (( "(") (binary_expression "param_1 != puVar3" (identifier "param_1") (!= "!=") (identifier "puVar3")) () ")")) (compound_statement "{\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }" ({ "{") (expression_statement "memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);" (call_expression "memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1)" (identifier "memmove") (argument_list "(param_1 + 1,param_1,(long)puVar3 - (long)param_1)" (( "(") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1")) (, ",") (identifier "param_1") (, ",") (binary_expression "(long)puVar3 - (long)param_1" (cast_expression "(long)puVar3" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar3")) (- "-") (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1"))) () ")"))) (; ";")) (} "}"))) (expression_statement "*param_1 = uVar1;" (assignment_expression "*param_1 = uVar1" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (identifier "uVar1")) (; ";")) (expression_statement "puVar3 = puVar3 + 1;" (assignment_expression "puVar3 = puVar3 + 1" (identifier "puVar3") (= "=") (binary_expression "puVar3 + 1" (identifier "puVar3") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_2 != puVar3)" (( "(") (binary_expression "param_2 != puVar3" (identifier "param_2") (!= "!=") (identifier "puVar3")) () ")")) (; ";")) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* DWARF original name: __insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_section**,
   std::vector<gold::Output_section*> >,
   __gnu_cxx::__ops::_Iter_comp_iter<gold::Sort_output_sections> > */

void std::
     __insertion_sort<__gnu_cxx::__normal_iterator<gold::type_1**,_std::vector<gold::type_1*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::type_2>_>
               (__normal_iterator<gold::type_1**,_std::vector<gold::type_1*,_std::allocator<gold::type_1*>_>_>
                __first,__normal_iterator<gold::type_1**,_std::vector<gold::type_1*,_std::allocator<gold::type_1*>_>_>
                        __last,_Iter_comp_iter<gold::type_2> __comp)

{
  type_1 *pOVar1;
  bool bVar2;
  type_1 **var_1;
  type_1 **var_3;
  type_2 local_50 [2];
  type_2 local_40 [2];
  
  if ((__first._M_current != __last._M_current) &&
     (var_1 = __first._M_current + 1, __last._M_current != var_1)) {
    local_50[0].elements_ = (type_3 *)__comp._M_comp.elements_;
    do {
      while (bVar2 = gold::type_2::var_2()(local_50,*var_1,*__first._M_current),
            !bVar2) {
        pOVar1 = *var_1;
        local_40[0].elements_ = local_50[0].elements_;
        var_3 = var_1;
        while( true ) {
          bVar2 = gold::Sort_output_sections::var_2()(local_40,pOVar1,var_3[-1]);
          if (!bVar2) break;
          *var_3 = var_3[-1];
          var_3 = var_3 + -1;
        }
        *var_3 = pOVar1;
        var_1 = var_1 + 1;
        if (__last._M_current == var_1) {
          return;
        }
      }
      pOVar1 = *var_1;
      if (__first._M_current != var_1) {
        var_4(__first._M_current + 1,__first._M_current,(long)var_1 - (long)__first._M_current);
      }
      *__first._M_current = pOVar1;
      var_1 = var_1 + 1;
    } while (__last._M_current != var_1);
  }
  return;
}


(translation_unit (function_definition type: (primitive_type) 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: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (binary_expression left: (identifier) right: (identifier)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (do_statement body: (compound_statement (while_statement condition: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (identifier)) (pointer_expression argument: (identifier))))) right: (binary_expression left: (identifier) right: (char_literal (escape_sequence))))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (subscript_expression argument: (identifier) index: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence)))) consequence: (break_statement)) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (return_statement))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (identifier) (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: (pointer_expression argument: (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)))))) (return_statement))))

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

{
  undefined8 uVar1;
  char cVar2;
  undefined8 *puVar3;
  undefined8 *puVar4;
  undefined8 local_50 [2];
  undefined8 local_40 [2];
  
  if ((param_1 != param_2) && (puVar3 = param_1 + 1, param_2 != puVar3)) {
    local_50[0] = param_3;
    do {
      while (cVar2 = FUN_00205cd0(local_50,*puVar3,*param_1), cVar2 == '\0') {
        uVar1 = *puVar3;
        local_40[0] = local_50[0];
        puVar4 = puVar3;
        while( true ) {
          cVar2 = FUN_00205cd0(local_40,uVar1,puVar4[-1]);
          if (cVar2 == '\0') break;
          *puVar4 = puVar4[-1];
          puVar4 = puVar4 + -1;
        }
        *puVar4 = uVar1;
        puVar3 = puVar3 + 1;
        if (param_2 == puVar3) {
          return;
        }
      }
      uVar1 = *puVar3;
      if (param_1 != puVar3) {
        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);
      }
      *param_1 = uVar1;
      puVar3 = puVar3 + 1;
    } while (param_2 != puVar3);
  }
  return;
}

