
COMMAND * connect_async_list(COMMAND *command,COMMAND *command2,int connector)

{
  int iVar1;
  connection *pcVar2;
  COMMAND *pCVar3;
  COMMAND *pCVar4;
  COMMAND *pCVar5;
  
  pCVar4 = ((command->value).Connection)->second;
  if (((pCVar4 == (COMMAND *)0x0) || ((command->flags & 1) != 0)) ||
     (((command->value).Connection)->connector != 0x3b)) {
    command = command_connect(command,command2,connector);
  }
  else {
    pCVar5 = command;
    if (((undefined1  [32])*pCVar4 & (undefined1  [32])0x1ffffffff) == (undefined1  [32])0x6) {
      pcVar2 = (pCVar4->value).Connection;
      iVar1 = pcVar2->connector;
      while ((pCVar3 = pCVar4, pCVar4 = pCVar3, iVar1 == 0x3b &&
             (pCVar4 = pcVar2->second, pCVar5 = pCVar3,
             ((undefined1  [32])*pCVar4 & (undefined1  [32])0x1ffffffff) == (undefined1  [32])0x6)))
      {
        pcVar2 = (pCVar4->value).Connection;
        iVar1 = pcVar2->connector;
      }
    }
    pCVar4 = command_connect(pCVar4,command2,connector);
    ((pCVar5->value).While)->action = pCVar4;
  }
  return command;
}



ulong * connect_async_list(ulong *param_1)

{
  int iVar1;
  ulong uVar2;
  ulong *puVar3;
  undefined8 uVar4;
  ulong *puVar5;
  ulong *puVar6;
  
  puVar6 = *(ulong **)(param_1[3] + 0x10);
  if (((puVar6 == (ulong *)0x0) || ((*param_1 & 0x100000000) != 0)) ||
     (*(int *)(param_1[3] + 0x18) != 0x3b)) {
    param_1 = (ulong *)command_connect(param_1);
  }
  else {
    puVar5 = param_1;
    if ((*puVar6 & 0x1ffffffff) == 6) {
      uVar2 = puVar6[3];
      iVar1 = *(int *)(uVar2 + 0x18);
      while ((puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&
             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6))) {
        uVar2 = puVar6[3];
        iVar1 = *(int *)(uVar2 + 0x18);
      }
    }
    uVar4 = command_connect(puVar6);
    *(undefined8 *)(puVar5[3] + 0x10) = uVar4;
  }
  return param_1;
}


PUSH RBP
PUSH RBX
SUB RSP,0x8
MOV RBX,RDI
MOV RAX,qword ptr [RDI + 0x18]
MOV RBP,qword ptr [RAX + 0x10]
TEST RBP,RBP
JZ 0x0013e6e6
TEST byte ptr [RDI + 0x4],0x1
JNZ 0x0013e6e6
CMP dword ptr [RAX + 0x18],0x3b
JNZ 0x0013e6e6
MOV RAX,0x1ffffffff
AND RAX,qword ptr [RBP]
CMP RAX,0x6
JNZ 0x0013e724
MOV RCX,qword ptr [RBP + 0x18]
MOV R8,0x1ffffffff
CMP dword ptr [RCX + 0x18],0x3b
JZ 0x0013e6f8
MOV RDI,RBP
MOV RBP,RBX
JMP 0x0013e712
MOV RDI,RBX
CALL 0x0013d9df
ADD RSP,0x8
POP RBX
POP RBP
RET
MOV RBP,RDI
MOV RDI,qword ptr [RCX + 0x10]
MOV RAX,R8
AND RAX,qword ptr [RDI]
CMP RAX,0x6
JNZ 0x0013e712
MOV RCX,qword ptr [RDI + 0x18]
CMP dword ptr [RCX + 0x18],0x3b
JZ 0x0013e6f5
CALL 0x0013d9df
MOV RDX,qword ptr [RBP + 0x18]
MOV qword ptr [RDX + 0x10],RAX
MOV RAX,RBX
JMP 0x0013e6ee
MOV RDI,RBP
MOV RBP,RBX
JMP 0x0013e712
(translation_unit "ulong * connect_async_list(ulong *param_1)\n\n{\n  int iVar1;\n  ulong uVar2;\n  ulong *puVar3;\n  undefined8 uVar4;\n  ulong *puVar5;\n  ulong *puVar6;\n  \n  puVar6 = *(ulong **)(param_1[3] + 0x10);\n  if (((puVar6 == (ulong *)0x0) || ((*param_1 & 0x100000000) != 0)) ||\n     (*(int *)(param_1[3] + 0x18) != 0x3b)) {\n    param_1 = (ulong *)command_connect(param_1);\n  }\n  else {\n    puVar5 = param_1;\n    if ((*puVar6 & 0x1ffffffff) == 6) {\n      uVar2 = puVar6[3];\n      iVar1 = *(int *)(uVar2 + 0x18);\n      while ((puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6))) {\n        uVar2 = puVar6[3];\n        iVar1 = *(int *)(uVar2 + 0x18);\n      }\n    }\n    uVar4 = command_connect(puVar6);\n    *(undefined8 *)(puVar5[3] + 0x10) = uVar4;\n  }\n  return param_1;\n}\n\n" (function_definition "ulong * connect_async_list(ulong *param_1)\n\n{\n  int iVar1;\n  ulong uVar2;\n  ulong *puVar3;\n  undefined8 uVar4;\n  ulong *puVar5;\n  ulong *puVar6;\n  \n  puVar6 = *(ulong **)(param_1[3] + 0x10);\n  if (((puVar6 == (ulong *)0x0) || ((*param_1 & 0x100000000) != 0)) ||\n     (*(int *)(param_1[3] + 0x18) != 0x3b)) {\n    param_1 = (ulong *)command_connect(param_1);\n  }\n  else {\n    puVar5 = param_1;\n    if ((*puVar6 & 0x1ffffffff) == 6) {\n      uVar2 = puVar6[3];\n      iVar1 = *(int *)(uVar2 + 0x18);\n      while ((puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6))) {\n        uVar2 = puVar6[3];\n        iVar1 = *(int *)(uVar2 + 0x18);\n      }\n    }\n    uVar4 = command_connect(puVar6);\n    *(undefined8 *)(puVar5[3] + 0x10) = uVar4;\n  }\n  return param_1;\n}" type_identifier (pointer_declarator "* connect_async_list(ulong *param_1)" * (function_declarator "connect_async_list(ulong *param_1)" identifier (parameter_list "(ulong *param_1)" ( (parameter_declaration "ulong *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) )))) (compound_statement "{\n  int iVar1;\n  ulong uVar2;\n  ulong *puVar3;\n  undefined8 uVar4;\n  ulong *puVar5;\n  ulong *puVar6;\n  \n  puVar6 = *(ulong **)(param_1[3] + 0x10);\n  if (((puVar6 == (ulong *)0x0) || ((*param_1 & 0x100000000) != 0)) ||\n     (*(int *)(param_1[3] + 0x18) != 0x3b)) {\n    param_1 = (ulong *)command_connect(param_1);\n  }\n  else {\n    puVar5 = param_1;\n    if ((*puVar6 & 0x1ffffffff) == 6) {\n      uVar2 = puVar6[3];\n      iVar1 = *(int *)(uVar2 + 0x18);\n      while ((puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6))) {\n        uVar2 = puVar6[3];\n        iVar1 = *(int *)(uVar2 + 0x18);\n      }\n    }\n    uVar4 = command_connect(puVar6);\n    *(undefined8 *)(puVar5[3] + 0x10) = uVar4;\n  }\n  return param_1;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "ulong *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined8 uVar4;" type_identifier identifier ;) (declaration "ulong *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "ulong *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (expression_statement "puVar6 = *(ulong **)(param_1[3] + 0x10);" (assignment_expression "puVar6 = *(ulong **)(param_1[3] + 0x10)" identifier = (pointer_expression "*(ulong **)(param_1[3] + 0x10)" * (cast_expression "(ulong **)(param_1[3] + 0x10)" ( (type_descriptor "ulong **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1[3] + 0x10)" ( (binary_expression "param_1[3] + 0x10" (subscript_expression "param_1[3]" identifier [ number_literal ]) + number_literal) ))))) ;) (if_statement "if (((puVar6 == (ulong *)0x0) || ((*param_1 & 0x100000000) != 0)) ||\n     (*(int *)(param_1[3] + 0x18) != 0x3b)) {\n    param_1 = (ulong *)command_connect(param_1);\n  }\n  else {\n    puVar5 = param_1;\n    if ((*puVar6 & 0x1ffffffff) == 6) {\n      uVar2 = puVar6[3];\n      iVar1 = *(int *)(uVar2 + 0x18);\n      while ((puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6))) {\n        uVar2 = puVar6[3];\n        iVar1 = *(int *)(uVar2 + 0x18);\n      }\n    }\n    uVar4 = command_connect(puVar6);\n    *(undefined8 *)(puVar5[3] + 0x10) = uVar4;\n  }" if (parenthesized_expression "(((puVar6 == (ulong *)0x0) || ((*param_1 & 0x100000000) != 0)) ||\n     (*(int *)(param_1[3] + 0x18) != 0x3b))" ( (binary_expression "((puVar6 == (ulong *)0x0) || ((*param_1 & 0x100000000) != 0)) ||\n     (*(int *)(param_1[3] + 0x18) != 0x3b)" (parenthesized_expression "((puVar6 == (ulong *)0x0) || ((*param_1 & 0x100000000) != 0))" ( (binary_expression "(puVar6 == (ulong *)0x0) || ((*param_1 & 0x100000000) != 0)" (parenthesized_expression "(puVar6 == (ulong *)0x0)" ( (binary_expression "puVar6 == (ulong *)0x0" identifier == (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "((*param_1 & 0x100000000) != 0)" ( (binary_expression "(*param_1 & 0x100000000) != 0" (parenthesized_expression "(*param_1 & 0x100000000)" ( (binary_expression "*param_1 & 0x100000000" (pointer_expression "*param_1" * identifier) & number_literal) )) != number_literal) ))) )) || (parenthesized_expression "(*(int *)(param_1[3] + 0x18) != 0x3b)" ( (binary_expression "*(int *)(param_1[3] + 0x18) != 0x3b" (pointer_expression "*(int *)(param_1[3] + 0x18)" * (cast_expression "(int *)(param_1[3] + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[3] + 0x18)" ( (binary_expression "param_1[3] + 0x18" (subscript_expression "param_1[3]" identifier [ number_literal ]) + number_literal) )))) != number_literal) ))) )) (compound_statement "{\n    param_1 = (ulong *)command_connect(param_1);\n  }" { (expression_statement "param_1 = (ulong *)command_connect(param_1);" (assignment_expression "param_1 = (ulong *)command_connect(param_1)" identifier = (cast_expression "(ulong *)command_connect(param_1)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "command_connect(param_1)" identifier (argument_list "(param_1)" ( identifier ))))) ;) }) (else_clause "else {\n    puVar5 = param_1;\n    if ((*puVar6 & 0x1ffffffff) == 6) {\n      uVar2 = puVar6[3];\n      iVar1 = *(int *)(uVar2 + 0x18);\n      while ((puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6))) {\n        uVar2 = puVar6[3];\n        iVar1 = *(int *)(uVar2 + 0x18);\n      }\n    }\n    uVar4 = command_connect(puVar6);\n    *(undefined8 *)(puVar5[3] + 0x10) = uVar4;\n  }" else (compound_statement "{\n    puVar5 = param_1;\n    if ((*puVar6 & 0x1ffffffff) == 6) {\n      uVar2 = puVar6[3];\n      iVar1 = *(int *)(uVar2 + 0x18);\n      while ((puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6))) {\n        uVar2 = puVar6[3];\n        iVar1 = *(int *)(uVar2 + 0x18);\n      }\n    }\n    uVar4 = command_connect(puVar6);\n    *(undefined8 *)(puVar5[3] + 0x10) = uVar4;\n  }" { (expression_statement "puVar5 = param_1;" (assignment_expression "puVar5 = param_1" identifier = identifier) ;) (if_statement "if ((*puVar6 & 0x1ffffffff) == 6) {\n      uVar2 = puVar6[3];\n      iVar1 = *(int *)(uVar2 + 0x18);\n      while ((puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6))) {\n        uVar2 = puVar6[3];\n        iVar1 = *(int *)(uVar2 + 0x18);\n      }\n    }" if (parenthesized_expression "((*puVar6 & 0x1ffffffff) == 6)" ( (binary_expression "(*puVar6 & 0x1ffffffff) == 6" (parenthesized_expression "(*puVar6 & 0x1ffffffff)" ( (binary_expression "*puVar6 & 0x1ffffffff" (pointer_expression "*puVar6" * identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n      uVar2 = puVar6[3];\n      iVar1 = *(int *)(uVar2 + 0x18);\n      while ((puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6))) {\n        uVar2 = puVar6[3];\n        iVar1 = *(int *)(uVar2 + 0x18);\n      }\n    }" { (expression_statement "uVar2 = puVar6[3];" (assignment_expression "uVar2 = puVar6[3]" identifier = (subscript_expression "puVar6[3]" identifier [ number_literal ])) ;) (expression_statement "iVar1 = *(int *)(uVar2 + 0x18);" (assignment_expression "iVar1 = *(int *)(uVar2 + 0x18)" identifier = (pointer_expression "*(int *)(uVar2 + 0x18)" * (cast_expression "(int *)(uVar2 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar2 + 0x18)" ( (binary_expression "uVar2 + 0x18" identifier + number_literal) ))))) ;) (while_statement "while ((puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6))) {\n        uVar2 = puVar6[3];\n        iVar1 = *(int *)(uVar2 + 0x18);\n      }" while (parenthesized_expression "((puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6)))" ( (parenthesized_expression "(puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6))" ( (comma_expression "puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6)" (assignment_expression "puVar3 = puVar6" identifier = identifier) , (comma_expression "puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6)" (assignment_expression "puVar6 = puVar3" identifier = identifier) , (binary_expression "iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6)" (binary_expression "iVar1 == 0x3b" identifier == number_literal) && (parenthesized_expression "(puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6)" ( (comma_expression "puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6" (assignment_expression "puVar6 = *(ulong **)(uVar2 + 0x10)" identifier = (pointer_expression "*(ulong **)(uVar2 + 0x10)" * (cast_expression "(ulong **)(uVar2 + 0x10)" ( (type_descriptor "ulong **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(uVar2 + 0x10)" ( (binary_expression "uVar2 + 0x10" identifier + number_literal) ))))) , (comma_expression "puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6" (assignment_expression "puVar5 = puVar3" identifier = identifier) , (binary_expression "(*puVar6 & 0x1ffffffff) == 6" (parenthesized_expression "(*puVar6 & 0x1ffffffff)" ( (binary_expression "*puVar6 & 0x1ffffffff" (pointer_expression "*puVar6" * identifier) & number_literal) )) == number_literal))) ))))) )) )) (compound_statement "{\n        uVar2 = puVar6[3];\n        iVar1 = *(int *)(uVar2 + 0x18);\n      }" { (expression_statement "uVar2 = puVar6[3];" (assignment_expression "uVar2 = puVar6[3]" identifier = (subscript_expression "puVar6[3]" identifier [ number_literal ])) ;) (expression_statement "iVar1 = *(int *)(uVar2 + 0x18);" (assignment_expression "iVar1 = *(int *)(uVar2 + 0x18)" identifier = (pointer_expression "*(int *)(uVar2 + 0x18)" * (cast_expression "(int *)(uVar2 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar2 + 0x18)" ( (binary_expression "uVar2 + 0x18" identifier + number_literal) ))))) ;) })) })) (expression_statement "uVar4 = command_connect(puVar6);" (assignment_expression "uVar4 = command_connect(puVar6)" identifier = (call_expression "command_connect(puVar6)" identifier (argument_list "(puVar6)" ( identifier )))) ;) (expression_statement "*(undefined8 *)(puVar5[3] + 0x10) = uVar4;" (assignment_expression "*(undefined8 *)(puVar5[3] + 0x10) = uVar4" (pointer_expression "*(undefined8 *)(puVar5[3] + 0x10)" * (cast_expression "(undefined8 *)(puVar5[3] + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar5[3] + 0x10)" ( (binary_expression "puVar5[3] + 0x10" (subscript_expression "puVar5[3]" identifier [ number_literal ]) + number_literal) )))) = identifier) ;) }))) (return_statement "return param_1;" return identifier ;) })))
(translation_unit "COMMAND * connect_async_list(COMMAND *command,COMMAND *command2,int connector)\n\n{\n  int iVar1;\n  connection *pcVar2;\n  COMMAND *pCVar3;\n  COMMAND *pCVar4;\n  COMMAND *pCVar5;\n  \n  pCVar4 = ((command->value).Connection)->second;\n  if (((pCVar4 == (COMMAND *)0x0) || ((command->flags & 1) != 0)) ||\n     (((command->value).Connection)->connector != 0x3b)) {\n    command = command_connect(command,command2,connector);\n  }\n  else {\n    pCVar5 = command;\n    if (((undefined1  [32])*pCVar4 & (undefined1  [32])0x1ffffffff) == (undefined1  [32])0x6) {\n      pcVar2 = (pCVar4->value).Connection;\n      iVar1 = pcVar2->connector;\n      while ((pCVar3 = pCVar4, pCVar4 = pCVar3, iVar1 == 0x3b &&\n             (pCVar4 = pcVar2->second, pCVar5 = pCVar3,\n             ((undefined1  [32])*pCVar4 & (undefined1  [32])0x1ffffffff) == (undefined1  [32])0x6)))\n      {\n        pcVar2 = (pCVar4->value).Connection;\n        iVar1 = pcVar2->connector;\n      }\n    }\n    pCVar4 = command_connect(pCVar4,command2,connector);\n    ((pCVar5->value).While)->action = pCVar4;\n  }\n  return command;\n}\n\n" (function_definition "COMMAND * connect_async_list(COMMAND *command,COMMAND *command2,int connector)\n\n{\n  int iVar1;\n  connection *pcVar2;\n  COMMAND *pCVar3;\n  COMMAND *pCVar4;\n  COMMAND *pCVar5;\n  \n  pCVar4 = ((command->value).Connection)->second;\n  if (((pCVar4 == (COMMAND *)0x0) || ((command->flags & 1) != 0)) ||\n     (((command->value).Connection)->connector != 0x3b)) {\n    command = command_connect(command,command2,connector);\n  }\n  else {\n    pCVar5 = command;\n    if (((undefined1  [32])*pCVar4 & (undefined1  [32])0x1ffffffff) == (undefined1  [32])0x6) {\n      pcVar2 = (pCVar4->value).Connection;\n      iVar1 = pcVar2->connector;\n      while ((pCVar3 = pCVar4, pCVar4 = pCVar3, iVar1 == 0x3b &&\n             (pCVar4 = pcVar2->second, pCVar5 = pCVar3,\n             ((undefined1  [32])*pCVar4 & (undefined1  [32])0x1ffffffff) == (undefined1  [32])0x6)))\n      {\n        pcVar2 = (pCVar4->value).Connection;\n        iVar1 = pcVar2->connector;\n      }\n    }\n    pCVar4 = command_connect(pCVar4,command2,connector);\n    ((pCVar5->value).While)->action = pCVar4;\n  }\n  return command;\n}" type_identifier (pointer_declarator "* connect_async_list(COMMAND *command,COMMAND *command2,int connector)" * (function_declarator "connect_async_list(COMMAND *command,COMMAND *command2,int connector)" identifier (parameter_list "(COMMAND *command,COMMAND *command2,int connector)" ( (parameter_declaration "COMMAND *command" type_identifier (pointer_declarator "*command" * identifier)) , (parameter_declaration "COMMAND *command2" type_identifier (pointer_declarator "*command2" * identifier)) , (parameter_declaration "int connector" primitive_type identifier) )))) (compound_statement "{\n  int iVar1;\n  connection *pcVar2;\n  COMMAND *pCVar3;\n  COMMAND *pCVar4;\n  COMMAND *pCVar5;\n  \n  pCVar4 = ((command->value).Connection)->second;\n  if (((pCVar4 == (COMMAND *)0x0) || ((command->flags & 1) != 0)) ||\n     (((command->value).Connection)->connector != 0x3b)) {\n    command = command_connect(command,command2,connector);\n  }\n  else {\n    pCVar5 = command;\n    if (((undefined1  [32])*pCVar4 & (undefined1  [32])0x1ffffffff) == (undefined1  [32])0x6) {\n      pcVar2 = (pCVar4->value).Connection;\n      iVar1 = pcVar2->connector;\n      while ((pCVar3 = pCVar4, pCVar4 = pCVar3, iVar1 == 0x3b &&\n             (pCVar4 = pcVar2->second, pCVar5 = pCVar3,\n             ((undefined1  [32])*pCVar4 & (undefined1  [32])0x1ffffffff) == (undefined1  [32])0x6)))\n      {\n        pcVar2 = (pCVar4->value).Connection;\n        iVar1 = pcVar2->connector;\n      }\n    }\n    pCVar4 = command_connect(pCVar4,command2,connector);\n    ((pCVar5->value).While)->action = pCVar4;\n  }\n  return command;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "connection *pcVar2;" type_identifier (pointer_declarator "*pcVar2" * identifier) ;) (declaration "COMMAND *pCVar3;" type_identifier (pointer_declarator "*pCVar3" * identifier) ;) (declaration "COMMAND *pCVar4;" type_identifier (pointer_declarator "*pCVar4" * identifier) ;) (declaration "COMMAND *pCVar5;" type_identifier (pointer_declarator "*pCVar5" * identifier) ;) (expression_statement "pCVar4 = ((command->value).Connection)->second;" (assignment_expression "pCVar4 = ((command->value).Connection)->second" identifier = (field_expression "((command->value).Connection)->second" (parenthesized_expression "((command->value).Connection)" ( (field_expression "(command->value).Connection" (parenthesized_expression "(command->value)" ( (field_expression "command->value" identifier -> field_identifier) )) . field_identifier) )) -> field_identifier)) ;) (if_statement "if (((pCVar4 == (COMMAND *)0x0) || ((command->flags & 1) != 0)) ||\n     (((command->value).Connection)->connector != 0x3b)) {\n    command = command_connect(command,command2,connector);\n  }\n  else {\n    pCVar5 = command;\n    if (((undefined1  [32])*pCVar4 & (undefined1  [32])0x1ffffffff) == (undefined1  [32])0x6) {\n      pcVar2 = (pCVar4->value).Connection;\n      iVar1 = pcVar2->connector;\n      while ((pCVar3 = pCVar4, pCVar4 = pCVar3, iVar1 == 0x3b &&\n             (pCVar4 = pcVar2->second, pCVar5 = pCVar3,\n             ((undefined1  [32])*pCVar4 & (undefined1  [32])0x1ffffffff) == (undefined1  [32])0x6)))\n      {\n        pcVar2 = (pCVar4->value).Connection;\n        iVar1 = pcVar2->connector;\n      }\n    }\n    pCVar4 = command_connect(pCVar4,command2,connector);\n    ((pCVar5->value).While)->action = pCVar4;\n  }" if (parenthesized_expression "(((pCVar4 == (COMMAND *)0x0) || ((command->flags & 1) != 0)) ||\n     (((command->value).Connection)->connector != 0x3b))" ( (binary_expression "((pCVar4 == (COMMAND *)0x0) || ((command->flags & 1) != 0)) ||\n     (((command->value).Connection)->connector != 0x3b)" (parenthesized_expression "((pCVar4 == (COMMAND *)0x0) || ((command->flags & 1) != 0))" ( (binary_expression "(pCVar4 == (COMMAND *)0x0) || ((command->flags & 1) != 0)" (parenthesized_expression "(pCVar4 == (COMMAND *)0x0)" ( (binary_expression "pCVar4 == (COMMAND *)0x0" identifier == (cast_expression "(COMMAND *)0x0" ( (type_descriptor "COMMAND *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "((command->flags & 1) != 0)" ( (binary_expression "(command->flags & 1) != 0" (parenthesized_expression "(command->flags & 1)" ( (binary_expression "command->flags & 1" (field_expression "command->flags" identifier -> field_identifier) & number_literal) )) != number_literal) ))) )) || (parenthesized_expression "(((command->value).Connection)->connector != 0x3b)" ( (binary_expression "((command->value).Connection)->connector != 0x3b" (field_expression "((command->value).Connection)->connector" (parenthesized_expression "((command->value).Connection)" ( (field_expression "(command->value).Connection" (parenthesized_expression "(command->value)" ( (field_expression "command->value" identifier -> field_identifier) )) . field_identifier) )) -> field_identifier) != number_literal) ))) )) (compound_statement "{\n    command = command_connect(command,command2,connector);\n  }" { (expression_statement "command = command_connect(command,command2,connector);" (assignment_expression "command = command_connect(command,command2,connector)" identifier = (call_expression "command_connect(command,command2,connector)" identifier (argument_list "(command,command2,connector)" ( identifier , identifier , identifier )))) ;) }) (else_clause "else {\n    pCVar5 = command;\n    if (((undefined1  [32])*pCVar4 & (undefined1  [32])0x1ffffffff) == (undefined1  [32])0x6) {\n      pcVar2 = (pCVar4->value).Connection;\n      iVar1 = pcVar2->connector;\n      while ((pCVar3 = pCVar4, pCVar4 = pCVar3, iVar1 == 0x3b &&\n             (pCVar4 = pcVar2->second, pCVar5 = pCVar3,\n             ((undefined1  [32])*pCVar4 & (undefined1  [32])0x1ffffffff) == (undefined1  [32])0x6)))\n      {\n        pcVar2 = (pCVar4->value).Connection;\n        iVar1 = pcVar2->connector;\n      }\n    }\n    pCVar4 = command_connect(pCVar4,command2,connector);\n    ((pCVar5->value).While)->action = pCVar4;\n  }" else (compound_statement "{\n    pCVar5 = command;\n    if (((undefined1  [32])*pCVar4 & (undefined1  [32])0x1ffffffff) == (undefined1  [32])0x6) {\n      pcVar2 = (pCVar4->value).Connection;\n      iVar1 = pcVar2->connector;\n      while ((pCVar3 = pCVar4, pCVar4 = pCVar3, iVar1 == 0x3b &&\n             (pCVar4 = pcVar2->second, pCVar5 = pCVar3,\n             ((undefined1  [32])*pCVar4 & (undefined1  [32])0x1ffffffff) == (undefined1  [32])0x6)))\n      {\n        pcVar2 = (pCVar4->value).Connection;\n        iVar1 = pcVar2->connector;\n      }\n    }\n    pCVar4 = command_connect(pCVar4,command2,connector);\n    ((pCVar5->value).While)->action = pCVar4;\n  }" { (expression_statement "pCVar5 = command;" (assignment_expression "pCVar5 = command" identifier = identifier) ;) (if_statement "if (((undefined1  [32])*pCVar4 & (undefined1  [32])0x1ffffffff) == (undefined1  [32])0x6) {\n      pcVar2 = (pCVar4->value).Connection;\n      iVar1 = pcVar2->connector;\n      while ((pCVar3 = pCVar4, pCVar4 = pCVar3, iVar1 == 0x3b &&\n             (pCVar4 = pcVar2->second, pCVar5 = pCVar3,\n             ((undefined1  [32])*pCVar4 & (undefined1  [32])0x1ffffffff) == (undefined1  [32])0x6)))\n      {\n        pcVar2 = (pCVar4->value).Connection;\n        iVar1 = pcVar2->connector;\n      }\n    }" if (parenthesized_expression "(((undefined1  [32])*pCVar4 & (undefined1  [32])0x1ffffffff) == (undefined1  [32])0x6)" ( (binary_expression "((undefined1  [32])*pCVar4 & (undefined1  [32])0x1ffffffff) == (undefined1  [32])0x6" (parenthesized_expression "((undefined1  [32])*pCVar4 & (undefined1  [32])0x1ffffffff)" ( (binary_expression "(undefined1  [32])*pCVar4 & (undefined1  [32])0x1ffffffff" (binary_expression "(undefined1  [32])*pCVar4" (parenthesized_expression "(undefined1  [32])" ( (subscript_expression "undefined1  [32]" identifier [ number_literal ]) )) * identifier) & (cast_expression "(undefined1  [32])0x1ffffffff" ( (type_descriptor "undefined1  [32]" type_identifier (abstract_array_declarator "[32]" [ number_literal ])) ) number_literal)) )) == (cast_expression "(undefined1  [32])0x6" ( (type_descriptor "undefined1  [32]" type_identifier (abstract_array_declarator "[32]" [ number_literal ])) ) number_literal)) )) (compound_statement "{\n      pcVar2 = (pCVar4->value).Connection;\n      iVar1 = pcVar2->connector;\n      while ((pCVar3 = pCVar4, pCVar4 = pCVar3, iVar1 == 0x3b &&\n             (pCVar4 = pcVar2->second, pCVar5 = pCVar3,\n             ((undefined1  [32])*pCVar4 & (undefined1  [32])0x1ffffffff) == (undefined1  [32])0x6)))\n      {\n        pcVar2 = (pCVar4->value).Connection;\n        iVar1 = pcVar2->connector;\n      }\n    }" { (expression_statement "pcVar2 = (pCVar4->value).Connection;" (assignment_expression "pcVar2 = (pCVar4->value).Connection" identifier = (field_expression "(pCVar4->value).Connection" (parenthesized_expression "(pCVar4->value)" ( (field_expression "pCVar4->value" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "iVar1 = pcVar2->connector;" (assignment_expression "iVar1 = pcVar2->connector" identifier = (field_expression "pcVar2->connector" identifier -> field_identifier)) ;) (while_statement "while ((pCVar3 = pCVar4, pCVar4 = pCVar3, iVar1 == 0x3b &&\n             (pCVar4 = pcVar2->second, pCVar5 = pCVar3,\n             ((undefined1  [32])*pCVar4 & (undefined1  [32])0x1ffffffff) == (undefined1  [32])0x6)))\n      {\n        pcVar2 = (pCVar4->value).Connection;\n        iVar1 = pcVar2->connector;\n      }" while (parenthesized_expression "((pCVar3 = pCVar4, pCVar4 = pCVar3, iVar1 == 0x3b &&\n             (pCVar4 = pcVar2->second, pCVar5 = pCVar3,\n             ((undefined1  [32])*pCVar4 & (undefined1  [32])0x1ffffffff) == (undefined1  [32])0x6)))" ( (parenthesized_expression "(pCVar3 = pCVar4, pCVar4 = pCVar3, iVar1 == 0x3b &&\n             (pCVar4 = pcVar2->second, pCVar5 = pCVar3,\n             ((undefined1  [32])*pCVar4 & (undefined1  [32])0x1ffffffff) == (undefined1  [32])0x6))" ( (comma_expression "pCVar3 = pCVar4, pCVar4 = pCVar3, iVar1 == 0x3b &&\n             (pCVar4 = pcVar2->second, pCVar5 = pCVar3,\n             ((undefined1  [32])*pCVar4 & (undefined1  [32])0x1ffffffff) == (undefined1  [32])0x6)" (assignment_expression "pCVar3 = pCVar4" identifier = identifier) , (comma_expression "pCVar4 = pCVar3, iVar1 == 0x3b &&\n             (pCVar4 = pcVar2->second, pCVar5 = pCVar3,\n             ((undefined1  [32])*pCVar4 & (undefined1  [32])0x1ffffffff) == (undefined1  [32])0x6)" (assignment_expression "pCVar4 = pCVar3" identifier = identifier) , (binary_expression "iVar1 == 0x3b &&\n             (pCVar4 = pcVar2->second, pCVar5 = pCVar3,\n             ((undefined1  [32])*pCVar4 & (undefined1  [32])0x1ffffffff) == (undefined1  [32])0x6)" (binary_expression "iVar1 == 0x3b" identifier == number_literal) && (parenthesized_expression "(pCVar4 = pcVar2->second, pCVar5 = pCVar3,\n             ((undefined1  [32])*pCVar4 & (undefined1  [32])0x1ffffffff) == (undefined1  [32])0x6)" ( (comma_expression "pCVar4 = pcVar2->second, pCVar5 = pCVar3,\n             ((undefined1  [32])*pCVar4 & (undefined1  [32])0x1ffffffff) == (undefined1  [32])0x6" (assignment_expression "pCVar4 = pcVar2->second" identifier = (field_expression "pcVar2->second" identifier -> field_identifier)) , (comma_expression "pCVar5 = pCVar3,\n             ((undefined1  [32])*pCVar4 & (undefined1  [32])0x1ffffffff) == (undefined1  [32])0x6" (assignment_expression "pCVar5 = pCVar3" identifier = identifier) , (binary_expression "((undefined1  [32])*pCVar4 & (undefined1  [32])0x1ffffffff) == (undefined1  [32])0x6" (parenthesized_expression "((undefined1  [32])*pCVar4 & (undefined1  [32])0x1ffffffff)" ( (binary_expression "(undefined1  [32])*pCVar4 & (undefined1  [32])0x1ffffffff" (binary_expression "(undefined1  [32])*pCVar4" (parenthesized_expression "(undefined1  [32])" ( (subscript_expression "undefined1  [32]" identifier [ number_literal ]) )) * identifier) & (cast_expression "(undefined1  [32])0x1ffffffff" ( (type_descriptor "undefined1  [32]" type_identifier (abstract_array_declarator "[32]" [ number_literal ])) ) number_literal)) )) == (cast_expression "(undefined1  [32])0x6" ( (type_descriptor "undefined1  [32]" type_identifier (abstract_array_declarator "[32]" [ number_literal ])) ) number_literal)))) ))))) )) )) (compound_statement "{\n        pcVar2 = (pCVar4->value).Connection;\n        iVar1 = pcVar2->connector;\n      }" { (expression_statement "pcVar2 = (pCVar4->value).Connection;" (assignment_expression "pcVar2 = (pCVar4->value).Connection" identifier = (field_expression "(pCVar4->value).Connection" (parenthesized_expression "(pCVar4->value)" ( (field_expression "pCVar4->value" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "iVar1 = pcVar2->connector;" (assignment_expression "iVar1 = pcVar2->connector" identifier = (field_expression "pcVar2->connector" identifier -> field_identifier)) ;) })) })) (expression_statement "pCVar4 = command_connect(pCVar4,command2,connector);" (assignment_expression "pCVar4 = command_connect(pCVar4,command2,connector)" identifier = (call_expression "command_connect(pCVar4,command2,connector)" identifier (argument_list "(pCVar4,command2,connector)" ( identifier , identifier , identifier )))) ;) (expression_statement "((pCVar5->value).While)->action = pCVar4;" (assignment_expression "((pCVar5->value).While)->action = pCVar4" (field_expression "((pCVar5->value).While)->action" (parenthesized_expression "((pCVar5->value).While)" ( (field_expression "(pCVar5->value).While" (parenthesized_expression "(pCVar5->value)" ( (field_expression "pCVar5->value" identifier -> field_identifier) )) . field_identifier) )) -> field_identifier) = identifier) ;) }))) (return_statement "return command;" return identifier ;) })))
(translation_unit "ulong * connect_async_list(ulong *param_1)\n\n{\n  int iVar1;\n  ulong uVar2;\n  ulong *puVar3;\n  undefined8 uVar4;\n  ulong *puVar5;\n  ulong *puVar6;\n  \n  puVar6 = *(ulong **)(param_1[3] + 0x10);\n  if (((puVar6 == (ulong *)0x0) || ((*param_1 & 0x100000000) != 0)) ||\n     (*(int *)(param_1[3] + 0x18) != 0x3b)) {\n    param_1 = (ulong *)command_connect(param_1);\n  }\n  else {\n    puVar5 = param_1;\n    if ((*puVar6 & 0x1ffffffff) == 6) {\n      uVar2 = puVar6[3];\n      iVar1 = *(int *)(uVar2 + 0x18);\n      while ((puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6))) {\n        uVar2 = puVar6[3];\n        iVar1 = *(int *)(uVar2 + 0x18);\n      }\n    }\n    uVar4 = command_connect(puVar6);\n    *(undefined8 *)(puVar5[3] + 0x10) = uVar4;\n  }\n  return param_1;\n}\n\n" (function_definition "ulong * connect_async_list(ulong *param_1)\n\n{\n  int iVar1;\n  ulong uVar2;\n  ulong *puVar3;\n  undefined8 uVar4;\n  ulong *puVar5;\n  ulong *puVar6;\n  \n  puVar6 = *(ulong **)(param_1[3] + 0x10);\n  if (((puVar6 == (ulong *)0x0) || ((*param_1 & 0x100000000) != 0)) ||\n     (*(int *)(param_1[3] + 0x18) != 0x3b)) {\n    param_1 = (ulong *)command_connect(param_1);\n  }\n  else {\n    puVar5 = param_1;\n    if ((*puVar6 & 0x1ffffffff) == 6) {\n      uVar2 = puVar6[3];\n      iVar1 = *(int *)(uVar2 + 0x18);\n      while ((puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6))) {\n        uVar2 = puVar6[3];\n        iVar1 = *(int *)(uVar2 + 0x18);\n      }\n    }\n    uVar4 = command_connect(puVar6);\n    *(undefined8 *)(puVar5[3] + 0x10) = uVar4;\n  }\n  return param_1;\n}" type_identifier (pointer_declarator "* connect_async_list(ulong *param_1)" * (function_declarator "connect_async_list(ulong *param_1)" identifier (parameter_list "(ulong *param_1)" ( (parameter_declaration "ulong *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) )))) (compound_statement "{\n  int iVar1;\n  ulong uVar2;\n  ulong *puVar3;\n  undefined8 uVar4;\n  ulong *puVar5;\n  ulong *puVar6;\n  \n  puVar6 = *(ulong **)(param_1[3] + 0x10);\n  if (((puVar6 == (ulong *)0x0) || ((*param_1 & 0x100000000) != 0)) ||\n     (*(int *)(param_1[3] + 0x18) != 0x3b)) {\n    param_1 = (ulong *)command_connect(param_1);\n  }\n  else {\n    puVar5 = param_1;\n    if ((*puVar6 & 0x1ffffffff) == 6) {\n      uVar2 = puVar6[3];\n      iVar1 = *(int *)(uVar2 + 0x18);\n      while ((puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6))) {\n        uVar2 = puVar6[3];\n        iVar1 = *(int *)(uVar2 + 0x18);\n      }\n    }\n    uVar4 = command_connect(puVar6);\n    *(undefined8 *)(puVar5[3] + 0x10) = uVar4;\n  }\n  return param_1;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "ulong *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined8 uVar4;" type_identifier identifier ;) (declaration "ulong *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "ulong *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (expression_statement "puVar6 = *(ulong **)(param_1[3] + 0x10);" (assignment_expression "puVar6 = *(ulong **)(param_1[3] + 0x10)" identifier = (pointer_expression "*(ulong **)(param_1[3] + 0x10)" * (cast_expression "(ulong **)(param_1[3] + 0x10)" ( (type_descriptor "ulong **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1[3] + 0x10)" ( (binary_expression "param_1[3] + 0x10" (subscript_expression "param_1[3]" identifier [ number_literal ]) + number_literal) ))))) ;) (if_statement "if (((puVar6 == (ulong *)0x0) || ((*param_1 & 0x100000000) != 0)) ||\n     (*(int *)(param_1[3] + 0x18) != 0x3b)) {\n    param_1 = (ulong *)command_connect(param_1);\n  }\n  else {\n    puVar5 = param_1;\n    if ((*puVar6 & 0x1ffffffff) == 6) {\n      uVar2 = puVar6[3];\n      iVar1 = *(int *)(uVar2 + 0x18);\n      while ((puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6))) {\n        uVar2 = puVar6[3];\n        iVar1 = *(int *)(uVar2 + 0x18);\n      }\n    }\n    uVar4 = command_connect(puVar6);\n    *(undefined8 *)(puVar5[3] + 0x10) = uVar4;\n  }" if (parenthesized_expression "(((puVar6 == (ulong *)0x0) || ((*param_1 & 0x100000000) != 0)) ||\n     (*(int *)(param_1[3] + 0x18) != 0x3b))" ( (binary_expression "((puVar6 == (ulong *)0x0) || ((*param_1 & 0x100000000) != 0)) ||\n     (*(int *)(param_1[3] + 0x18) != 0x3b)" (parenthesized_expression "((puVar6 == (ulong *)0x0) || ((*param_1 & 0x100000000) != 0))" ( (binary_expression "(puVar6 == (ulong *)0x0) || ((*param_1 & 0x100000000) != 0)" (parenthesized_expression "(puVar6 == (ulong *)0x0)" ( (binary_expression "puVar6 == (ulong *)0x0" identifier == (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "((*param_1 & 0x100000000) != 0)" ( (binary_expression "(*param_1 & 0x100000000) != 0" (parenthesized_expression "(*param_1 & 0x100000000)" ( (binary_expression "*param_1 & 0x100000000" (pointer_expression "*param_1" * identifier) & number_literal) )) != number_literal) ))) )) || (parenthesized_expression "(*(int *)(param_1[3] + 0x18) != 0x3b)" ( (binary_expression "*(int *)(param_1[3] + 0x18) != 0x3b" (pointer_expression "*(int *)(param_1[3] + 0x18)" * (cast_expression "(int *)(param_1[3] + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[3] + 0x18)" ( (binary_expression "param_1[3] + 0x18" (subscript_expression "param_1[3]" identifier [ number_literal ]) + number_literal) )))) != number_literal) ))) )) (compound_statement "{\n    param_1 = (ulong *)command_connect(param_1);\n  }" { (expression_statement "param_1 = (ulong *)command_connect(param_1);" (assignment_expression "param_1 = (ulong *)command_connect(param_1)" identifier = (cast_expression "(ulong *)command_connect(param_1)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "command_connect(param_1)" identifier (argument_list "(param_1)" ( identifier ))))) ;) }) (else_clause "else {\n    puVar5 = param_1;\n    if ((*puVar6 & 0x1ffffffff) == 6) {\n      uVar2 = puVar6[3];\n      iVar1 = *(int *)(uVar2 + 0x18);\n      while ((puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6))) {\n        uVar2 = puVar6[3];\n        iVar1 = *(int *)(uVar2 + 0x18);\n      }\n    }\n    uVar4 = command_connect(puVar6);\n    *(undefined8 *)(puVar5[3] + 0x10) = uVar4;\n  }" else (compound_statement "{\n    puVar5 = param_1;\n    if ((*puVar6 & 0x1ffffffff) == 6) {\n      uVar2 = puVar6[3];\n      iVar1 = *(int *)(uVar2 + 0x18);\n      while ((puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6))) {\n        uVar2 = puVar6[3];\n        iVar1 = *(int *)(uVar2 + 0x18);\n      }\n    }\n    uVar4 = command_connect(puVar6);\n    *(undefined8 *)(puVar5[3] + 0x10) = uVar4;\n  }" { (expression_statement "puVar5 = param_1;" (assignment_expression "puVar5 = param_1" identifier = identifier) ;) (if_statement "if ((*puVar6 & 0x1ffffffff) == 6) {\n      uVar2 = puVar6[3];\n      iVar1 = *(int *)(uVar2 + 0x18);\n      while ((puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6))) {\n        uVar2 = puVar6[3];\n        iVar1 = *(int *)(uVar2 + 0x18);\n      }\n    }" if (parenthesized_expression "((*puVar6 & 0x1ffffffff) == 6)" ( (binary_expression "(*puVar6 & 0x1ffffffff) == 6" (parenthesized_expression "(*puVar6 & 0x1ffffffff)" ( (binary_expression "*puVar6 & 0x1ffffffff" (pointer_expression "*puVar6" * identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n      uVar2 = puVar6[3];\n      iVar1 = *(int *)(uVar2 + 0x18);\n      while ((puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6))) {\n        uVar2 = puVar6[3];\n        iVar1 = *(int *)(uVar2 + 0x18);\n      }\n    }" { (expression_statement "uVar2 = puVar6[3];" (assignment_expression "uVar2 = puVar6[3]" identifier = (subscript_expression "puVar6[3]" identifier [ number_literal ])) ;) (expression_statement "iVar1 = *(int *)(uVar2 + 0x18);" (assignment_expression "iVar1 = *(int *)(uVar2 + 0x18)" identifier = (pointer_expression "*(int *)(uVar2 + 0x18)" * (cast_expression "(int *)(uVar2 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar2 + 0x18)" ( (binary_expression "uVar2 + 0x18" identifier + number_literal) ))))) ;) (while_statement "while ((puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6))) {\n        uVar2 = puVar6[3];\n        iVar1 = *(int *)(uVar2 + 0x18);\n      }" while (parenthesized_expression "((puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6)))" ( (parenthesized_expression "(puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6))" ( (comma_expression "puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6)" (assignment_expression "puVar3 = puVar6" identifier = identifier) , (comma_expression "puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6)" (assignment_expression "puVar6 = puVar3" identifier = identifier) , (binary_expression "iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6)" (binary_expression "iVar1 == 0x3b" identifier == number_literal) && (parenthesized_expression "(puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6)" ( (comma_expression "puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6" (assignment_expression "puVar6 = *(ulong **)(uVar2 + 0x10)" identifier = (pointer_expression "*(ulong **)(uVar2 + 0x10)" * (cast_expression "(ulong **)(uVar2 + 0x10)" ( (type_descriptor "ulong **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(uVar2 + 0x10)" ( (binary_expression "uVar2 + 0x10" identifier + number_literal) ))))) , (comma_expression "puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6" (assignment_expression "puVar5 = puVar3" identifier = identifier) , (binary_expression "(*puVar6 & 0x1ffffffff) == 6" (parenthesized_expression "(*puVar6 & 0x1ffffffff)" ( (binary_expression "*puVar6 & 0x1ffffffff" (pointer_expression "*puVar6" * identifier) & number_literal) )) == number_literal))) ))))) )) )) (compound_statement "{\n        uVar2 = puVar6[3];\n        iVar1 = *(int *)(uVar2 + 0x18);\n      }" { (expression_statement "uVar2 = puVar6[3];" (assignment_expression "uVar2 = puVar6[3]" identifier = (subscript_expression "puVar6[3]" identifier [ number_literal ])) ;) (expression_statement "iVar1 = *(int *)(uVar2 + 0x18);" (assignment_expression "iVar1 = *(int *)(uVar2 + 0x18)" identifier = (pointer_expression "*(int *)(uVar2 + 0x18)" * (cast_expression "(int *)(uVar2 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar2 + 0x18)" ( (binary_expression "uVar2 + 0x18" identifier + number_literal) ))))) ;) })) })) (expression_statement "uVar4 = command_connect(puVar6);" (assignment_expression "uVar4 = command_connect(puVar6)" identifier = (call_expression "command_connect(puVar6)" identifier (argument_list "(puVar6)" ( identifier )))) ;) (expression_statement "*(undefined8 *)(puVar5[3] + 0x10) = uVar4;" (assignment_expression "*(undefined8 *)(puVar5[3] + 0x10) = uVar4" (pointer_expression "*(undefined8 *)(puVar5[3] + 0x10)" * (cast_expression "(undefined8 *)(puVar5[3] + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar5[3] + 0x10)" ( (binary_expression "puVar5[3] + 0x10" (subscript_expression "puVar5[3]" identifier [ number_literal ]) + number_literal) )))) = identifier) ;) }))) (return_statement "return param_1;" return identifier ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) )))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) || (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) & LIT) )) != LIT) ))) )) || (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) != LIT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT ))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (while_statement while (parenthesized_expression ( (parenthesized_expression ( (comma_expression (assignment_expression IDENT = IDENT) , (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression (binary_expression IDENT == LIT) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) , (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) & LIT) )) == LIT))) ))))) )) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) })) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) = IDENT) ;) }))) (return_statement return IDENT ;) })))
(function_definition "ulong * connect_async_list(ulong *param_1)\n\n{\n  int iVar1;\n  ulong uVar2;\n  ulong *puVar3;\n  undefined8 uVar4;\n  ulong *puVar5;\n  ulong *puVar6;\n  \n  puVar6 = *(ulong **)(param_1[3] + 0x10);\n  if (((puVar6 == (ulong *)0x0) || ((*param_1 & 0x100000000) != 0)) ||\n     (*(int *)(param_1[3] + 0x18) != 0x3b)) {\n    param_1 = (ulong *)command_connect(param_1);\n  }\n  else {\n    puVar5 = param_1;\n    if ((*puVar6 & 0x1ffffffff) == 6) {\n      uVar2 = puVar6[3];\n      iVar1 = *(int *)(uVar2 + 0x18);\n      while ((puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6))) {\n        uVar2 = puVar6[3];\n        iVar1 = *(int *)(uVar2 + 0x18);\n      }\n    }\n    uVar4 = command_connect(puVar6);\n    *(undefined8 *)(puVar5[3] + 0x10) = uVar4;\n  }\n  return param_1;\n}" (type_identifier "ulong") (pointer_declarator "* connect_async_list(ulong *param_1)" (* "*") (function_declarator "connect_async_list(ulong *param_1)" (identifier "connect_async_list") (parameter_list "(ulong *param_1)" (( "(") (parameter_declaration "ulong *param_1" (type_identifier "ulong") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) () ")")))) (compound_statement "{\n  int iVar1;\n  ulong uVar2;\n  ulong *puVar3;\n  undefined8 uVar4;\n  ulong *puVar5;\n  ulong *puVar6;\n  \n  puVar6 = *(ulong **)(param_1[3] + 0x10);\n  if (((puVar6 == (ulong *)0x0) || ((*param_1 & 0x100000000) != 0)) ||\n     (*(int *)(param_1[3] + 0x18) != 0x3b)) {\n    param_1 = (ulong *)command_connect(param_1);\n  }\n  else {\n    puVar5 = param_1;\n    if ((*puVar6 & 0x1ffffffff) == 6) {\n      uVar2 = puVar6[3];\n      iVar1 = *(int *)(uVar2 + 0x18);\n      while ((puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6))) {\n        uVar2 = puVar6[3];\n        iVar1 = *(int *)(uVar2 + 0x18);\n      }\n    }\n    uVar4 = command_connect(puVar6);\n    *(undefined8 *)(puVar5[3] + 0x10) = uVar4;\n  }\n  return param_1;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "ulong uVar2;" (type_identifier "ulong") (identifier "uVar2") (; ";")) (declaration "ulong *puVar3;" (type_identifier "ulong") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "undefined8 uVar4;" (type_identifier "undefined8") (identifier "uVar4") (; ";")) (declaration "ulong *puVar5;" (type_identifier "ulong") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (declaration "ulong *puVar6;" (type_identifier "ulong") (pointer_declarator "*puVar6" (* "*") (identifier "puVar6")) (; ";")) (expression_statement "puVar6 = *(ulong **)(param_1[3] + 0x10);" (assignment_expression "puVar6 = *(ulong **)(param_1[3] + 0x10)" (identifier "puVar6") (= "=") (pointer_expression "*(ulong **)(param_1[3] + 0x10)" (* "*") (cast_expression "(ulong **)(param_1[3] + 0x10)" (( "(") (type_descriptor "ulong **" (type_identifier "ulong") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1[3] + 0x10)" (( "(") (binary_expression "param_1[3] + 0x10" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (if_statement "if (((puVar6 == (ulong *)0x0) || ((*param_1 & 0x100000000) != 0)) ||\n     (*(int *)(param_1[3] + 0x18) != 0x3b)) {\n    param_1 = (ulong *)command_connect(param_1);\n  }\n  else {\n    puVar5 = param_1;\n    if ((*puVar6 & 0x1ffffffff) == 6) {\n      uVar2 = puVar6[3];\n      iVar1 = *(int *)(uVar2 + 0x18);\n      while ((puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6))) {\n        uVar2 = puVar6[3];\n        iVar1 = *(int *)(uVar2 + 0x18);\n      }\n    }\n    uVar4 = command_connect(puVar6);\n    *(undefined8 *)(puVar5[3] + 0x10) = uVar4;\n  }" (if "if") (parenthesized_expression "(((puVar6 == (ulong *)0x0) || ((*param_1 & 0x100000000) != 0)) ||\n     (*(int *)(param_1[3] + 0x18) != 0x3b))" (( "(") (binary_expression "((puVar6 == (ulong *)0x0) || ((*param_1 & 0x100000000) != 0)) ||\n     (*(int *)(param_1[3] + 0x18) != 0x3b)" (parenthesized_expression "((puVar6 == (ulong *)0x0) || ((*param_1 & 0x100000000) != 0))" (( "(") (binary_expression "(puVar6 == (ulong *)0x0) || ((*param_1 & 0x100000000) != 0)" (parenthesized_expression "(puVar6 == (ulong *)0x0)" (( "(") (binary_expression "puVar6 == (ulong *)0x0" (identifier "puVar6") (== "==") (cast_expression "(ulong *)0x0" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (|| "||") (parenthesized_expression "((*param_1 & 0x100000000) != 0)" (( "(") (binary_expression "(*param_1 & 0x100000000) != 0" (parenthesized_expression "(*param_1 & 0x100000000)" (( "(") (binary_expression "*param_1 & 0x100000000" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (& "&") (number_literal "0x100000000")) () ")")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (|| "||") (parenthesized_expression "(*(int *)(param_1[3] + 0x18) != 0x3b)" (( "(") (binary_expression "*(int *)(param_1[3] + 0x18) != 0x3b" (pointer_expression "*(int *)(param_1[3] + 0x18)" (* "*") (cast_expression "(int *)(param_1[3] + 0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[3] + 0x18)" (( "(") (binary_expression "param_1[3] + 0x18" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (+ "+") (number_literal "0x18")) () ")")))) (!= "!=") (number_literal "0x3b")) () ")"))) () ")")) (compound_statement "{\n    param_1 = (ulong *)command_connect(param_1);\n  }" ({ "{") (expression_statement "param_1 = (ulong *)command_connect(param_1);" (assignment_expression "param_1 = (ulong *)command_connect(param_1)" (identifier "param_1") (= "=") (cast_expression "(ulong *)command_connect(param_1)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "command_connect(param_1)" (identifier "command_connect") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")"))))) (; ";")) (} "}")) (else_clause "else {\n    puVar5 = param_1;\n    if ((*puVar6 & 0x1ffffffff) == 6) {\n      uVar2 = puVar6[3];\n      iVar1 = *(int *)(uVar2 + 0x18);\n      while ((puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6))) {\n        uVar2 = puVar6[3];\n        iVar1 = *(int *)(uVar2 + 0x18);\n      }\n    }\n    uVar4 = command_connect(puVar6);\n    *(undefined8 *)(puVar5[3] + 0x10) = uVar4;\n  }" (else "else") (compound_statement "{\n    puVar5 = param_1;\n    if ((*puVar6 & 0x1ffffffff) == 6) {\n      uVar2 = puVar6[3];\n      iVar1 = *(int *)(uVar2 + 0x18);\n      while ((puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6))) {\n        uVar2 = puVar6[3];\n        iVar1 = *(int *)(uVar2 + 0x18);\n      }\n    }\n    uVar4 = command_connect(puVar6);\n    *(undefined8 *)(puVar5[3] + 0x10) = uVar4;\n  }" ({ "{") (expression_statement "puVar5 = param_1;" (assignment_expression "puVar5 = param_1" (identifier "puVar5") (= "=") (identifier "param_1")) (; ";")) (if_statement "if ((*puVar6 & 0x1ffffffff) == 6) {\n      uVar2 = puVar6[3];\n      iVar1 = *(int *)(uVar2 + 0x18);\n      while ((puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6))) {\n        uVar2 = puVar6[3];\n        iVar1 = *(int *)(uVar2 + 0x18);\n      }\n    }" (if "if") (parenthesized_expression "((*puVar6 & 0x1ffffffff) == 6)" (( "(") (binary_expression "(*puVar6 & 0x1ffffffff) == 6" (parenthesized_expression "(*puVar6 & 0x1ffffffff)" (( "(") (binary_expression "*puVar6 & 0x1ffffffff" (pointer_expression "*puVar6" (* "*") (identifier "puVar6")) (& "&") (number_literal "0x1ffffffff")) () ")")) (== "==") (number_literal "6")) () ")")) (compound_statement "{\n      uVar2 = puVar6[3];\n      iVar1 = *(int *)(uVar2 + 0x18);\n      while ((puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6))) {\n        uVar2 = puVar6[3];\n        iVar1 = *(int *)(uVar2 + 0x18);\n      }\n    }" ({ "{") (expression_statement "uVar2 = puVar6[3];" (assignment_expression "uVar2 = puVar6[3]" (identifier "uVar2") (= "=") (subscript_expression "puVar6[3]" (identifier "puVar6") ([ "[") (number_literal "3") (] "]"))) (; ";")) (expression_statement "iVar1 = *(int *)(uVar2 + 0x18);" (assignment_expression "iVar1 = *(int *)(uVar2 + 0x18)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(uVar2 + 0x18)" (* "*") (cast_expression "(int *)(uVar2 + 0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar2 + 0x18)" (( "(") (binary_expression "uVar2 + 0x18" (identifier "uVar2") (+ "+") (number_literal "0x18")) () ")"))))) (; ";")) (while_statement "while ((puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6))) {\n        uVar2 = puVar6[3];\n        iVar1 = *(int *)(uVar2 + 0x18);\n      }" (while "while") (parenthesized_expression "((puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6)))" (( "(") (parenthesized_expression "(puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6))" (( "(") (comma_expression "puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6)" (assignment_expression "puVar3 = puVar6" (identifier "puVar3") (= "=") (identifier "puVar6")) (, ",") (comma_expression "puVar6 = puVar3, iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6)" (assignment_expression "puVar6 = puVar3" (identifier "puVar6") (= "=") (identifier "puVar3")) (, ",") (binary_expression "iVar1 == 0x3b &&\n             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6)" (binary_expression "iVar1 == 0x3b" (identifier "iVar1") (== "==") (number_literal "0x3b")) (&& "&&") (parenthesized_expression "(puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6)" (( "(") (comma_expression "puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6" (assignment_expression "puVar6 = *(ulong **)(uVar2 + 0x10)" (identifier "puVar6") (= "=") (pointer_expression "*(ulong **)(uVar2 + 0x10)" (* "*") (cast_expression "(ulong **)(uVar2 + 0x10)" (( "(") (type_descriptor "ulong **" (type_identifier "ulong") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(uVar2 + 0x10)" (( "(") (binary_expression "uVar2 + 0x10" (identifier "uVar2") (+ "+") (number_literal "0x10")) () ")"))))) (, ",") (comma_expression "puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6" (assignment_expression "puVar5 = puVar3" (identifier "puVar5") (= "=") (identifier "puVar3")) (, ",") (binary_expression "(*puVar6 & 0x1ffffffff) == 6" (parenthesized_expression "(*puVar6 & 0x1ffffffff)" (( "(") (binary_expression "*puVar6 & 0x1ffffffff" (pointer_expression "*puVar6" (* "*") (identifier "puVar6")) (& "&") (number_literal "0x1ffffffff")) () ")")) (== "==") (number_literal "6")))) () ")"))))) () ")")) () ")")) (compound_statement "{\n        uVar2 = puVar6[3];\n        iVar1 = *(int *)(uVar2 + 0x18);\n      }" ({ "{") (expression_statement "uVar2 = puVar6[3];" (assignment_expression "uVar2 = puVar6[3]" (identifier "uVar2") (= "=") (subscript_expression "puVar6[3]" (identifier "puVar6") ([ "[") (number_literal "3") (] "]"))) (; ";")) (expression_statement "iVar1 = *(int *)(uVar2 + 0x18);" (assignment_expression "iVar1 = *(int *)(uVar2 + 0x18)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(uVar2 + 0x18)" (* "*") (cast_expression "(int *)(uVar2 + 0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar2 + 0x18)" (( "(") (binary_expression "uVar2 + 0x18" (identifier "uVar2") (+ "+") (number_literal "0x18")) () ")"))))) (; ";")) (} "}"))) (} "}"))) (expression_statement "uVar4 = command_connect(puVar6);" (assignment_expression "uVar4 = command_connect(puVar6)" (identifier "uVar4") (= "=") (call_expression "command_connect(puVar6)" (identifier "command_connect") (argument_list "(puVar6)" (( "(") (identifier "puVar6") () ")")))) (; ";")) (expression_statement "*(undefined8 *)(puVar5[3] + 0x10) = uVar4;" (assignment_expression "*(undefined8 *)(puVar5[3] + 0x10) = uVar4" (pointer_expression "*(undefined8 *)(puVar5[3] + 0x10)" (* "*") (cast_expression "(undefined8 *)(puVar5[3] + 0x10)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar5[3] + 0x10)" (( "(") (binary_expression "puVar5[3] + 0x10" (subscript_expression "puVar5[3]" (identifier "puVar5") ([ "[") (number_literal "3") (] "]")) (+ "+") (number_literal "0x10")) () ")")))) (= "=") (identifier "uVar4")) (; ";")) (} "}")))) (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}")))

type_1 * function_1(type_1 *command,type_1 *command2,int connector)

{
  int var_3;
  type_2 *pcVar2;
  type_1 *pCVar3;
  type_1 *var_1;
  type_1 *pCVar5;
  
  var_1 = ((command->value).Connection)->second;
  if (((var_1 == (type_1 *)0x0) || ((command->flags & 1) != 0)) ||
     (((command->value).Connection)->connector != 0x3b)) {
    command = var_2(command,command2,connector);
  }
  else {
    pCVar5 = command;
    if (((type_3  [32])*var_1 & (type_3  [32])0x1ffffffff) == (type_3  [32])0x6) {
      pcVar2 = (var_1->value).Connection;
      var_3 = pcVar2->connector;
      while ((pCVar3 = var_1, var_1 = pCVar3, var_3 == 0x3b &&
             (var_1 = pcVar2->second, pCVar5 = pCVar3,
             ((type_3  [32])*var_1 & (type_3  [32])0x1ffffffff) == (type_3  [32])0x6)))
      {
        pcVar2 = (var_1->value).Connection;
        var_3 = pcVar2->connector;
      }
    }
    var_1 = var_2(var_1,command2,connector);
    ((pCVar5->value).While)->action = var_1;
  }
  return command;
}


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

ulong * MASKED(ulong *param_1)

{
  int iVar1;
  ulong uVar2;
  ulong *puVar3;
  undefined8 uVar4;
  ulong *puVar5;
  ulong *puVar6;
  
  puVar6 = *(ulong **)(param_1[3] + 0x10);
  if (((puVar6 == (ulong *)0x0) || ((*param_1 & 0x100000000) != 0)) ||
     (*(int *)(param_1[3] + 0x18) != 0x3b)) {
    param_1 = (ulong *)command_connect(param_1);
  }
  else {
    puVar5 = param_1;
    if ((*puVar6 & 0x1ffffffff) == 6) {
      uVar2 = puVar6[3];
      iVar1 = *(int *)(uVar2 + 0x18);
      while ((puVar3 = puVar6, puVar6 = puVar3, iVar1 == 0x3b &&
             (puVar6 = *(ulong **)(uVar2 + 0x10), puVar5 = puVar3, (*puVar6 & 0x1ffffffff) == 6))) {
        uVar2 = puVar6[3];
        iVar1 = *(int *)(uVar2 + 0x18);
      }
    }
    uVar4 = command_connect(puVar6);
    *(undefined8 *)(puVar5[3] + 0x10) = uVar4;
  }
  return param_1;
}

