
/* WARNING: Type propagation algorithm not settling */

reg_errcode_t __regparm3
duplicate_node_closure
          (re_dfa_t *dfa,Idx top_org_node,Idx top_clone_node,Idx root_node,uint init_constraint)

{
  re_token_t *prVar1;
  re_node_set *prVar2;
  int elem;
  int iVar3;
  _Bool _Var4;
  bool bVar5;
  Idx IVar6;
  Idx elem_00;
  reg_errcode_t rVar7;
  re_token_t *prVar8;
  re_node_set *set;
  int iVar9;
  
  do {
    while( true ) {
      prVar1 = dfa->nodes;
      prVar2 = dfa->edests;
      if (prVar1[top_org_node].field_0x4 != '\x04') break;
      IVar6 = dfa->nexts[top_org_node];
      prVar2[top_clone_node].nelem = 0;
      elem_00 = duplicate_node(dfa,IVar6,init_constraint);
      if (elem_00 == -1) {
        return _REG_ESPACE;
      }
      dfa->nexts[top_clone_node] = dfa->nexts[top_org_node];
      _Var4 = re_node_set_insert(dfa->edests + top_clone_node,elem_00);
      top_clone_node = elem_00;
      top_org_node = IVar6;
      if (!_Var4) {
        return _REG_ESPACE;
      }
    }
    iVar9 = prVar2[top_org_node].nelem;
    if (iVar9 == 0) {
      dfa->nexts[top_clone_node] = dfa->nexts[top_org_node];
      return _REG_NOERROR;
    }
    set = prVar2 + top_clone_node;
    elem = *prVar2[top_org_node].elems;
    set->nelem = 0;
    if (iVar9 == 1) {
      if ((top_org_node == root_node) && (top_org_node != top_clone_node)) {
        _Var4 = re_node_set_insert(set,elem);
        if (!_Var4) {
          return _REG_ESPACE;
        }
        return _REG_NOERROR;
      }
      init_constraint = init_constraint | *(uint *)&prVar1[top_org_node].field_0x4 >> 8 & 0x3ff;
      IVar6 = duplicate_node(dfa,elem,init_constraint);
      if (IVar6 == -1) {
        return _REG_ESPACE;
      }
      bVar5 = re_node_set_insert(dfa->edests + top_clone_node,IVar6);
    }
    else {
      iVar9 = dfa->nodes_len - 1;
      prVar8 = prVar1 + iVar9;
      if (((prVar8->field_0x6 & 4) != 0) && (0 < iVar9)) {
        iVar3 = dfa->nodes_len * 8 - (int)prVar8;
        do {
          if ((dfa->org_indices[iVar9] == elem) &&
             (init_constraint == (*(uint *)&prVar8->field_0x4 >> 8 & 0x3ff))) {
            _Var4 = re_node_set_insert(set,iVar9);
            if (!_Var4) {
              return _REG_ESPACE;
            }
            goto LAB_00022ad1;
          }
          prVar8 = (re_token_t *)((int)prVar8 + (int)prVar1 + iVar3 + -0x10);
          iVar9 = iVar9 + -1;
        } while (((prVar8->field_0x6 & 4) != 0) && (0 < iVar9));
      }
      IVar6 = duplicate_node(dfa,elem,init_constraint);
      if (IVar6 == -1) {
        return _REG_ESPACE;
      }
      _Var4 = re_node_set_insert(dfa->edests + top_clone_node,IVar6);
      if (!_Var4) {
        return _REG_ESPACE;
      }
      rVar7 = duplicate_node_closure(dfa,elem,IVar6,root_node,init_constraint);
      if (rVar7 != _REG_NOERROR) {
        return rVar7;
      }
LAB_00022ad1:
      elem = dfa->edests[top_org_node].elems[1];
      IVar6 = duplicate_node(dfa,elem,init_constraint);
      if (IVar6 == -1) {
        return _REG_ESPACE;
      }
      bVar5 = re_node_set_insert(dfa->edests + top_clone_node,IVar6);
    }
    top_clone_node = IVar6;
    top_org_node = elem;
    if (!bVar5) {
      return _REG_ESPACE;
    }
  } while( true );
}



int __regparm3 FUN_000229f0(int *param_1,int param_2,int param_3,int param_4,uint param_5)

{
  int iVar1;
  char cVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  
  do {
    while( true ) {
      iVar7 = *param_1;
      iVar4 = param_1[5];
      iVar5 = iVar7 + param_2 * 8;
      if (*(char *)(iVar5 + 4) != '\x04') break;
      iVar5 = param_2 * 4;
      param_2 = *(int *)(param_1[3] + param_2 * 4);
      *(undefined4 *)(iVar4 + 4 + param_3 * 0xc) = 0;
      iVar7 = FUN_00022950();
      if (iVar7 == -1) {
        return 0xc;
      }
      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar5);
      cVar2 = FUN_00021a30(param_3 * 0xc + param_1[5],iVar7);
      param_3 = iVar7;
      if (cVar2 == '\0') {
        return 0xc;
      }
    }
    iVar1 = iVar4 + param_2 * 0xc;
    iVar3 = *(int *)(iVar1 + 4);
    if (iVar3 == 0) {
      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);
      return 0;
    }
    iVar6 = param_3 * 0xc;
    iVar4 = iVar4 + iVar6;
    iVar1 = **(int **)(iVar1 + 8);
    *(undefined4 *)(iVar4 + 4) = 0;
    if (iVar3 == 1) {
      if ((param_2 == param_4) && (param_2 != param_3)) {
        cVar2 = FUN_00021a30(iVar4,iVar1);
        if (cVar2 == '\0') {
          return 0xc;
        }
        return 0;
      }
      param_5 = param_5 | *(uint *)(iVar5 + 4) >> 8 & 0x3ff;
      param_3 = FUN_00022950();
      if (param_3 == -1) {
        return 0xc;
      }
      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);
      param_2 = iVar1;
    }
    else {
      iVar5 = param_1[2] + -1;
      iVar3 = iVar7 + iVar5 * 8;
      if (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)) {
        iVar7 = (iVar7 + param_1[2] * 8) - iVar3;
        do {
          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&
             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {
            cVar2 = FUN_00021a30(iVar4,iVar5);
            if (cVar2 == '\0') {
              return 0xc;
            }
            goto LAB_00022ad1;
          }
          iVar3 = iVar3 + iVar7 + -0x10;
          iVar5 = iVar5 + -1;
        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));
      }
      iVar5 = FUN_00022950();
      if (iVar5 == -1) {
        return 0xc;
      }
      cVar2 = FUN_00021a30(iVar6 + param_1[5],iVar5);
      if (cVar2 == '\0') {
        return 0xc;
      }
      iVar5 = FUN_000229f0(param_4,param_5);
      if (iVar5 != 0) {
        return iVar5;
      }
LAB_00022ad1:
      param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4);
      param_3 = FUN_00022950();
      if (param_3 == -1) {
        return 0xc;
      }
      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);
    }
    if (cVar2 == '\0') {
      return 0xc;
    }
  } while( true );
}


PUSH EBP
MOV EBP,ECX
PUSH EDI
MOV EDI,EDX
PUSH ESI
MOV ESI,EAX
PUSH EBX
SUB ESP,0x2c
MOV EAX,dword ptr [ESI]
MOV EDX,dword ptr [ESI + 0x14]
MOV EBX,EBP
MOV dword ptr [ESP + 0x14],EAX
LEA EAX,[EAX + EDI*0x8]
CMP byte ptr [EAX + 0x4],0x4
MOV dword ptr [ESP + 0x18],EAX
JZ 0x00022b78
LEA EAX,[EDI + EDI*0x2]
SHL EAX,0x2
LEA ECX,[EDX + EAX*0x1]
MOV dword ptr [ESP + 0x1c],EAX
MOV EAX,dword ptr [ECX + 0x4]
TEST EAX,EAX
JZ 0x00022c48
LEA EBX,[EBP + EBP*0x2]
SHL EBX,0x2
ADD EDX,EBX
CMP EAX,0x1
MOV dword ptr [ESP + 0x10],EBX
MOV dword ptr [ESP + 0xc],EDX
MOV EDX,dword ptr [ECX + 0x8]
MOV EAX,dword ptr [ESP + 0xc]
MOV EBX,dword ptr [EDX]
MOV dword ptr [EAX + 0x4],0x0
JZ 0x00022b20
MOV EAX,dword ptr [ESI + 0x8]
MOV EBP,dword ptr [ESP + 0x14]
LEA EDX,[EAX + -0x1]
LEA ECX,[EBP + EDX*0x8]
TEST byte ptr [ECX + 0x6],0x4
JZ 0x00022be8
TEST EDX,EDX
JLE 0x00022be8
LEA EBP,[EBP + EAX*0x8]
MOV EDI,dword ptr [ESI + 0x10]
SUB EBP,ECX
SUB EBP,0x10
JMP 0x00022aa7
ADD ECX,EBP
SUB EDX,0x1
TEST byte ptr [ECX + 0x6],0x4
JZ 0x00022be8
TEST EDX,EDX
JLE 0x00022be8
CMP dword ptr [EDI + EDX*0x4],EBX
JNZ 0x00022a90
MOV EAX,dword ptr [ECX + 0x4]
SHR EAX,0x8
AND EAX,0x3ff
CMP dword ptr [ESP + 0x44],EAX
JNZ 0x00022a90
SUB ESP,0x8
PUSH EDX
PUSH dword ptr [ESP + 0x18]
CALL 0x00021a30
ADD ESP,0x10
TEST AL,AL
JZ 0x00022b10
MOV EDI,dword ptr [ESP + 0x1c]
MOV EAX,dword ptr [ESI + 0x14]
MOV ECX,dword ptr [ESP + 0x44]
MOV EAX,dword ptr [EAX + EDI*0x1 + 0x8]
MOV EDI,dword ptr [EAX + 0x4]
MOV EAX,ESI
MOV EDX,EDI
CALL 0x00022950
MOV EBP,EAX
CMP EAX,-0x1
JZ 0x00022b10
SUB ESP,0x8
PUSH EAX
MOV EBX,dword ptr [ESP + 0x1c]
ADD EBX,dword ptr [ESI + 0x14]
PUSH EBX
CALL 0x00021a30
ADD ESP,0x10
TEST AL,AL
JNZ 0x000229fd
NOP
MOV EAX,0xc
ADD ESP,0x2c
POP EBX
POP ESI
POP EDI
POP EBP
RET
CMP EDI,dword ptr [ESP + 0x40]
JNZ 0x00022b2e
CMP EDI,EBP
JNZ 0x00022c56
MOV EAX,dword ptr [ESP + 0x18]
MOV EDX,EBX
MOV EAX,dword ptr [EAX + 0x4]
SHR EAX,0x8
AND EAX,0x3ff
OR dword ptr [ESP + 0x44],EAX
MOV ECX,dword ptr [ESP + 0x44]
MOV EAX,ESI
CALL 0x00022950
MOV EBP,EAX
CMP EAX,-0x1
JZ 0x00022b10
SUB ESP,0x8
PUSH EAX
MOV EAX,dword ptr [ESP + 0x1c]
ADD EAX,dword ptr [ESI + 0x14]
PUSH EAX
CALL 0x00021a30
ADD ESP,0x10
TEST AL,AL
JZ 0x00022b10
MOV EDI,EBX
JMP 0x000229fd
LEA EAX,[EDI*0x4 + 0x0]
MOV ECX,dword ptr [ESP + 0x44]
MOV dword ptr [ESP + 0xc],EAX
MOV EAX,dword ptr [ESI + 0xc]
MOV EDI,dword ptr [EAX + EDI*0x4]
LEA EAX,[EBP + EBP*0x2]
SHL EAX,0x2
MOV dword ptr [EDX + EAX*0x1 + 0x4],0x0
MOV EDX,EDI
MOV dword ptr [ESP + 0x10],EAX
MOV EAX,ESI
CALL 0x00022950
MOV EBP,EAX
CMP EAX,-0x1
JZ 0x00022b10
MOV ECX,dword ptr [ESP + 0xc]
MOV EAX,dword ptr [ESI + 0xc]
SUB ESP,0x8
MOV EDX,dword ptr [EAX + ECX*0x1]
MOV dword ptr [EAX + EBX*0x4],EDX
PUSH EBP
MOV EAX,dword ptr [ESP + 0x1c]
ADD EAX,dword ptr [ESI + 0x14]
PUSH EAX
CALL 0x00021a30
ADD ESP,0x10
TEST AL,AL
JNZ 0x000229fd
JMP 0x00022b10
MOV ECX,dword ptr [ESP + 0x44]
MOV EDX,EBX
MOV EAX,ESI
CALL 0x00022950
MOV EDI,EAX
CMP EAX,-0x1
JZ 0x00022b10
SUB ESP,0x8
PUSH EDI
MOV EAX,dword ptr [ESP + 0x1c]
ADD EAX,dword ptr [ESI + 0x14]
PUSH EAX
CALL 0x00021a30
ADD ESP,0x10
TEST AL,AL
JZ 0x00022b10
SUB ESP,0x8
MOV ECX,EDI
MOV EDX,EBX
MOV EAX,ESI
PUSH dword ptr [ESP + 0x4c]
PUSH dword ptr [ESP + 0x4c]
CALL 0x000229f0
ADD ESP,0x10
TEST EAX,EAX
JZ 0x00022ad1
JMP 0x00022b15
MOV EDX,dword ptr [ESI + 0xc]
MOV ECX,dword ptr [EDX + EDI*0x4]
MOV dword ptr [EDX + EBP*0x4],ECX
JMP 0x00022b15
SUB ESP,0x8
PUSH EBX
PUSH dword ptr [ESP + 0x18]
CALL 0x00021a30
ADD ESP,0x10
MOV EDX,EAX
XOR EAX,EAX
TEST DL,DL
JNZ 0x00022b15
JMP 0x00022b10
(translation_unit "int __regparm3 FUN_000229f0(int *param_1,int param_2,int param_3,int param_4,uint param_5)\n\n{\n  int iVar1;\n  char cVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  int iVar7;\n  \n  do {\n    while( true ) {\n      iVar7 = *param_1;\n      iVar4 = param_1[5];\n      iVar5 = iVar7 + param_2 * 8;\n      if (*(char *)(iVar5 + 4) != '\x04') break;\n      iVar5 = param_2 * 4;\n      param_2 = *(int *)(param_1[3] + param_2 * 4);\n      *(undefined4 *)(iVar4 + 4 + param_3 * 0xc) = 0;\n      iVar7 = FUN_00022950();\n      if (iVar7 == -1) {\n        return 0xc;\n      }\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar5);\n      cVar2 = FUN_00021a30(param_3 * 0xc + param_1[5],iVar7);\n      param_3 = iVar7;\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n    }\n    iVar1 = iVar4 + param_2 * 0xc;\n    iVar3 = *(int *)(iVar1 + 4);\n    if (iVar3 == 0) {\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n      return 0;\n    }\n    iVar6 = param_3 * 0xc;\n    iVar4 = iVar4 + iVar6;\n    iVar1 = **(int **)(iVar1 + 8);\n    *(undefined4 *)(iVar4 + 4) = 0;\n    if (iVar3 == 1) {\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        cVar2 = FUN_00021a30(iVar4,iVar1);\n        if (cVar2 == '\0') {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | *(uint *)(iVar5 + 4) >> 8 & 0x3ff;\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n      param_2 = iVar1;\n    }\n    else {\n      iVar5 = param_1[2] + -1;\n      iVar3 = iVar7 + iVar5 * 8;\n      if (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)) {\n        iVar7 = (iVar7 + param_1[2] * 8) - iVar3;\n        do {\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));\n      }\n      iVar5 = FUN_00022950();\n      if (iVar5 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],iVar5);\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n      iVar5 = FUN_000229f0(param_4,param_5);\n      if (iVar5 != 0) {\n        return iVar5;\n      }\nLAB_00022ad1:\n      param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4);\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n    }\n    if (cVar2 == '\0') {\n      return 0xc;\n    }\n  } while( true );\n}\n\n" (function_definition "int __regparm3 FUN_000229f0(int *param_1,int param_2,int param_3,int param_4,uint param_5)\n\n{\n  int iVar1;\n  char cVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  int iVar7;\n  \n  do {\n    while( true ) {\n      iVar7 = *param_1;\n      iVar4 = param_1[5];\n      iVar5 = iVar7 + param_2 * 8;\n      if (*(char *)(iVar5 + 4) != '\x04') break;\n      iVar5 = param_2 * 4;\n      param_2 = *(int *)(param_1[3] + param_2 * 4);\n      *(undefined4 *)(iVar4 + 4 + param_3 * 0xc) = 0;\n      iVar7 = FUN_00022950();\n      if (iVar7 == -1) {\n        return 0xc;\n      }\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar5);\n      cVar2 = FUN_00021a30(param_3 * 0xc + param_1[5],iVar7);\n      param_3 = iVar7;\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n    }\n    iVar1 = iVar4 + param_2 * 0xc;\n    iVar3 = *(int *)(iVar1 + 4);\n    if (iVar3 == 0) {\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n      return 0;\n    }\n    iVar6 = param_3 * 0xc;\n    iVar4 = iVar4 + iVar6;\n    iVar1 = **(int **)(iVar1 + 8);\n    *(undefined4 *)(iVar4 + 4) = 0;\n    if (iVar3 == 1) {\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        cVar2 = FUN_00021a30(iVar4,iVar1);\n        if (cVar2 == '\0') {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | *(uint *)(iVar5 + 4) >> 8 & 0x3ff;\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n      param_2 = iVar1;\n    }\n    else {\n      iVar5 = param_1[2] + -1;\n      iVar3 = iVar7 + iVar5 * 8;\n      if (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)) {\n        iVar7 = (iVar7 + param_1[2] * 8) - iVar3;\n        do {\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));\n      }\n      iVar5 = FUN_00022950();\n      if (iVar5 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],iVar5);\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n      iVar5 = FUN_000229f0(param_4,param_5);\n      if (iVar5 != 0) {\n        return iVar5;\n      }\nLAB_00022ad1:\n      param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4);\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n    }\n    if (cVar2 == '\0') {\n      return 0xc;\n    }\n  } while( true );\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_000229f0(int *param_1,int param_2,int param_3,int param_4,uint param_5)" identifier (parameter_list "(int *param_1,int param_2,int param_3,int param_4,uint param_5)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int param_4" primitive_type identifier) , (parameter_declaration "uint param_5" type_identifier identifier) ))) (compound_statement "{\n  int iVar1;\n  char cVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  int iVar7;\n  \n  do {\n    while( true ) {\n      iVar7 = *param_1;\n      iVar4 = param_1[5];\n      iVar5 = iVar7 + param_2 * 8;\n      if (*(char *)(iVar5 + 4) != '\x04') break;\n      iVar5 = param_2 * 4;\n      param_2 = *(int *)(param_1[3] + param_2 * 4);\n      *(undefined4 *)(iVar4 + 4 + param_3 * 0xc) = 0;\n      iVar7 = FUN_00022950();\n      if (iVar7 == -1) {\n        return 0xc;\n      }\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar5);\n      cVar2 = FUN_00021a30(param_3 * 0xc + param_1[5],iVar7);\n      param_3 = iVar7;\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n    }\n    iVar1 = iVar4 + param_2 * 0xc;\n    iVar3 = *(int *)(iVar1 + 4);\n    if (iVar3 == 0) {\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n      return 0;\n    }\n    iVar6 = param_3 * 0xc;\n    iVar4 = iVar4 + iVar6;\n    iVar1 = **(int **)(iVar1 + 8);\n    *(undefined4 *)(iVar4 + 4) = 0;\n    if (iVar3 == 1) {\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        cVar2 = FUN_00021a30(iVar4,iVar1);\n        if (cVar2 == '\0') {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | *(uint *)(iVar5 + 4) >> 8 & 0x3ff;\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n      param_2 = iVar1;\n    }\n    else {\n      iVar5 = param_1[2] + -1;\n      iVar3 = iVar7 + iVar5 * 8;\n      if (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)) {\n        iVar7 = (iVar7 + param_1[2] * 8) - iVar3;\n        do {\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));\n      }\n      iVar5 = FUN_00022950();\n      if (iVar5 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],iVar5);\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n      iVar5 = FUN_000229f0(param_4,param_5);\n      if (iVar5 != 0) {\n        return iVar5;\n      }\nLAB_00022ad1:\n      param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4);\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n    }\n    if (cVar2 == '\0') {\n      return 0xc;\n    }\n  } while( true );\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (do_statement "do {\n    while( true ) {\n      iVar7 = *param_1;\n      iVar4 = param_1[5];\n      iVar5 = iVar7 + param_2 * 8;\n      if (*(char *)(iVar5 + 4) != '\x04') break;\n      iVar5 = param_2 * 4;\n      param_2 = *(int *)(param_1[3] + param_2 * 4);\n      *(undefined4 *)(iVar4 + 4 + param_3 * 0xc) = 0;\n      iVar7 = FUN_00022950();\n      if (iVar7 == -1) {\n        return 0xc;\n      }\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar5);\n      cVar2 = FUN_00021a30(param_3 * 0xc + param_1[5],iVar7);\n      param_3 = iVar7;\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n    }\n    iVar1 = iVar4 + param_2 * 0xc;\n    iVar3 = *(int *)(iVar1 + 4);\n    if (iVar3 == 0) {\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n      return 0;\n    }\n    iVar6 = param_3 * 0xc;\n    iVar4 = iVar4 + iVar6;\n    iVar1 = **(int **)(iVar1 + 8);\n    *(undefined4 *)(iVar4 + 4) = 0;\n    if (iVar3 == 1) {\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        cVar2 = FUN_00021a30(iVar4,iVar1);\n        if (cVar2 == '\0') {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | *(uint *)(iVar5 + 4) >> 8 & 0x3ff;\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n      param_2 = iVar1;\n    }\n    else {\n      iVar5 = param_1[2] + -1;\n      iVar3 = iVar7 + iVar5 * 8;\n      if (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)) {\n        iVar7 = (iVar7 + param_1[2] * 8) - iVar3;\n        do {\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));\n      }\n      iVar5 = FUN_00022950();\n      if (iVar5 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],iVar5);\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n      iVar5 = FUN_000229f0(param_4,param_5);\n      if (iVar5 != 0) {\n        return iVar5;\n      }\nLAB_00022ad1:\n      param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4);\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n    }\n    if (cVar2 == '\0') {\n      return 0xc;\n    }\n  } while( true );" do (compound_statement "{\n    while( true ) {\n      iVar7 = *param_1;\n      iVar4 = param_1[5];\n      iVar5 = iVar7 + param_2 * 8;\n      if (*(char *)(iVar5 + 4) != '\x04') break;\n      iVar5 = param_2 * 4;\n      param_2 = *(int *)(param_1[3] + param_2 * 4);\n      *(undefined4 *)(iVar4 + 4 + param_3 * 0xc) = 0;\n      iVar7 = FUN_00022950();\n      if (iVar7 == -1) {\n        return 0xc;\n      }\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar5);\n      cVar2 = FUN_00021a30(param_3 * 0xc + param_1[5],iVar7);\n      param_3 = iVar7;\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n    }\n    iVar1 = iVar4 + param_2 * 0xc;\n    iVar3 = *(int *)(iVar1 + 4);\n    if (iVar3 == 0) {\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n      return 0;\n    }\n    iVar6 = param_3 * 0xc;\n    iVar4 = iVar4 + iVar6;\n    iVar1 = **(int **)(iVar1 + 8);\n    *(undefined4 *)(iVar4 + 4) = 0;\n    if (iVar3 == 1) {\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        cVar2 = FUN_00021a30(iVar4,iVar1);\n        if (cVar2 == '\0') {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | *(uint *)(iVar5 + 4) >> 8 & 0x3ff;\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n      param_2 = iVar1;\n    }\n    else {\n      iVar5 = param_1[2] + -1;\n      iVar3 = iVar7 + iVar5 * 8;\n      if (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)) {\n        iVar7 = (iVar7 + param_1[2] * 8) - iVar3;\n        do {\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));\n      }\n      iVar5 = FUN_00022950();\n      if (iVar5 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],iVar5);\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n      iVar5 = FUN_000229f0(param_4,param_5);\n      if (iVar5 != 0) {\n        return iVar5;\n      }\nLAB_00022ad1:\n      param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4);\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n    }\n    if (cVar2 == '\0') {\n      return 0xc;\n    }\n  }" { (while_statement "while( true ) {\n      iVar7 = *param_1;\n      iVar4 = param_1[5];\n      iVar5 = iVar7 + param_2 * 8;\n      if (*(char *)(iVar5 + 4) != '\x04') break;\n      iVar5 = param_2 * 4;\n      param_2 = *(int *)(param_1[3] + param_2 * 4);\n      *(undefined4 *)(iVar4 + 4 + param_3 * 0xc) = 0;\n      iVar7 = FUN_00022950();\n      if (iVar7 == -1) {\n        return 0xc;\n      }\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar5);\n      cVar2 = FUN_00021a30(param_3 * 0xc + param_1[5],iVar7);\n      param_3 = iVar7;\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      iVar7 = *param_1;\n      iVar4 = param_1[5];\n      iVar5 = iVar7 + param_2 * 8;\n      if (*(char *)(iVar5 + 4) != '\x04') break;\n      iVar5 = param_2 * 4;\n      param_2 = *(int *)(param_1[3] + param_2 * 4);\n      *(undefined4 *)(iVar4 + 4 + param_3 * 0xc) = 0;\n      iVar7 = FUN_00022950();\n      if (iVar7 == -1) {\n        return 0xc;\n      }\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar5);\n      cVar2 = FUN_00021a30(param_3 * 0xc + param_1[5],iVar7);\n      param_3 = iVar7;\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n    }" { (expression_statement "iVar7 = *param_1;" (assignment_expression "iVar7 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "iVar4 = param_1[5];" (assignment_expression "iVar4 = param_1[5]" identifier = (subscript_expression "param_1[5]" identifier [ number_literal ])) ;) (expression_statement "iVar5 = iVar7 + param_2 * 8;" (assignment_expression "iVar5 = iVar7 + param_2 * 8" identifier = (binary_expression "iVar7 + param_2 * 8" identifier + (binary_expression "param_2 * 8" identifier * number_literal))) ;) (if_statement "if (*(char *)(iVar5 + 4) != '\x04') break;" if (parenthesized_expression "(*(char *)(iVar5 + 4) != '\x04')" ( (binary_expression "*(char *)(iVar5 + 4) != '\x04'" (pointer_expression "*(char *)(iVar5 + 4)" * (cast_expression "(char *)(iVar5 + 4)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 4)" ( (binary_expression "iVar5 + 4" identifier + number_literal) )))) != (char_literal "'\x04'" ' escape_sequence ')) )) (break_statement "break;" break ;)) (expression_statement "iVar5 = param_2 * 4;" (assignment_expression "iVar5 = param_2 * 4" identifier = (binary_expression "param_2 * 4" identifier * number_literal)) ;) (expression_statement "param_2 = *(int *)(param_1[3] + param_2 * 4);" (assignment_expression "param_2 = *(int *)(param_1[3] + param_2 * 4)" identifier = (pointer_expression "*(int *)(param_1[3] + param_2 * 4)" * (cast_expression "(int *)(param_1[3] + param_2 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[3] + param_2 * 4)" ( (binary_expression "param_1[3] + param_2 * 4" (subscript_expression "param_1[3]" identifier [ number_literal ]) + (binary_expression "param_2 * 4" identifier * number_literal)) ))))) ;) (expression_statement "*(undefined4 *)(iVar4 + 4 + param_3 * 0xc) = 0;" (assignment_expression "*(undefined4 *)(iVar4 + 4 + param_3 * 0xc) = 0" (pointer_expression "*(undefined4 *)(iVar4 + 4 + param_3 * 0xc)" * (cast_expression "(undefined4 *)(iVar4 + 4 + param_3 * 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 4 + param_3 * 0xc)" ( (binary_expression "iVar4 + 4 + param_3 * 0xc" (binary_expression "iVar4 + 4" identifier + number_literal) + (binary_expression "param_3 * 0xc" identifier * number_literal)) )))) = number_literal) ;) (expression_statement "iVar7 = FUN_00022950();" (assignment_expression "iVar7 = FUN_00022950()" identifier = (call_expression "FUN_00022950()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar7 == -1) {\n        return 0xc;\n      }" if (parenthesized_expression "(iVar7 == -1)" ( (binary_expression "iVar7 == -1" identifier == number_literal) )) (compound_statement "{\n        return 0xc;\n      }" { (return_statement "return 0xc;" return number_literal ;) })) (expression_statement "*(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar5);" (assignment_expression "*(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar5)" (pointer_expression "*(undefined4 *)(param_1[3] + param_3 * 4)" * (cast_expression "(undefined4 *)(param_1[3] + param_3 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[3] + param_3 * 4)" ( (binary_expression "param_1[3] + param_3 * 4" (subscript_expression "param_1[3]" identifier [ number_literal ]) + (binary_expression "param_3 * 4" identifier * number_literal)) )))) = (pointer_expression "*(undefined4 *)(param_1[3] + iVar5)" * (cast_expression "(undefined4 *)(param_1[3] + iVar5)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[3] + iVar5)" ( (binary_expression "param_1[3] + iVar5" (subscript_expression "param_1[3]" identifier [ number_literal ]) + identifier) ))))) ;) (expression_statement "cVar2 = FUN_00021a30(param_3 * 0xc + param_1[5],iVar7);" (assignment_expression "cVar2 = FUN_00021a30(param_3 * 0xc + param_1[5],iVar7)" identifier = (call_expression "FUN_00021a30(param_3 * 0xc + param_1[5],iVar7)" identifier (argument_list "(param_3 * 0xc + param_1[5],iVar7)" ( (binary_expression "param_3 * 0xc + param_1[5]" (binary_expression "param_3 * 0xc" identifier * number_literal) + (subscript_expression "param_1[5]" identifier [ number_literal ])) , identifier )))) ;) (expression_statement "param_3 = iVar7;" (assignment_expression "param_3 = iVar7" identifier = identifier) ;) (if_statement "if (cVar2 == '\0') {\n        return 0xc;\n      }" if (parenthesized_expression "(cVar2 == '\0')" ( (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        return 0xc;\n      }" { (return_statement "return 0xc;" return number_literal ;) })) })) (expression_statement "iVar1 = iVar4 + param_2 * 0xc;" (assignment_expression "iVar1 = iVar4 + param_2 * 0xc" identifier = (binary_expression "iVar4 + param_2 * 0xc" identifier + (binary_expression "param_2 * 0xc" identifier * number_literal))) ;) (expression_statement "iVar3 = *(int *)(iVar1 + 4);" (assignment_expression "iVar3 = *(int *)(iVar1 + 4)" identifier = (pointer_expression "*(int *)(iVar1 + 4)" * (cast_expression "(int *)(iVar1 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 4)" ( (binary_expression "iVar1 + 4" identifier + number_literal) ))))) ;) (if_statement "if (iVar3 == 0) {\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n      return 0;\n    }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n      return 0;\n    }" { (expression_statement "*(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);" (assignment_expression "*(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4)" (pointer_expression "*(undefined4 *)(param_1[3] + param_3 * 4)" * (cast_expression "(undefined4 *)(param_1[3] + param_3 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[3] + param_3 * 4)" ( (binary_expression "param_1[3] + param_3 * 4" (subscript_expression "param_1[3]" identifier [ number_literal ]) + (binary_expression "param_3 * 4" identifier * number_literal)) )))) = (pointer_expression "*(undefined4 *)(param_1[3] + param_2 * 4)" * (cast_expression "(undefined4 *)(param_1[3] + param_2 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[3] + param_2 * 4)" ( (binary_expression "param_1[3] + param_2 * 4" (subscript_expression "param_1[3]" identifier [ number_literal ]) + (binary_expression "param_2 * 4" identifier * number_literal)) ))))) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar6 = param_3 * 0xc;" (assignment_expression "iVar6 = param_3 * 0xc" identifier = (binary_expression "param_3 * 0xc" identifier * number_literal)) ;) (expression_statement "iVar4 = iVar4 + iVar6;" (assignment_expression "iVar4 = iVar4 + iVar6" identifier = (binary_expression "iVar4 + iVar6" identifier + identifier)) ;) (expression_statement "iVar1 = **(int **)(iVar1 + 8);" (assignment_expression "iVar1 = **(int **)(iVar1 + 8)" identifier = (pointer_expression "**(int **)(iVar1 + 8)" * (pointer_expression "*(int **)(iVar1 + 8)" * (cast_expression "(int **)(iVar1 + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar1 + 8)" ( (binary_expression "iVar1 + 8" identifier + number_literal) )))))) ;) (expression_statement "*(undefined4 *)(iVar4 + 4) = 0;" (assignment_expression "*(undefined4 *)(iVar4 + 4) = 0" (pointer_expression "*(undefined4 *)(iVar4 + 4)" * (cast_expression "(undefined4 *)(iVar4 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 4)" ( (binary_expression "iVar4 + 4" identifier + number_literal) )))) = number_literal) ;) (if_statement "if (iVar3 == 1) {\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        cVar2 = FUN_00021a30(iVar4,iVar1);\n        if (cVar2 == '\0') {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | *(uint *)(iVar5 + 4) >> 8 & 0x3ff;\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n      param_2 = iVar1;\n    }\n    else {\n      iVar5 = param_1[2] + -1;\n      iVar3 = iVar7 + iVar5 * 8;\n      if (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)) {\n        iVar7 = (iVar7 + param_1[2] * 8) - iVar3;\n        do {\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));\n      }\n      iVar5 = FUN_00022950();\n      if (iVar5 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],iVar5);\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n      iVar5 = FUN_000229f0(param_4,param_5);\n      if (iVar5 != 0) {\n        return iVar5;\n      }\nLAB_00022ad1:\n      param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4);\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n    }" if (parenthesized_expression "(iVar3 == 1)" ( (binary_expression "iVar3 == 1" identifier == number_literal) )) (compound_statement "{\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        cVar2 = FUN_00021a30(iVar4,iVar1);\n        if (cVar2 == '\0') {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | *(uint *)(iVar5 + 4) >> 8 & 0x3ff;\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n      param_2 = iVar1;\n    }" { (if_statement "if ((param_2 == param_4) && (param_2 != param_3)) {\n        cVar2 = FUN_00021a30(iVar4,iVar1);\n        if (cVar2 == '\0') {\n          return 0xc;\n        }\n        return 0;\n      }" if (parenthesized_expression "((param_2 == param_4) && (param_2 != param_3))" ( (binary_expression "(param_2 == param_4) && (param_2 != param_3)" (parenthesized_expression "(param_2 == param_4)" ( (binary_expression "param_2 == param_4" identifier == identifier) )) && (parenthesized_expression "(param_2 != param_3)" ( (binary_expression "param_2 != param_3" identifier != identifier) ))) )) (compound_statement "{\n        cVar2 = FUN_00021a30(iVar4,iVar1);\n        if (cVar2 == '\0') {\n          return 0xc;\n        }\n        return 0;\n      }" { (expression_statement "cVar2 = FUN_00021a30(iVar4,iVar1);" (assignment_expression "cVar2 = FUN_00021a30(iVar4,iVar1)" identifier = (call_expression "FUN_00021a30(iVar4,iVar1)" identifier (argument_list "(iVar4,iVar1)" ( identifier , identifier )))) ;) (if_statement "if (cVar2 == '\0') {\n          return 0xc;\n        }" if (parenthesized_expression "(cVar2 == '\0')" ( (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n          return 0xc;\n        }" { (return_statement "return 0xc;" return number_literal ;) })) (return_statement "return 0;" return number_literal ;) })) (expression_statement "param_5 = param_5 | *(uint *)(iVar5 + 4) >> 8 & 0x3ff;" (assignment_expression "param_5 = param_5 | *(uint *)(iVar5 + 4) >> 8 & 0x3ff" identifier = (binary_expression "param_5 | *(uint *)(iVar5 + 4) >> 8 & 0x3ff" identifier | (binary_expression "*(uint *)(iVar5 + 4) >> 8 & 0x3ff" (binary_expression "*(uint *)(iVar5 + 4) >> 8" (pointer_expression "*(uint *)(iVar5 + 4)" * (cast_expression "(uint *)(iVar5 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 4)" ( (binary_expression "iVar5 + 4" identifier + number_literal) )))) >> number_literal) & number_literal))) ;) (expression_statement "param_3 = FUN_00022950();" (assignment_expression "param_3 = FUN_00022950()" identifier = (call_expression "FUN_00022950()" identifier (argument_list "()" ( )))) ;) (if_statement "if (param_3 == -1) {\n        return 0xc;\n      }" if (parenthesized_expression "(param_3 == -1)" ( (binary_expression "param_3 == -1" identifier == number_literal) )) (compound_statement "{\n        return 0xc;\n      }" { (return_statement "return 0xc;" return number_literal ;) })) (expression_statement "cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);" (assignment_expression "cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3)" identifier = (call_expression "FUN_00021a30(iVar6 + param_1[5],param_3)" identifier (argument_list "(iVar6 + param_1[5],param_3)" ( (binary_expression "iVar6 + param_1[5]" identifier + (subscript_expression "param_1[5]" identifier [ number_literal ])) , identifier )))) ;) (expression_statement "param_2 = iVar1;" (assignment_expression "param_2 = iVar1" identifier = identifier) ;) }) (else_clause "else {\n      iVar5 = param_1[2] + -1;\n      iVar3 = iVar7 + iVar5 * 8;\n      if (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)) {\n        iVar7 = (iVar7 + param_1[2] * 8) - iVar3;\n        do {\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));\n      }\n      iVar5 = FUN_00022950();\n      if (iVar5 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],iVar5);\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n      iVar5 = FUN_000229f0(param_4,param_5);\n      if (iVar5 != 0) {\n        return iVar5;\n      }\nLAB_00022ad1:\n      param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4);\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n    }" else (compound_statement "{\n      iVar5 = param_1[2] + -1;\n      iVar3 = iVar7 + iVar5 * 8;\n      if (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)) {\n        iVar7 = (iVar7 + param_1[2] * 8) - iVar3;\n        do {\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));\n      }\n      iVar5 = FUN_00022950();\n      if (iVar5 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],iVar5);\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n      iVar5 = FUN_000229f0(param_4,param_5);\n      if (iVar5 != 0) {\n        return iVar5;\n      }\nLAB_00022ad1:\n      param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4);\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n    }" { (expression_statement "iVar5 = param_1[2] + -1;" (assignment_expression "iVar5 = param_1[2] + -1" identifier = (binary_expression "param_1[2] + -1" (subscript_expression "param_1[2]" identifier [ number_literal ]) + number_literal)) ;) (expression_statement "iVar3 = iVar7 + iVar5 * 8;" (assignment_expression "iVar3 = iVar7 + iVar5 * 8" identifier = (binary_expression "iVar7 + iVar5 * 8" identifier + (binary_expression "iVar5 * 8" identifier * number_literal))) ;) (if_statement "if (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)) {\n        iVar7 = (iVar7 + param_1[2] * 8) - iVar3;\n        do {\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));\n      }" if (parenthesized_expression "(((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5))" ( (binary_expression "((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)" (parenthesized_expression "((*(byte *)(iVar3 + 6) & 4) != 0)" ( (binary_expression "(*(byte *)(iVar3 + 6) & 4) != 0" (parenthesized_expression "(*(byte *)(iVar3 + 6) & 4)" ( (binary_expression "*(byte *)(iVar3 + 6) & 4" (pointer_expression "*(byte *)(iVar3 + 6)" * (cast_expression "(byte *)(iVar3 + 6)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 6)" ( (binary_expression "iVar3 + 6" identifier + number_literal) )))) & number_literal) )) != number_literal) )) && (parenthesized_expression "(0 < iVar5)" ( (binary_expression "0 < iVar5" number_literal < identifier) ))) )) (compound_statement "{\n        iVar7 = (iVar7 + param_1[2] * 8) - iVar3;\n        do {\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));\n      }" { (expression_statement "iVar7 = (iVar7 + param_1[2] * 8) - iVar3;" (assignment_expression "iVar7 = (iVar7 + param_1[2] * 8) - iVar3" identifier = (binary_expression "(iVar7 + param_1[2] * 8) - iVar3" (parenthesized_expression "(iVar7 + param_1[2] * 8)" ( (binary_expression "iVar7 + param_1[2] * 8" identifier + (binary_expression "param_1[2] * 8" (subscript_expression "param_1[2]" identifier [ number_literal ]) * number_literal)) )) - identifier)) ;) (do_statement "do {\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));" do (compound_statement "{\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        }" { (if_statement "if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }" if (parenthesized_expression "((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff)))" ( (binary_expression "(*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))" (parenthesized_expression "(*(int *)(param_1[4] + iVar5 * 4) == iVar1)" ( (binary_expression "*(int *)(param_1[4] + iVar5 * 4) == iVar1" (pointer_expression "*(int *)(param_1[4] + iVar5 * 4)" * (cast_expression "(int *)(param_1[4] + iVar5 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[4] + iVar5 * 4)" ( (binary_expression "param_1[4] + iVar5 * 4" (subscript_expression "param_1[4]" identifier [ number_literal ]) + (binary_expression "iVar5 * 4" identifier * number_literal)) )))) == identifier) )) && (parenthesized_expression "(param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))" ( (binary_expression "param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff)" identifier == (parenthesized_expression "(*(uint *)(iVar3 + 4) >> 8 & 0x3ff)" ( (binary_expression "*(uint *)(iVar3 + 4) >> 8 & 0x3ff" (binary_expression "*(uint *)(iVar3 + 4) >> 8" (pointer_expression "*(uint *)(iVar3 + 4)" * (cast_expression "(uint *)(iVar3 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 4)" ( (binary_expression "iVar3 + 4" identifier + number_literal) )))) >> number_literal) & number_literal) ))) ))) )) (compound_statement "{\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }" { (expression_statement "cVar2 = FUN_00021a30(iVar4,iVar5);" (assignment_expression "cVar2 = FUN_00021a30(iVar4,iVar5)" identifier = (call_expression "FUN_00021a30(iVar4,iVar5)" identifier (argument_list "(iVar4,iVar5)" ( identifier , identifier )))) ;) (if_statement "if (cVar2 == '\0') {\n              return 0xc;\n            }" if (parenthesized_expression "(cVar2 == '\0')" ( (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n              return 0xc;\n            }" { (return_statement "return 0xc;" return number_literal ;) })) (goto_statement "goto LAB_00022ad1;" goto statement_identifier ;) })) (expression_statement "iVar3 = iVar3 + iVar7 + -0x10;" (assignment_expression "iVar3 = iVar3 + iVar7 + -0x10" identifier = (binary_expression "iVar3 + iVar7 + -0x10" (binary_expression "iVar3 + iVar7" identifier + identifier) + number_literal)) ;) (expression_statement "iVar5 = iVar5 + -1;" (assignment_expression "iVar5 = iVar5 + -1" identifier = (binary_expression "iVar5 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5))" ( (binary_expression "((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)" (parenthesized_expression "((*(byte *)(iVar3 + 6) & 4) != 0)" ( (binary_expression "(*(byte *)(iVar3 + 6) & 4) != 0" (parenthesized_expression "(*(byte *)(iVar3 + 6) & 4)" ( (binary_expression "*(byte *)(iVar3 + 6) & 4" (pointer_expression "*(byte *)(iVar3 + 6)" * (cast_expression "(byte *)(iVar3 + 6)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 6)" ( (binary_expression "iVar3 + 6" identifier + number_literal) )))) & number_literal) )) != number_literal) )) && (parenthesized_expression "(0 < iVar5)" ( (binary_expression "0 < iVar5" number_literal < identifier) ))) )) ;) })) (expression_statement "iVar5 = FUN_00022950();" (assignment_expression "iVar5 = FUN_00022950()" identifier = (call_expression "FUN_00022950()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar5 == -1) {\n        return 0xc;\n      }" if (parenthesized_expression "(iVar5 == -1)" ( (binary_expression "iVar5 == -1" identifier == number_literal) )) (compound_statement "{\n        return 0xc;\n      }" { (return_statement "return 0xc;" return number_literal ;) })) (expression_statement "cVar2 = FUN_00021a30(iVar6 + param_1[5],iVar5);" (assignment_expression "cVar2 = FUN_00021a30(iVar6 + param_1[5],iVar5)" identifier = (call_expression "FUN_00021a30(iVar6 + param_1[5],iVar5)" identifier (argument_list "(iVar6 + param_1[5],iVar5)" ( (binary_expression "iVar6 + param_1[5]" identifier + (subscript_expression "param_1[5]" identifier [ number_literal ])) , identifier )))) ;) (if_statement "if (cVar2 == '\0') {\n        return 0xc;\n      }" if (parenthesized_expression "(cVar2 == '\0')" ( (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        return 0xc;\n      }" { (return_statement "return 0xc;" return number_literal ;) })) (expression_statement "iVar5 = FUN_000229f0(param_4,param_5);" (assignment_expression "iVar5 = FUN_000229f0(param_4,param_5)" identifier = (call_expression "FUN_000229f0(param_4,param_5)" identifier (argument_list "(param_4,param_5)" ( identifier , identifier )))) ;) (if_statement "if (iVar5 != 0) {\n        return iVar5;\n      }" if (parenthesized_expression "(iVar5 != 0)" ( (binary_expression "iVar5 != 0" identifier != number_literal) )) (compound_statement "{\n        return iVar5;\n      }" { (return_statement "return iVar5;" return identifier ;) })) (labeled_statement "LAB_00022ad1:\n      param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4);" statement_identifier : (expression_statement "param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4);" (assignment_expression "param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4)" identifier = (pointer_expression "*(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4)" * (cast_expression "(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4)" ( (binary_expression "*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4" (pointer_expression "*(int *)(param_1[5] + 8 + param_2 * 0xc)" * (cast_expression "(int *)(param_1[5] + 8 + param_2 * 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[5] + 8 + param_2 * 0xc)" ( (binary_expression "param_1[5] + 8 + param_2 * 0xc" (binary_expression "param_1[5] + 8" (subscript_expression "param_1[5]" identifier [ number_literal ]) + number_literal) + (binary_expression "param_2 * 0xc" identifier * number_literal)) )))) + number_literal) ))))) ;)) (expression_statement "param_3 = FUN_00022950();" (assignment_expression "param_3 = FUN_00022950()" identifier = (call_expression "FUN_00022950()" identifier (argument_list "()" ( )))) ;) (if_statement "if (param_3 == -1) {\n        return 0xc;\n      }" if (parenthesized_expression "(param_3 == -1)" ( (binary_expression "param_3 == -1" identifier == number_literal) )) (compound_statement "{\n        return 0xc;\n      }" { (return_statement "return 0xc;" return number_literal ;) })) (expression_statement "cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);" (assignment_expression "cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3)" identifier = (call_expression "FUN_00021a30(iVar6 + param_1[5],param_3)" identifier (argument_list "(iVar6 + param_1[5],param_3)" ( (binary_expression "iVar6 + param_1[5]" identifier + (subscript_expression "param_1[5]" identifier [ number_literal ])) , identifier )))) ;) }))) (if_statement "if (cVar2 == '\0') {\n      return 0xc;\n    }" if (parenthesized_expression "(cVar2 == '\0')" ( (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      return 0xc;\n    }" { (return_statement "return 0xc;" return number_literal ;) })) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit "/* WARNING: Type propagation algorithm not settling */\n\nreg_errcode_t __regparm3\nduplicate_node_closure\n          (re_dfa_t *dfa,Idx top_org_node,Idx top_clone_node,Idx root_node,uint init_constraint)\n\n{\n  re_token_t *prVar1;\n  re_node_set *prVar2;\n  int elem;\n  int iVar3;\n  _Bool _Var4;\n  bool bVar5;\n  Idx IVar6;\n  Idx elem_00;\n  reg_errcode_t rVar7;\n  re_token_t *prVar8;\n  re_node_set *set;\n  int iVar9;\n  \n  do {\n    while( true ) {\n      prVar1 = dfa->nodes;\n      prVar2 = dfa->edests;\n      if (prVar1[top_org_node].field_0x4 != '\x04') break;\n      IVar6 = dfa->nexts[top_org_node];\n      prVar2[top_clone_node].nelem = 0;\n      elem_00 = duplicate_node(dfa,IVar6,init_constraint);\n      if (elem_00 == -1) {\n        return _REG_ESPACE;\n      }\n      dfa->nexts[top_clone_node] = dfa->nexts[top_org_node];\n      _Var4 = re_node_set_insert(dfa->edests + top_clone_node,elem_00);\n      top_clone_node = elem_00;\n      top_org_node = IVar6;\n      if (!_Var4) {\n        return _REG_ESPACE;\n      }\n    }\n    iVar9 = prVar2[top_org_node].nelem;\n    if (iVar9 == 0) {\n      dfa->nexts[top_clone_node] = dfa->nexts[top_org_node];\n      return _REG_NOERROR;\n    }\n    set = prVar2 + top_clone_node;\n    elem = *prVar2[top_org_node].elems;\n    set->nelem = 0;\n    if (iVar9 == 1) {\n      if ((top_org_node == root_node) && (top_org_node != top_clone_node)) {\n        _Var4 = re_node_set_insert(set,elem);\n        if (!_Var4) {\n          return _REG_ESPACE;\n        }\n        return _REG_NOERROR;\n      }\n      init_constraint = init_constraint | *(uint *)&prVar1[top_org_node].field_0x4 >> 8 & 0x3ff;\n      IVar6 = duplicate_node(dfa,elem,init_constraint);\n      if (IVar6 == -1) {\n        return _REG_ESPACE;\n      }\n      bVar5 = re_node_set_insert(dfa->edests + top_clone_node,IVar6);\n    }\n    else {\n      iVar9 = dfa->nodes_len - 1;\n      prVar8 = prVar1 + iVar9;\n      if (((prVar8->field_0x6 & 4) != 0) && (0 < iVar9)) {\n        iVar3 = dfa->nodes_len * 8 - (int)prVar8;\n        do {\n          if ((dfa->org_indices[iVar9] == elem) &&\n             (init_constraint == (*(uint *)&prVar8->field_0x4 >> 8 & 0x3ff))) {\n            _Var4 = re_node_set_insert(set,iVar9);\n            if (!_Var4) {\n              return _REG_ESPACE;\n            }\n            goto LAB_00022ad1;\n          }\n          prVar8 = (re_token_t *)((int)prVar8 + (int)prVar1 + iVar3 + -0x10);\n          iVar9 = iVar9 + -1;\n        } while (((prVar8->field_0x6 & 4) != 0) && (0 < iVar9));\n      }\n      IVar6 = duplicate_node(dfa,elem,init_constraint);\n      if (IVar6 == -1) {\n        return _REG_ESPACE;\n      }\n      _Var4 = re_node_set_insert(dfa->edests + top_clone_node,IVar6);\n      if (!_Var4) {\n        return _REG_ESPACE;\n      }\n      rVar7 = duplicate_node_closure(dfa,elem,IVar6,root_node,init_constraint);\n      if (rVar7 != _REG_NOERROR) {\n        return rVar7;\n      }\nLAB_00022ad1:\n      elem = dfa->edests[top_org_node].elems[1];\n      IVar6 = duplicate_node(dfa,elem,init_constraint);\n      if (IVar6 == -1) {\n        return _REG_ESPACE;\n      }\n      bVar5 = re_node_set_insert(dfa->edests + top_clone_node,IVar6);\n    }\n    top_clone_node = IVar6;\n    top_org_node = elem;\n    if (!bVar5) {\n      return _REG_ESPACE;\n    }\n  } while( true );\n}\n\n" comment (function_definition "reg_errcode_t __regparm3\nduplicate_node_closure\n          (re_dfa_t *dfa,Idx top_org_node,Idx top_clone_node,Idx root_node,uint init_constraint)\n\n{\n  re_token_t *prVar1;\n  re_node_set *prVar2;\n  int elem;\n  int iVar3;\n  _Bool _Var4;\n  bool bVar5;\n  Idx IVar6;\n  Idx elem_00;\n  reg_errcode_t rVar7;\n  re_token_t *prVar8;\n  re_node_set *set;\n  int iVar9;\n  \n  do {\n    while( true ) {\n      prVar1 = dfa->nodes;\n      prVar2 = dfa->edests;\n      if (prVar1[top_org_node].field_0x4 != '\x04') break;\n      IVar6 = dfa->nexts[top_org_node];\n      prVar2[top_clone_node].nelem = 0;\n      elem_00 = duplicate_node(dfa,IVar6,init_constraint);\n      if (elem_00 == -1) {\n        return _REG_ESPACE;\n      }\n      dfa->nexts[top_clone_node] = dfa->nexts[top_org_node];\n      _Var4 = re_node_set_insert(dfa->edests + top_clone_node,elem_00);\n      top_clone_node = elem_00;\n      top_org_node = IVar6;\n      if (!_Var4) {\n        return _REG_ESPACE;\n      }\n    }\n    iVar9 = prVar2[top_org_node].nelem;\n    if (iVar9 == 0) {\n      dfa->nexts[top_clone_node] = dfa->nexts[top_org_node];\n      return _REG_NOERROR;\n    }\n    set = prVar2 + top_clone_node;\n    elem = *prVar2[top_org_node].elems;\n    set->nelem = 0;\n    if (iVar9 == 1) {\n      if ((top_org_node == root_node) && (top_org_node != top_clone_node)) {\n        _Var4 = re_node_set_insert(set,elem);\n        if (!_Var4) {\n          return _REG_ESPACE;\n        }\n        return _REG_NOERROR;\n      }\n      init_constraint = init_constraint | *(uint *)&prVar1[top_org_node].field_0x4 >> 8 & 0x3ff;\n      IVar6 = duplicate_node(dfa,elem,init_constraint);\n      if (IVar6 == -1) {\n        return _REG_ESPACE;\n      }\n      bVar5 = re_node_set_insert(dfa->edests + top_clone_node,IVar6);\n    }\n    else {\n      iVar9 = dfa->nodes_len - 1;\n      prVar8 = prVar1 + iVar9;\n      if (((prVar8->field_0x6 & 4) != 0) && (0 < iVar9)) {\n        iVar3 = dfa->nodes_len * 8 - (int)prVar8;\n        do {\n          if ((dfa->org_indices[iVar9] == elem) &&\n             (init_constraint == (*(uint *)&prVar8->field_0x4 >> 8 & 0x3ff))) {\n            _Var4 = re_node_set_insert(set,iVar9);\n            if (!_Var4) {\n              return _REG_ESPACE;\n            }\n            goto LAB_00022ad1;\n          }\n          prVar8 = (re_token_t *)((int)prVar8 + (int)prVar1 + iVar3 + -0x10);\n          iVar9 = iVar9 + -1;\n        } while (((prVar8->field_0x6 & 4) != 0) && (0 < iVar9));\n      }\n      IVar6 = duplicate_node(dfa,elem,init_constraint);\n      if (IVar6 == -1) {\n        return _REG_ESPACE;\n      }\n      _Var4 = re_node_set_insert(dfa->edests + top_clone_node,IVar6);\n      if (!_Var4) {\n        return _REG_ESPACE;\n      }\n      rVar7 = duplicate_node_closure(dfa,elem,IVar6,root_node,init_constraint);\n      if (rVar7 != _REG_NOERROR) {\n        return rVar7;\n      }\nLAB_00022ad1:\n      elem = dfa->edests[top_org_node].elems[1];\n      IVar6 = duplicate_node(dfa,elem,init_constraint);\n      if (IVar6 == -1) {\n        return _REG_ESPACE;\n      }\n      bVar5 = re_node_set_insert(dfa->edests + top_clone_node,IVar6);\n    }\n    top_clone_node = IVar6;\n    top_org_node = elem;\n    if (!bVar5) {\n      return _REG_ESPACE;\n    }\n  } while( true );\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "duplicate_node_closure\n          (re_dfa_t *dfa,Idx top_org_node,Idx top_clone_node,Idx root_node,uint init_constraint)" identifier (parameter_list "(re_dfa_t *dfa,Idx top_org_node,Idx top_clone_node,Idx root_node,uint init_constraint)" ( (parameter_declaration "re_dfa_t *dfa" type_identifier (pointer_declarator "*dfa" * identifier)) , (parameter_declaration "Idx top_org_node" type_identifier identifier) , (parameter_declaration "Idx top_clone_node" type_identifier identifier) , (parameter_declaration "Idx root_node" type_identifier identifier) , (parameter_declaration "uint init_constraint" type_identifier identifier) ))) (compound_statement "{\n  re_token_t *prVar1;\n  re_node_set *prVar2;\n  int elem;\n  int iVar3;\n  _Bool _Var4;\n  bool bVar5;\n  Idx IVar6;\n  Idx elem_00;\n  reg_errcode_t rVar7;\n  re_token_t *prVar8;\n  re_node_set *set;\n  int iVar9;\n  \n  do {\n    while( true ) {\n      prVar1 = dfa->nodes;\n      prVar2 = dfa->edests;\n      if (prVar1[top_org_node].field_0x4 != '\x04') break;\n      IVar6 = dfa->nexts[top_org_node];\n      prVar2[top_clone_node].nelem = 0;\n      elem_00 = duplicate_node(dfa,IVar6,init_constraint);\n      if (elem_00 == -1) {\n        return _REG_ESPACE;\n      }\n      dfa->nexts[top_clone_node] = dfa->nexts[top_org_node];\n      _Var4 = re_node_set_insert(dfa->edests + top_clone_node,elem_00);\n      top_clone_node = elem_00;\n      top_org_node = IVar6;\n      if (!_Var4) {\n        return _REG_ESPACE;\n      }\n    }\n    iVar9 = prVar2[top_org_node].nelem;\n    if (iVar9 == 0) {\n      dfa->nexts[top_clone_node] = dfa->nexts[top_org_node];\n      return _REG_NOERROR;\n    }\n    set = prVar2 + top_clone_node;\n    elem = *prVar2[top_org_node].elems;\n    set->nelem = 0;\n    if (iVar9 == 1) {\n      if ((top_org_node == root_node) && (top_org_node != top_clone_node)) {\n        _Var4 = re_node_set_insert(set,elem);\n        if (!_Var4) {\n          return _REG_ESPACE;\n        }\n        return _REG_NOERROR;\n      }\n      init_constraint = init_constraint | *(uint *)&prVar1[top_org_node].field_0x4 >> 8 & 0x3ff;\n      IVar6 = duplicate_node(dfa,elem,init_constraint);\n      if (IVar6 == -1) {\n        return _REG_ESPACE;\n      }\n      bVar5 = re_node_set_insert(dfa->edests + top_clone_node,IVar6);\n    }\n    else {\n      iVar9 = dfa->nodes_len - 1;\n      prVar8 = prVar1 + iVar9;\n      if (((prVar8->field_0x6 & 4) != 0) && (0 < iVar9)) {\n        iVar3 = dfa->nodes_len * 8 - (int)prVar8;\n        do {\n          if ((dfa->org_indices[iVar9] == elem) &&\n             (init_constraint == (*(uint *)&prVar8->field_0x4 >> 8 & 0x3ff))) {\n            _Var4 = re_node_set_insert(set,iVar9);\n            if (!_Var4) {\n              return _REG_ESPACE;\n            }\n            goto LAB_00022ad1;\n          }\n          prVar8 = (re_token_t *)((int)prVar8 + (int)prVar1 + iVar3 + -0x10);\n          iVar9 = iVar9 + -1;\n        } while (((prVar8->field_0x6 & 4) != 0) && (0 < iVar9));\n      }\n      IVar6 = duplicate_node(dfa,elem,init_constraint);\n      if (IVar6 == -1) {\n        return _REG_ESPACE;\n      }\n      _Var4 = re_node_set_insert(dfa->edests + top_clone_node,IVar6);\n      if (!_Var4) {\n        return _REG_ESPACE;\n      }\n      rVar7 = duplicate_node_closure(dfa,elem,IVar6,root_node,init_constraint);\n      if (rVar7 != _REG_NOERROR) {\n        return rVar7;\n      }\nLAB_00022ad1:\n      elem = dfa->edests[top_org_node].elems[1];\n      IVar6 = duplicate_node(dfa,elem,init_constraint);\n      if (IVar6 == -1) {\n        return _REG_ESPACE;\n      }\n      bVar5 = re_node_set_insert(dfa->edests + top_clone_node,IVar6);\n    }\n    top_clone_node = IVar6;\n    top_org_node = elem;\n    if (!bVar5) {\n      return _REG_ESPACE;\n    }\n  } while( true );\n}" { (declaration "re_token_t *prVar1;" type_identifier (pointer_declarator "*prVar1" * identifier) ;) (declaration "re_node_set *prVar2;" type_identifier (pointer_declarator "*prVar2" * identifier) ;) (declaration "int elem;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "_Bool _Var4;" type_identifier identifier ;) (declaration "bool bVar5;" primitive_type identifier ;) (declaration "Idx IVar6;" type_identifier identifier ;) (declaration "Idx elem_00;" type_identifier identifier ;) (declaration "reg_errcode_t rVar7;" type_identifier identifier ;) (declaration "re_token_t *prVar8;" type_identifier (pointer_declarator "*prVar8" * identifier) ;) (declaration "re_node_set *set;" type_identifier (pointer_declarator "*set" * identifier) ;) (declaration "int iVar9;" primitive_type identifier ;) (do_statement "do {\n    while( true ) {\n      prVar1 = dfa->nodes;\n      prVar2 = dfa->edests;\n      if (prVar1[top_org_node].field_0x4 != '\x04') break;\n      IVar6 = dfa->nexts[top_org_node];\n      prVar2[top_clone_node].nelem = 0;\n      elem_00 = duplicate_node(dfa,IVar6,init_constraint);\n      if (elem_00 == -1) {\n        return _REG_ESPACE;\n      }\n      dfa->nexts[top_clone_node] = dfa->nexts[top_org_node];\n      _Var4 = re_node_set_insert(dfa->edests + top_clone_node,elem_00);\n      top_clone_node = elem_00;\n      top_org_node = IVar6;\n      if (!_Var4) {\n        return _REG_ESPACE;\n      }\n    }\n    iVar9 = prVar2[top_org_node].nelem;\n    if (iVar9 == 0) {\n      dfa->nexts[top_clone_node] = dfa->nexts[top_org_node];\n      return _REG_NOERROR;\n    }\n    set = prVar2 + top_clone_node;\n    elem = *prVar2[top_org_node].elems;\n    set->nelem = 0;\n    if (iVar9 == 1) {\n      if ((top_org_node == root_node) && (top_org_node != top_clone_node)) {\n        _Var4 = re_node_set_insert(set,elem);\n        if (!_Var4) {\n          return _REG_ESPACE;\n        }\n        return _REG_NOERROR;\n      }\n      init_constraint = init_constraint | *(uint *)&prVar1[top_org_node].field_0x4 >> 8 & 0x3ff;\n      IVar6 = duplicate_node(dfa,elem,init_constraint);\n      if (IVar6 == -1) {\n        return _REG_ESPACE;\n      }\n      bVar5 = re_node_set_insert(dfa->edests + top_clone_node,IVar6);\n    }\n    else {\n      iVar9 = dfa->nodes_len - 1;\n      prVar8 = prVar1 + iVar9;\n      if (((prVar8->field_0x6 & 4) != 0) && (0 < iVar9)) {\n        iVar3 = dfa->nodes_len * 8 - (int)prVar8;\n        do {\n          if ((dfa->org_indices[iVar9] == elem) &&\n             (init_constraint == (*(uint *)&prVar8->field_0x4 >> 8 & 0x3ff))) {\n            _Var4 = re_node_set_insert(set,iVar9);\n            if (!_Var4) {\n              return _REG_ESPACE;\n            }\n            goto LAB_00022ad1;\n          }\n          prVar8 = (re_token_t *)((int)prVar8 + (int)prVar1 + iVar3 + -0x10);\n          iVar9 = iVar9 + -1;\n        } while (((prVar8->field_0x6 & 4) != 0) && (0 < iVar9));\n      }\n      IVar6 = duplicate_node(dfa,elem,init_constraint);\n      if (IVar6 == -1) {\n        return _REG_ESPACE;\n      }\n      _Var4 = re_node_set_insert(dfa->edests + top_clone_node,IVar6);\n      if (!_Var4) {\n        return _REG_ESPACE;\n      }\n      rVar7 = duplicate_node_closure(dfa,elem,IVar6,root_node,init_constraint);\n      if (rVar7 != _REG_NOERROR) {\n        return rVar7;\n      }\nLAB_00022ad1:\n      elem = dfa->edests[top_org_node].elems[1];\n      IVar6 = duplicate_node(dfa,elem,init_constraint);\n      if (IVar6 == -1) {\n        return _REG_ESPACE;\n      }\n      bVar5 = re_node_set_insert(dfa->edests + top_clone_node,IVar6);\n    }\n    top_clone_node = IVar6;\n    top_org_node = elem;\n    if (!bVar5) {\n      return _REG_ESPACE;\n    }\n  } while( true );" do (compound_statement "{\n    while( true ) {\n      prVar1 = dfa->nodes;\n      prVar2 = dfa->edests;\n      if (prVar1[top_org_node].field_0x4 != '\x04') break;\n      IVar6 = dfa->nexts[top_org_node];\n      prVar2[top_clone_node].nelem = 0;\n      elem_00 = duplicate_node(dfa,IVar6,init_constraint);\n      if (elem_00 == -1) {\n        return _REG_ESPACE;\n      }\n      dfa->nexts[top_clone_node] = dfa->nexts[top_org_node];\n      _Var4 = re_node_set_insert(dfa->edests + top_clone_node,elem_00);\n      top_clone_node = elem_00;\n      top_org_node = IVar6;\n      if (!_Var4) {\n        return _REG_ESPACE;\n      }\n    }\n    iVar9 = prVar2[top_org_node].nelem;\n    if (iVar9 == 0) {\n      dfa->nexts[top_clone_node] = dfa->nexts[top_org_node];\n      return _REG_NOERROR;\n    }\n    set = prVar2 + top_clone_node;\n    elem = *prVar2[top_org_node].elems;\n    set->nelem = 0;\n    if (iVar9 == 1) {\n      if ((top_org_node == root_node) && (top_org_node != top_clone_node)) {\n        _Var4 = re_node_set_insert(set,elem);\n        if (!_Var4) {\n          return _REG_ESPACE;\n        }\n        return _REG_NOERROR;\n      }\n      init_constraint = init_constraint | *(uint *)&prVar1[top_org_node].field_0x4 >> 8 & 0x3ff;\n      IVar6 = duplicate_node(dfa,elem,init_constraint);\n      if (IVar6 == -1) {\n        return _REG_ESPACE;\n      }\n      bVar5 = re_node_set_insert(dfa->edests + top_clone_node,IVar6);\n    }\n    else {\n      iVar9 = dfa->nodes_len - 1;\n      prVar8 = prVar1 + iVar9;\n      if (((prVar8->field_0x6 & 4) != 0) && (0 < iVar9)) {\n        iVar3 = dfa->nodes_len * 8 - (int)prVar8;\n        do {\n          if ((dfa->org_indices[iVar9] == elem) &&\n             (init_constraint == (*(uint *)&prVar8->field_0x4 >> 8 & 0x3ff))) {\n            _Var4 = re_node_set_insert(set,iVar9);\n            if (!_Var4) {\n              return _REG_ESPACE;\n            }\n            goto LAB_00022ad1;\n          }\n          prVar8 = (re_token_t *)((int)prVar8 + (int)prVar1 + iVar3 + -0x10);\n          iVar9 = iVar9 + -1;\n        } while (((prVar8->field_0x6 & 4) != 0) && (0 < iVar9));\n      }\n      IVar6 = duplicate_node(dfa,elem,init_constraint);\n      if (IVar6 == -1) {\n        return _REG_ESPACE;\n      }\n      _Var4 = re_node_set_insert(dfa->edests + top_clone_node,IVar6);\n      if (!_Var4) {\n        return _REG_ESPACE;\n      }\n      rVar7 = duplicate_node_closure(dfa,elem,IVar6,root_node,init_constraint);\n      if (rVar7 != _REG_NOERROR) {\n        return rVar7;\n      }\nLAB_00022ad1:\n      elem = dfa->edests[top_org_node].elems[1];\n      IVar6 = duplicate_node(dfa,elem,init_constraint);\n      if (IVar6 == -1) {\n        return _REG_ESPACE;\n      }\n      bVar5 = re_node_set_insert(dfa->edests + top_clone_node,IVar6);\n    }\n    top_clone_node = IVar6;\n    top_org_node = elem;\n    if (!bVar5) {\n      return _REG_ESPACE;\n    }\n  }" { (while_statement "while( true ) {\n      prVar1 = dfa->nodes;\n      prVar2 = dfa->edests;\n      if (prVar1[top_org_node].field_0x4 != '\x04') break;\n      IVar6 = dfa->nexts[top_org_node];\n      prVar2[top_clone_node].nelem = 0;\n      elem_00 = duplicate_node(dfa,IVar6,init_constraint);\n      if (elem_00 == -1) {\n        return _REG_ESPACE;\n      }\n      dfa->nexts[top_clone_node] = dfa->nexts[top_org_node];\n      _Var4 = re_node_set_insert(dfa->edests + top_clone_node,elem_00);\n      top_clone_node = elem_00;\n      top_org_node = IVar6;\n      if (!_Var4) {\n        return _REG_ESPACE;\n      }\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      prVar1 = dfa->nodes;\n      prVar2 = dfa->edests;\n      if (prVar1[top_org_node].field_0x4 != '\x04') break;\n      IVar6 = dfa->nexts[top_org_node];\n      prVar2[top_clone_node].nelem = 0;\n      elem_00 = duplicate_node(dfa,IVar6,init_constraint);\n      if (elem_00 == -1) {\n        return _REG_ESPACE;\n      }\n      dfa->nexts[top_clone_node] = dfa->nexts[top_org_node];\n      _Var4 = re_node_set_insert(dfa->edests + top_clone_node,elem_00);\n      top_clone_node = elem_00;\n      top_org_node = IVar6;\n      if (!_Var4) {\n        return _REG_ESPACE;\n      }\n    }" { (expression_statement "prVar1 = dfa->nodes;" (assignment_expression "prVar1 = dfa->nodes" identifier = (field_expression "dfa->nodes" identifier -> field_identifier)) ;) (expression_statement "prVar2 = dfa->edests;" (assignment_expression "prVar2 = dfa->edests" identifier = (field_expression "dfa->edests" identifier -> field_identifier)) ;) (if_statement "if (prVar1[top_org_node].field_0x4 != '\x04') break;" if (parenthesized_expression "(prVar1[top_org_node].field_0x4 != '\x04')" ( (binary_expression "prVar1[top_org_node].field_0x4 != '\x04'" (field_expression "prVar1[top_org_node].field_0x4" (subscript_expression "prVar1[top_org_node]" identifier [ identifier ]) . field_identifier) != (char_literal "'\x04'" ' escape_sequence ')) )) (break_statement "break;" break ;)) (expression_statement "IVar6 = dfa->nexts[top_org_node];" (assignment_expression "IVar6 = dfa->nexts[top_org_node]" identifier = (subscript_expression "dfa->nexts[top_org_node]" (field_expression "dfa->nexts" identifier -> field_identifier) [ identifier ])) ;) (expression_statement "prVar2[top_clone_node].nelem = 0;" (assignment_expression "prVar2[top_clone_node].nelem = 0" (field_expression "prVar2[top_clone_node].nelem" (subscript_expression "prVar2[top_clone_node]" identifier [ identifier ]) . field_identifier) = number_literal) ;) (expression_statement "elem_00 = duplicate_node(dfa,IVar6,init_constraint);" (assignment_expression "elem_00 = duplicate_node(dfa,IVar6,init_constraint)" identifier = (call_expression "duplicate_node(dfa,IVar6,init_constraint)" identifier (argument_list "(dfa,IVar6,init_constraint)" ( identifier , identifier , identifier )))) ;) (if_statement "if (elem_00 == -1) {\n        return _REG_ESPACE;\n      }" if (parenthesized_expression "(elem_00 == -1)" ( (binary_expression "elem_00 == -1" identifier == number_literal) )) (compound_statement "{\n        return _REG_ESPACE;\n      }" { (return_statement "return _REG_ESPACE;" return identifier ;) })) (expression_statement "dfa->nexts[top_clone_node] = dfa->nexts[top_org_node];" (assignment_expression "dfa->nexts[top_clone_node] = dfa->nexts[top_org_node]" (subscript_expression "dfa->nexts[top_clone_node]" (field_expression "dfa->nexts" identifier -> field_identifier) [ identifier ]) = (subscript_expression "dfa->nexts[top_org_node]" (field_expression "dfa->nexts" identifier -> field_identifier) [ identifier ])) ;) (expression_statement "_Var4 = re_node_set_insert(dfa->edests + top_clone_node,elem_00);" (assignment_expression "_Var4 = re_node_set_insert(dfa->edests + top_clone_node,elem_00)" identifier = (call_expression "re_node_set_insert(dfa->edests + top_clone_node,elem_00)" identifier (argument_list "(dfa->edests + top_clone_node,elem_00)" ( (binary_expression "dfa->edests + top_clone_node" (field_expression "dfa->edests" identifier -> field_identifier) + identifier) , identifier )))) ;) (expression_statement "top_clone_node = elem_00;" (assignment_expression "top_clone_node = elem_00" identifier = identifier) ;) (expression_statement "top_org_node = IVar6;" (assignment_expression "top_org_node = IVar6" identifier = identifier) ;) (if_statement "if (!_Var4) {\n        return _REG_ESPACE;\n      }" if (parenthesized_expression "(!_Var4)" ( (unary_expression "!_Var4" ! identifier) )) (compound_statement "{\n        return _REG_ESPACE;\n      }" { (return_statement "return _REG_ESPACE;" return identifier ;) })) })) (expression_statement "iVar9 = prVar2[top_org_node].nelem;" (assignment_expression "iVar9 = prVar2[top_org_node].nelem" identifier = (field_expression "prVar2[top_org_node].nelem" (subscript_expression "prVar2[top_org_node]" identifier [ identifier ]) . field_identifier)) ;) (if_statement "if (iVar9 == 0) {\n      dfa->nexts[top_clone_node] = dfa->nexts[top_org_node];\n      return _REG_NOERROR;\n    }" if (parenthesized_expression "(iVar9 == 0)" ( (binary_expression "iVar9 == 0" identifier == number_literal) )) (compound_statement "{\n      dfa->nexts[top_clone_node] = dfa->nexts[top_org_node];\n      return _REG_NOERROR;\n    }" { (expression_statement "dfa->nexts[top_clone_node] = dfa->nexts[top_org_node];" (assignment_expression "dfa->nexts[top_clone_node] = dfa->nexts[top_org_node]" (subscript_expression "dfa->nexts[top_clone_node]" (field_expression "dfa->nexts" identifier -> field_identifier) [ identifier ]) = (subscript_expression "dfa->nexts[top_org_node]" (field_expression "dfa->nexts" identifier -> field_identifier) [ identifier ])) ;) (return_statement "return _REG_NOERROR;" return identifier ;) })) (expression_statement "set = prVar2 + top_clone_node;" (assignment_expression "set = prVar2 + top_clone_node" identifier = (binary_expression "prVar2 + top_clone_node" identifier + identifier)) ;) (expression_statement "elem = *prVar2[top_org_node].elems;" (assignment_expression "elem = *prVar2[top_org_node].elems" identifier = (pointer_expression "*prVar2[top_org_node].elems" * (field_expression "prVar2[top_org_node].elems" (subscript_expression "prVar2[top_org_node]" identifier [ identifier ]) . field_identifier))) ;) (expression_statement "set->nelem = 0;" (assignment_expression "set->nelem = 0" (field_expression "set->nelem" identifier -> field_identifier) = number_literal) ;) (if_statement "if (iVar9 == 1) {\n      if ((top_org_node == root_node) && (top_org_node != top_clone_node)) {\n        _Var4 = re_node_set_insert(set,elem);\n        if (!_Var4) {\n          return _REG_ESPACE;\n        }\n        return _REG_NOERROR;\n      }\n      init_constraint = init_constraint | *(uint *)&prVar1[top_org_node].field_0x4 >> 8 & 0x3ff;\n      IVar6 = duplicate_node(dfa,elem,init_constraint);\n      if (IVar6 == -1) {\n        return _REG_ESPACE;\n      }\n      bVar5 = re_node_set_insert(dfa->edests + top_clone_node,IVar6);\n    }\n    else {\n      iVar9 = dfa->nodes_len - 1;\n      prVar8 = prVar1 + iVar9;\n      if (((prVar8->field_0x6 & 4) != 0) && (0 < iVar9)) {\n        iVar3 = dfa->nodes_len * 8 - (int)prVar8;\n        do {\n          if ((dfa->org_indices[iVar9] == elem) &&\n             (init_constraint == (*(uint *)&prVar8->field_0x4 >> 8 & 0x3ff))) {\n            _Var4 = re_node_set_insert(set,iVar9);\n            if (!_Var4) {\n              return _REG_ESPACE;\n            }\n            goto LAB_00022ad1;\n          }\n          prVar8 = (re_token_t *)((int)prVar8 + (int)prVar1 + iVar3 + -0x10);\n          iVar9 = iVar9 + -1;\n        } while (((prVar8->field_0x6 & 4) != 0) && (0 < iVar9));\n      }\n      IVar6 = duplicate_node(dfa,elem,init_constraint);\n      if (IVar6 == -1) {\n        return _REG_ESPACE;\n      }\n      _Var4 = re_node_set_insert(dfa->edests + top_clone_node,IVar6);\n      if (!_Var4) {\n        return _REG_ESPACE;\n      }\n      rVar7 = duplicate_node_closure(dfa,elem,IVar6,root_node,init_constraint);\n      if (rVar7 != _REG_NOERROR) {\n        return rVar7;\n      }\nLAB_00022ad1:\n      elem = dfa->edests[top_org_node].elems[1];\n      IVar6 = duplicate_node(dfa,elem,init_constraint);\n      if (IVar6 == -1) {\n        return _REG_ESPACE;\n      }\n      bVar5 = re_node_set_insert(dfa->edests + top_clone_node,IVar6);\n    }" if (parenthesized_expression "(iVar9 == 1)" ( (binary_expression "iVar9 == 1" identifier == number_literal) )) (compound_statement "{\n      if ((top_org_node == root_node) && (top_org_node != top_clone_node)) {\n        _Var4 = re_node_set_insert(set,elem);\n        if (!_Var4) {\n          return _REG_ESPACE;\n        }\n        return _REG_NOERROR;\n      }\n      init_constraint = init_constraint | *(uint *)&prVar1[top_org_node].field_0x4 >> 8 & 0x3ff;\n      IVar6 = duplicate_node(dfa,elem,init_constraint);\n      if (IVar6 == -1) {\n        return _REG_ESPACE;\n      }\n      bVar5 = re_node_set_insert(dfa->edests + top_clone_node,IVar6);\n    }" { (if_statement "if ((top_org_node == root_node) && (top_org_node != top_clone_node)) {\n        _Var4 = re_node_set_insert(set,elem);\n        if (!_Var4) {\n          return _REG_ESPACE;\n        }\n        return _REG_NOERROR;\n      }" if (parenthesized_expression "((top_org_node == root_node) && (top_org_node != top_clone_node))" ( (binary_expression "(top_org_node == root_node) && (top_org_node != top_clone_node)" (parenthesized_expression "(top_org_node == root_node)" ( (binary_expression "top_org_node == root_node" identifier == identifier) )) && (parenthesized_expression "(top_org_node != top_clone_node)" ( (binary_expression "top_org_node != top_clone_node" identifier != identifier) ))) )) (compound_statement "{\n        _Var4 = re_node_set_insert(set,elem);\n        if (!_Var4) {\n          return _REG_ESPACE;\n        }\n        return _REG_NOERROR;\n      }" { (expression_statement "_Var4 = re_node_set_insert(set,elem);" (assignment_expression "_Var4 = re_node_set_insert(set,elem)" identifier = (call_expression "re_node_set_insert(set,elem)" identifier (argument_list "(set,elem)" ( identifier , identifier )))) ;) (if_statement "if (!_Var4) {\n          return _REG_ESPACE;\n        }" if (parenthesized_expression "(!_Var4)" ( (unary_expression "!_Var4" ! identifier) )) (compound_statement "{\n          return _REG_ESPACE;\n        }" { (return_statement "return _REG_ESPACE;" return identifier ;) })) (return_statement "return _REG_NOERROR;" return identifier ;) })) (expression_statement "init_constraint = init_constraint | *(uint *)&prVar1[top_org_node].field_0x4 >> 8 & 0x3ff;" (assignment_expression "init_constraint = init_constraint | *(uint *)&prVar1[top_org_node].field_0x4 >> 8 & 0x3ff" identifier = (binary_expression "init_constraint | *(uint *)&prVar1[top_org_node].field_0x4 >> 8 & 0x3ff" identifier | (binary_expression "*(uint *)&prVar1[top_org_node].field_0x4 >> 8 & 0x3ff" (binary_expression "*(uint *)&prVar1[top_org_node].field_0x4 >> 8" (pointer_expression "*(uint *)&prVar1[top_org_node].field_0x4" * (cast_expression "(uint *)&prVar1[top_org_node].field_0x4" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&prVar1[top_org_node].field_0x4" & (field_expression "prVar1[top_org_node].field_0x4" (subscript_expression "prVar1[top_org_node]" identifier [ identifier ]) . field_identifier)))) >> number_literal) & number_literal))) ;) (expression_statement "IVar6 = duplicate_node(dfa,elem,init_constraint);" (assignment_expression "IVar6 = duplicate_node(dfa,elem,init_constraint)" identifier = (call_expression "duplicate_node(dfa,elem,init_constraint)" identifier (argument_list "(dfa,elem,init_constraint)" ( identifier , identifier , identifier )))) ;) (if_statement "if (IVar6 == -1) {\n        return _REG_ESPACE;\n      }" if (parenthesized_expression "(IVar6 == -1)" ( (binary_expression "IVar6 == -1" identifier == number_literal) )) (compound_statement "{\n        return _REG_ESPACE;\n      }" { (return_statement "return _REG_ESPACE;" return identifier ;) })) (expression_statement "bVar5 = re_node_set_insert(dfa->edests + top_clone_node,IVar6);" (assignment_expression "bVar5 = re_node_set_insert(dfa->edests + top_clone_node,IVar6)" identifier = (call_expression "re_node_set_insert(dfa->edests + top_clone_node,IVar6)" identifier (argument_list "(dfa->edests + top_clone_node,IVar6)" ( (binary_expression "dfa->edests + top_clone_node" (field_expression "dfa->edests" identifier -> field_identifier) + identifier) , identifier )))) ;) }) (else_clause "else {\n      iVar9 = dfa->nodes_len - 1;\n      prVar8 = prVar1 + iVar9;\n      if (((prVar8->field_0x6 & 4) != 0) && (0 < iVar9)) {\n        iVar3 = dfa->nodes_len * 8 - (int)prVar8;\n        do {\n          if ((dfa->org_indices[iVar9] == elem) &&\n             (init_constraint == (*(uint *)&prVar8->field_0x4 >> 8 & 0x3ff))) {\n            _Var4 = re_node_set_insert(set,iVar9);\n            if (!_Var4) {\n              return _REG_ESPACE;\n            }\n            goto LAB_00022ad1;\n          }\n          prVar8 = (re_token_t *)((int)prVar8 + (int)prVar1 + iVar3 + -0x10);\n          iVar9 = iVar9 + -1;\n        } while (((prVar8->field_0x6 & 4) != 0) && (0 < iVar9));\n      }\n      IVar6 = duplicate_node(dfa,elem,init_constraint);\n      if (IVar6 == -1) {\n        return _REG_ESPACE;\n      }\n      _Var4 = re_node_set_insert(dfa->edests + top_clone_node,IVar6);\n      if (!_Var4) {\n        return _REG_ESPACE;\n      }\n      rVar7 = duplicate_node_closure(dfa,elem,IVar6,root_node,init_constraint);\n      if (rVar7 != _REG_NOERROR) {\n        return rVar7;\n      }\nLAB_00022ad1:\n      elem = dfa->edests[top_org_node].elems[1];\n      IVar6 = duplicate_node(dfa,elem,init_constraint);\n      if (IVar6 == -1) {\n        return _REG_ESPACE;\n      }\n      bVar5 = re_node_set_insert(dfa->edests + top_clone_node,IVar6);\n    }" else (compound_statement "{\n      iVar9 = dfa->nodes_len - 1;\n      prVar8 = prVar1 + iVar9;\n      if (((prVar8->field_0x6 & 4) != 0) && (0 < iVar9)) {\n        iVar3 = dfa->nodes_len * 8 - (int)prVar8;\n        do {\n          if ((dfa->org_indices[iVar9] == elem) &&\n             (init_constraint == (*(uint *)&prVar8->field_0x4 >> 8 & 0x3ff))) {\n            _Var4 = re_node_set_insert(set,iVar9);\n            if (!_Var4) {\n              return _REG_ESPACE;\n            }\n            goto LAB_00022ad1;\n          }\n          prVar8 = (re_token_t *)((int)prVar8 + (int)prVar1 + iVar3 + -0x10);\n          iVar9 = iVar9 + -1;\n        } while (((prVar8->field_0x6 & 4) != 0) && (0 < iVar9));\n      }\n      IVar6 = duplicate_node(dfa,elem,init_constraint);\n      if (IVar6 == -1) {\n        return _REG_ESPACE;\n      }\n      _Var4 = re_node_set_insert(dfa->edests + top_clone_node,IVar6);\n      if (!_Var4) {\n        return _REG_ESPACE;\n      }\n      rVar7 = duplicate_node_closure(dfa,elem,IVar6,root_node,init_constraint);\n      if (rVar7 != _REG_NOERROR) {\n        return rVar7;\n      }\nLAB_00022ad1:\n      elem = dfa->edests[top_org_node].elems[1];\n      IVar6 = duplicate_node(dfa,elem,init_constraint);\n      if (IVar6 == -1) {\n        return _REG_ESPACE;\n      }\n      bVar5 = re_node_set_insert(dfa->edests + top_clone_node,IVar6);\n    }" { (expression_statement "iVar9 = dfa->nodes_len - 1;" (assignment_expression "iVar9 = dfa->nodes_len - 1" identifier = (binary_expression "dfa->nodes_len - 1" (field_expression "dfa->nodes_len" identifier -> field_identifier) - number_literal)) ;) (expression_statement "prVar8 = prVar1 + iVar9;" (assignment_expression "prVar8 = prVar1 + iVar9" identifier = (binary_expression "prVar1 + iVar9" identifier + identifier)) ;) (if_statement "if (((prVar8->field_0x6 & 4) != 0) && (0 < iVar9)) {\n        iVar3 = dfa->nodes_len * 8 - (int)prVar8;\n        do {\n          if ((dfa->org_indices[iVar9] == elem) &&\n             (init_constraint == (*(uint *)&prVar8->field_0x4 >> 8 & 0x3ff))) {\n            _Var4 = re_node_set_insert(set,iVar9);\n            if (!_Var4) {\n              return _REG_ESPACE;\n            }\n            goto LAB_00022ad1;\n          }\n          prVar8 = (re_token_t *)((int)prVar8 + (int)prVar1 + iVar3 + -0x10);\n          iVar9 = iVar9 + -1;\n        } while (((prVar8->field_0x6 & 4) != 0) && (0 < iVar9));\n      }" if (parenthesized_expression "(((prVar8->field_0x6 & 4) != 0) && (0 < iVar9))" ( (binary_expression "((prVar8->field_0x6 & 4) != 0) && (0 < iVar9)" (parenthesized_expression "((prVar8->field_0x6 & 4) != 0)" ( (binary_expression "(prVar8->field_0x6 & 4) != 0" (parenthesized_expression "(prVar8->field_0x6 & 4)" ( (binary_expression "prVar8->field_0x6 & 4" (field_expression "prVar8->field_0x6" identifier -> field_identifier) & number_literal) )) != number_literal) )) && (parenthesized_expression "(0 < iVar9)" ( (binary_expression "0 < iVar9" number_literal < identifier) ))) )) (compound_statement "{\n        iVar3 = dfa->nodes_len * 8 - (int)prVar8;\n        do {\n          if ((dfa->org_indices[iVar9] == elem) &&\n             (init_constraint == (*(uint *)&prVar8->field_0x4 >> 8 & 0x3ff))) {\n            _Var4 = re_node_set_insert(set,iVar9);\n            if (!_Var4) {\n              return _REG_ESPACE;\n            }\n            goto LAB_00022ad1;\n          }\n          prVar8 = (re_token_t *)((int)prVar8 + (int)prVar1 + iVar3 + -0x10);\n          iVar9 = iVar9 + -1;\n        } while (((prVar8->field_0x6 & 4) != 0) && (0 < iVar9));\n      }" { (expression_statement "iVar3 = dfa->nodes_len * 8 - (int)prVar8;" (assignment_expression "iVar3 = dfa->nodes_len * 8 - (int)prVar8" identifier = (binary_expression "dfa->nodes_len * 8 - (int)prVar8" (binary_expression "dfa->nodes_len * 8" (field_expression "dfa->nodes_len" identifier -> field_identifier) * number_literal) - (cast_expression "(int)prVar8" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (do_statement "do {\n          if ((dfa->org_indices[iVar9] == elem) &&\n             (init_constraint == (*(uint *)&prVar8->field_0x4 >> 8 & 0x3ff))) {\n            _Var4 = re_node_set_insert(set,iVar9);\n            if (!_Var4) {\n              return _REG_ESPACE;\n            }\n            goto LAB_00022ad1;\n          }\n          prVar8 = (re_token_t *)((int)prVar8 + (int)prVar1 + iVar3 + -0x10);\n          iVar9 = iVar9 + -1;\n        } while (((prVar8->field_0x6 & 4) != 0) && (0 < iVar9));" do (compound_statement "{\n          if ((dfa->org_indices[iVar9] == elem) &&\n             (init_constraint == (*(uint *)&prVar8->field_0x4 >> 8 & 0x3ff))) {\n            _Var4 = re_node_set_insert(set,iVar9);\n            if (!_Var4) {\n              return _REG_ESPACE;\n            }\n            goto LAB_00022ad1;\n          }\n          prVar8 = (re_token_t *)((int)prVar8 + (int)prVar1 + iVar3 + -0x10);\n          iVar9 = iVar9 + -1;\n        }" { (if_statement "if ((dfa->org_indices[iVar9] == elem) &&\n             (init_constraint == (*(uint *)&prVar8->field_0x4 >> 8 & 0x3ff))) {\n            _Var4 = re_node_set_insert(set,iVar9);\n            if (!_Var4) {\n              return _REG_ESPACE;\n            }\n            goto LAB_00022ad1;\n          }" if (parenthesized_expression "((dfa->org_indices[iVar9] == elem) &&\n             (init_constraint == (*(uint *)&prVar8->field_0x4 >> 8 & 0x3ff)))" ( (binary_expression "(dfa->org_indices[iVar9] == elem) &&\n             (init_constraint == (*(uint *)&prVar8->field_0x4 >> 8 & 0x3ff))" (parenthesized_expression "(dfa->org_indices[iVar9] == elem)" ( (binary_expression "dfa->org_indices[iVar9] == elem" (subscript_expression "dfa->org_indices[iVar9]" (field_expression "dfa->org_indices" identifier -> field_identifier) [ identifier ]) == identifier) )) && (parenthesized_expression "(init_constraint == (*(uint *)&prVar8->field_0x4 >> 8 & 0x3ff))" ( (binary_expression "init_constraint == (*(uint *)&prVar8->field_0x4 >> 8 & 0x3ff)" identifier == (parenthesized_expression "(*(uint *)&prVar8->field_0x4 >> 8 & 0x3ff)" ( (binary_expression "*(uint *)&prVar8->field_0x4 >> 8 & 0x3ff" (binary_expression "*(uint *)&prVar8->field_0x4 >> 8" (pointer_expression "*(uint *)&prVar8->field_0x4" * (cast_expression "(uint *)&prVar8->field_0x4" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&prVar8->field_0x4" & (field_expression "prVar8->field_0x4" identifier -> field_identifier)))) >> number_literal) & number_literal) ))) ))) )) (compound_statement "{\n            _Var4 = re_node_set_insert(set,iVar9);\n            if (!_Var4) {\n              return _REG_ESPACE;\n            }\n            goto LAB_00022ad1;\n          }" { (expression_statement "_Var4 = re_node_set_insert(set,iVar9);" (assignment_expression "_Var4 = re_node_set_insert(set,iVar9)" identifier = (call_expression "re_node_set_insert(set,iVar9)" identifier (argument_list "(set,iVar9)" ( identifier , identifier )))) ;) (if_statement "if (!_Var4) {\n              return _REG_ESPACE;\n            }" if (parenthesized_expression "(!_Var4)" ( (unary_expression "!_Var4" ! identifier) )) (compound_statement "{\n              return _REG_ESPACE;\n            }" { (return_statement "return _REG_ESPACE;" return identifier ;) })) (goto_statement "goto LAB_00022ad1;" goto statement_identifier ;) })) (expression_statement "prVar8 = (re_token_t *)((int)prVar8 + (int)prVar1 + iVar3 + -0x10);" (assignment_expression "prVar8 = (re_token_t *)((int)prVar8 + (int)prVar1 + iVar3 + -0x10)" identifier = (cast_expression "(re_token_t *)((int)prVar8 + (int)prVar1 + iVar3 + -0x10)" ( (type_descriptor "re_token_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)prVar8 + (int)prVar1 + iVar3 + -0x10)" ( (binary_expression "(int)prVar8 + (int)prVar1 + iVar3 + -0x10" (binary_expression "(int)prVar8 + (int)prVar1 + iVar3" (binary_expression "(int)prVar8 + (int)prVar1" (cast_expression "(int)prVar8" ( (type_descriptor "int" primitive_type) ) identifier) + (cast_expression "(int)prVar1" ( (type_descriptor "int" primitive_type) ) identifier)) + identifier) + number_literal) )))) ;) (expression_statement "iVar9 = iVar9 + -1;" (assignment_expression "iVar9 = iVar9 + -1" identifier = (binary_expression "iVar9 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(((prVar8->field_0x6 & 4) != 0) && (0 < iVar9))" ( (binary_expression "((prVar8->field_0x6 & 4) != 0) && (0 < iVar9)" (parenthesized_expression "((prVar8->field_0x6 & 4) != 0)" ( (binary_expression "(prVar8->field_0x6 & 4) != 0" (parenthesized_expression "(prVar8->field_0x6 & 4)" ( (binary_expression "prVar8->field_0x6 & 4" (field_expression "prVar8->field_0x6" identifier -> field_identifier) & number_literal) )) != number_literal) )) && (parenthesized_expression "(0 < iVar9)" ( (binary_expression "0 < iVar9" number_literal < identifier) ))) )) ;) })) (expression_statement "IVar6 = duplicate_node(dfa,elem,init_constraint);" (assignment_expression "IVar6 = duplicate_node(dfa,elem,init_constraint)" identifier = (call_expression "duplicate_node(dfa,elem,init_constraint)" identifier (argument_list "(dfa,elem,init_constraint)" ( identifier , identifier , identifier )))) ;) (if_statement "if (IVar6 == -1) {\n        return _REG_ESPACE;\n      }" if (parenthesized_expression "(IVar6 == -1)" ( (binary_expression "IVar6 == -1" identifier == number_literal) )) (compound_statement "{\n        return _REG_ESPACE;\n      }" { (return_statement "return _REG_ESPACE;" return identifier ;) })) (expression_statement "_Var4 = re_node_set_insert(dfa->edests + top_clone_node,IVar6);" (assignment_expression "_Var4 = re_node_set_insert(dfa->edests + top_clone_node,IVar6)" identifier = (call_expression "re_node_set_insert(dfa->edests + top_clone_node,IVar6)" identifier (argument_list "(dfa->edests + top_clone_node,IVar6)" ( (binary_expression "dfa->edests + top_clone_node" (field_expression "dfa->edests" identifier -> field_identifier) + identifier) , identifier )))) ;) (if_statement "if (!_Var4) {\n        return _REG_ESPACE;\n      }" if (parenthesized_expression "(!_Var4)" ( (unary_expression "!_Var4" ! identifier) )) (compound_statement "{\n        return _REG_ESPACE;\n      }" { (return_statement "return _REG_ESPACE;" return identifier ;) })) (expression_statement "rVar7 = duplicate_node_closure(dfa,elem,IVar6,root_node,init_constraint);" (assignment_expression "rVar7 = duplicate_node_closure(dfa,elem,IVar6,root_node,init_constraint)" identifier = (call_expression "duplicate_node_closure(dfa,elem,IVar6,root_node,init_constraint)" identifier (argument_list "(dfa,elem,IVar6,root_node,init_constraint)" ( identifier , identifier , identifier , identifier , identifier )))) ;) (if_statement "if (rVar7 != _REG_NOERROR) {\n        return rVar7;\n      }" if (parenthesized_expression "(rVar7 != _REG_NOERROR)" ( (binary_expression "rVar7 != _REG_NOERROR" identifier != identifier) )) (compound_statement "{\n        return rVar7;\n      }" { (return_statement "return rVar7;" return identifier ;) })) (labeled_statement "LAB_00022ad1:\n      elem = dfa->edests[top_org_node].elems[1];" statement_identifier : (expression_statement "elem = dfa->edests[top_org_node].elems[1];" (assignment_expression "elem = dfa->edests[top_org_node].elems[1]" identifier = (subscript_expression "dfa->edests[top_org_node].elems[1]" (field_expression "dfa->edests[top_org_node].elems" (subscript_expression "dfa->edests[top_org_node]" (field_expression "dfa->edests" identifier -> field_identifier) [ identifier ]) . field_identifier) [ number_literal ])) ;)) (expression_statement "IVar6 = duplicate_node(dfa,elem,init_constraint);" (assignment_expression "IVar6 = duplicate_node(dfa,elem,init_constraint)" identifier = (call_expression "duplicate_node(dfa,elem,init_constraint)" identifier (argument_list "(dfa,elem,init_constraint)" ( identifier , identifier , identifier )))) ;) (if_statement "if (IVar6 == -1) {\n        return _REG_ESPACE;\n      }" if (parenthesized_expression "(IVar6 == -1)" ( (binary_expression "IVar6 == -1" identifier == number_literal) )) (compound_statement "{\n        return _REG_ESPACE;\n      }" { (return_statement "return _REG_ESPACE;" return identifier ;) })) (expression_statement "bVar5 = re_node_set_insert(dfa->edests + top_clone_node,IVar6);" (assignment_expression "bVar5 = re_node_set_insert(dfa->edests + top_clone_node,IVar6)" identifier = (call_expression "re_node_set_insert(dfa->edests + top_clone_node,IVar6)" identifier (argument_list "(dfa->edests + top_clone_node,IVar6)" ( (binary_expression "dfa->edests + top_clone_node" (field_expression "dfa->edests" identifier -> field_identifier) + identifier) , identifier )))) ;) }))) (expression_statement "top_clone_node = IVar6;" (assignment_expression "top_clone_node = IVar6" identifier = identifier) ;) (expression_statement "top_org_node = elem;" (assignment_expression "top_org_node = elem" identifier = identifier) ;) (if_statement "if (!bVar5) {\n      return _REG_ESPACE;\n    }" if (parenthesized_expression "(!bVar5)" ( (unary_expression "!bVar5" ! identifier) )) (compound_statement "{\n      return _REG_ESPACE;\n    }" { (return_statement "return _REG_ESPACE;" return identifier ;) })) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit "int __regparm3 FUN_000229f0(int *param_1,int param_2,int param_3,int param_4,uint param_5)\n\n{\n  int iVar1;\n  char cVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  int iVar7;\n  \n  do {\n    while( true ) {\n      iVar7 = *param_1;\n      iVar4 = param_1[5];\n      iVar5 = iVar7 + param_2 * 8;\n      if (*(char *)(iVar5 + 4) != '\x04') break;\n      iVar5 = param_2 * 4;\n      param_2 = *(int *)(param_1[3] + param_2 * 4);\n      *(undefined4 *)(iVar4 + 4 + param_3 * 0xc) = 0;\n      iVar7 = FUN_00022950();\n      if (iVar7 == -1) {\n        return 0xc;\n      }\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar5);\n      cVar2 = FUN_00021a30(param_3 * 0xc + param_1[5],iVar7);\n      param_3 = iVar7;\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n    }\n    iVar1 = iVar4 + param_2 * 0xc;\n    iVar3 = *(int *)(iVar1 + 4);\n    if (iVar3 == 0) {\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n      return 0;\n    }\n    iVar6 = param_3 * 0xc;\n    iVar4 = iVar4 + iVar6;\n    iVar1 = **(int **)(iVar1 + 8);\n    *(undefined4 *)(iVar4 + 4) = 0;\n    if (iVar3 == 1) {\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        cVar2 = FUN_00021a30(iVar4,iVar1);\n        if (cVar2 == '\0') {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | *(uint *)(iVar5 + 4) >> 8 & 0x3ff;\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n      param_2 = iVar1;\n    }\n    else {\n      iVar5 = param_1[2] + -1;\n      iVar3 = iVar7 + iVar5 * 8;\n      if (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)) {\n        iVar7 = (iVar7 + param_1[2] * 8) - iVar3;\n        do {\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));\n      }\n      iVar5 = FUN_00022950();\n      if (iVar5 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],iVar5);\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n      iVar5 = FUN_000229f0(param_4,param_5);\n      if (iVar5 != 0) {\n        return iVar5;\n      }\nLAB_00022ad1:\n      param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4);\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n    }\n    if (cVar2 == '\0') {\n      return 0xc;\n    }\n  } while( true );\n}\n\n" (function_definition "int __regparm3 FUN_000229f0(int *param_1,int param_2,int param_3,int param_4,uint param_5)\n\n{\n  int iVar1;\n  char cVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  int iVar7;\n  \n  do {\n    while( true ) {\n      iVar7 = *param_1;\n      iVar4 = param_1[5];\n      iVar5 = iVar7 + param_2 * 8;\n      if (*(char *)(iVar5 + 4) != '\x04') break;\n      iVar5 = param_2 * 4;\n      param_2 = *(int *)(param_1[3] + param_2 * 4);\n      *(undefined4 *)(iVar4 + 4 + param_3 * 0xc) = 0;\n      iVar7 = FUN_00022950();\n      if (iVar7 == -1) {\n        return 0xc;\n      }\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar5);\n      cVar2 = FUN_00021a30(param_3 * 0xc + param_1[5],iVar7);\n      param_3 = iVar7;\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n    }\n    iVar1 = iVar4 + param_2 * 0xc;\n    iVar3 = *(int *)(iVar1 + 4);\n    if (iVar3 == 0) {\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n      return 0;\n    }\n    iVar6 = param_3 * 0xc;\n    iVar4 = iVar4 + iVar6;\n    iVar1 = **(int **)(iVar1 + 8);\n    *(undefined4 *)(iVar4 + 4) = 0;\n    if (iVar3 == 1) {\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        cVar2 = FUN_00021a30(iVar4,iVar1);\n        if (cVar2 == '\0') {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | *(uint *)(iVar5 + 4) >> 8 & 0x3ff;\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n      param_2 = iVar1;\n    }\n    else {\n      iVar5 = param_1[2] + -1;\n      iVar3 = iVar7 + iVar5 * 8;\n      if (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)) {\n        iVar7 = (iVar7 + param_1[2] * 8) - iVar3;\n        do {\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));\n      }\n      iVar5 = FUN_00022950();\n      if (iVar5 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],iVar5);\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n      iVar5 = FUN_000229f0(param_4,param_5);\n      if (iVar5 != 0) {\n        return iVar5;\n      }\nLAB_00022ad1:\n      param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4);\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n    }\n    if (cVar2 == '\0') {\n      return 0xc;\n    }\n  } while( true );\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_000229f0(int *param_1,int param_2,int param_3,int param_4,uint param_5)" identifier (parameter_list "(int *param_1,int param_2,int param_3,int param_4,uint param_5)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int param_4" primitive_type identifier) , (parameter_declaration "uint param_5" type_identifier identifier) ))) (compound_statement "{\n  int iVar1;\n  char cVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  int iVar7;\n  \n  do {\n    while( true ) {\n      iVar7 = *param_1;\n      iVar4 = param_1[5];\n      iVar5 = iVar7 + param_2 * 8;\n      if (*(char *)(iVar5 + 4) != '\x04') break;\n      iVar5 = param_2 * 4;\n      param_2 = *(int *)(param_1[3] + param_2 * 4);\n      *(undefined4 *)(iVar4 + 4 + param_3 * 0xc) = 0;\n      iVar7 = FUN_00022950();\n      if (iVar7 == -1) {\n        return 0xc;\n      }\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar5);\n      cVar2 = FUN_00021a30(param_3 * 0xc + param_1[5],iVar7);\n      param_3 = iVar7;\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n    }\n    iVar1 = iVar4 + param_2 * 0xc;\n    iVar3 = *(int *)(iVar1 + 4);\n    if (iVar3 == 0) {\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n      return 0;\n    }\n    iVar6 = param_3 * 0xc;\n    iVar4 = iVar4 + iVar6;\n    iVar1 = **(int **)(iVar1 + 8);\n    *(undefined4 *)(iVar4 + 4) = 0;\n    if (iVar3 == 1) {\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        cVar2 = FUN_00021a30(iVar4,iVar1);\n        if (cVar2 == '\0') {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | *(uint *)(iVar5 + 4) >> 8 & 0x3ff;\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n      param_2 = iVar1;\n    }\n    else {\n      iVar5 = param_1[2] + -1;\n      iVar3 = iVar7 + iVar5 * 8;\n      if (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)) {\n        iVar7 = (iVar7 + param_1[2] * 8) - iVar3;\n        do {\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));\n      }\n      iVar5 = FUN_00022950();\n      if (iVar5 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],iVar5);\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n      iVar5 = FUN_000229f0(param_4,param_5);\n      if (iVar5 != 0) {\n        return iVar5;\n      }\nLAB_00022ad1:\n      param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4);\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n    }\n    if (cVar2 == '\0') {\n      return 0xc;\n    }\n  } while( true );\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (do_statement "do {\n    while( true ) {\n      iVar7 = *param_1;\n      iVar4 = param_1[5];\n      iVar5 = iVar7 + param_2 * 8;\n      if (*(char *)(iVar5 + 4) != '\x04') break;\n      iVar5 = param_2 * 4;\n      param_2 = *(int *)(param_1[3] + param_2 * 4);\n      *(undefined4 *)(iVar4 + 4 + param_3 * 0xc) = 0;\n      iVar7 = FUN_00022950();\n      if (iVar7 == -1) {\n        return 0xc;\n      }\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar5);\n      cVar2 = FUN_00021a30(param_3 * 0xc + param_1[5],iVar7);\n      param_3 = iVar7;\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n    }\n    iVar1 = iVar4 + param_2 * 0xc;\n    iVar3 = *(int *)(iVar1 + 4);\n    if (iVar3 == 0) {\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n      return 0;\n    }\n    iVar6 = param_3 * 0xc;\n    iVar4 = iVar4 + iVar6;\n    iVar1 = **(int **)(iVar1 + 8);\n    *(undefined4 *)(iVar4 + 4) = 0;\n    if (iVar3 == 1) {\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        cVar2 = FUN_00021a30(iVar4,iVar1);\n        if (cVar2 == '\0') {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | *(uint *)(iVar5 + 4) >> 8 & 0x3ff;\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n      param_2 = iVar1;\n    }\n    else {\n      iVar5 = param_1[2] + -1;\n      iVar3 = iVar7 + iVar5 * 8;\n      if (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)) {\n        iVar7 = (iVar7 + param_1[2] * 8) - iVar3;\n        do {\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));\n      }\n      iVar5 = FUN_00022950();\n      if (iVar5 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],iVar5);\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n      iVar5 = FUN_000229f0(param_4,param_5);\n      if (iVar5 != 0) {\n        return iVar5;\n      }\nLAB_00022ad1:\n      param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4);\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n    }\n    if (cVar2 == '\0') {\n      return 0xc;\n    }\n  } while( true );" do (compound_statement "{\n    while( true ) {\n      iVar7 = *param_1;\n      iVar4 = param_1[5];\n      iVar5 = iVar7 + param_2 * 8;\n      if (*(char *)(iVar5 + 4) != '\x04') break;\n      iVar5 = param_2 * 4;\n      param_2 = *(int *)(param_1[3] + param_2 * 4);\n      *(undefined4 *)(iVar4 + 4 + param_3 * 0xc) = 0;\n      iVar7 = FUN_00022950();\n      if (iVar7 == -1) {\n        return 0xc;\n      }\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar5);\n      cVar2 = FUN_00021a30(param_3 * 0xc + param_1[5],iVar7);\n      param_3 = iVar7;\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n    }\n    iVar1 = iVar4 + param_2 * 0xc;\n    iVar3 = *(int *)(iVar1 + 4);\n    if (iVar3 == 0) {\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n      return 0;\n    }\n    iVar6 = param_3 * 0xc;\n    iVar4 = iVar4 + iVar6;\n    iVar1 = **(int **)(iVar1 + 8);\n    *(undefined4 *)(iVar4 + 4) = 0;\n    if (iVar3 == 1) {\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        cVar2 = FUN_00021a30(iVar4,iVar1);\n        if (cVar2 == '\0') {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | *(uint *)(iVar5 + 4) >> 8 & 0x3ff;\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n      param_2 = iVar1;\n    }\n    else {\n      iVar5 = param_1[2] + -1;\n      iVar3 = iVar7 + iVar5 * 8;\n      if (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)) {\n        iVar7 = (iVar7 + param_1[2] * 8) - iVar3;\n        do {\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));\n      }\n      iVar5 = FUN_00022950();\n      if (iVar5 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],iVar5);\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n      iVar5 = FUN_000229f0(param_4,param_5);\n      if (iVar5 != 0) {\n        return iVar5;\n      }\nLAB_00022ad1:\n      param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4);\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n    }\n    if (cVar2 == '\0') {\n      return 0xc;\n    }\n  }" { (while_statement "while( true ) {\n      iVar7 = *param_1;\n      iVar4 = param_1[5];\n      iVar5 = iVar7 + param_2 * 8;\n      if (*(char *)(iVar5 + 4) != '\x04') break;\n      iVar5 = param_2 * 4;\n      param_2 = *(int *)(param_1[3] + param_2 * 4);\n      *(undefined4 *)(iVar4 + 4 + param_3 * 0xc) = 0;\n      iVar7 = FUN_00022950();\n      if (iVar7 == -1) {\n        return 0xc;\n      }\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar5);\n      cVar2 = FUN_00021a30(param_3 * 0xc + param_1[5],iVar7);\n      param_3 = iVar7;\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      iVar7 = *param_1;\n      iVar4 = param_1[5];\n      iVar5 = iVar7 + param_2 * 8;\n      if (*(char *)(iVar5 + 4) != '\x04') break;\n      iVar5 = param_2 * 4;\n      param_2 = *(int *)(param_1[3] + param_2 * 4);\n      *(undefined4 *)(iVar4 + 4 + param_3 * 0xc) = 0;\n      iVar7 = FUN_00022950();\n      if (iVar7 == -1) {\n        return 0xc;\n      }\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar5);\n      cVar2 = FUN_00021a30(param_3 * 0xc + param_1[5],iVar7);\n      param_3 = iVar7;\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n    }" { (expression_statement "iVar7 = *param_1;" (assignment_expression "iVar7 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "iVar4 = param_1[5];" (assignment_expression "iVar4 = param_1[5]" identifier = (subscript_expression "param_1[5]" identifier [ number_literal ])) ;) (expression_statement "iVar5 = iVar7 + param_2 * 8;" (assignment_expression "iVar5 = iVar7 + param_2 * 8" identifier = (binary_expression "iVar7 + param_2 * 8" identifier + (binary_expression "param_2 * 8" identifier * number_literal))) ;) (if_statement "if (*(char *)(iVar5 + 4) != '\x04') break;" if (parenthesized_expression "(*(char *)(iVar5 + 4) != '\x04')" ( (binary_expression "*(char *)(iVar5 + 4) != '\x04'" (pointer_expression "*(char *)(iVar5 + 4)" * (cast_expression "(char *)(iVar5 + 4)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 4)" ( (binary_expression "iVar5 + 4" identifier + number_literal) )))) != (char_literal "'\x04'" ' escape_sequence ')) )) (break_statement "break;" break ;)) (expression_statement "iVar5 = param_2 * 4;" (assignment_expression "iVar5 = param_2 * 4" identifier = (binary_expression "param_2 * 4" identifier * number_literal)) ;) (expression_statement "param_2 = *(int *)(param_1[3] + param_2 * 4);" (assignment_expression "param_2 = *(int *)(param_1[3] + param_2 * 4)" identifier = (pointer_expression "*(int *)(param_1[3] + param_2 * 4)" * (cast_expression "(int *)(param_1[3] + param_2 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[3] + param_2 * 4)" ( (binary_expression "param_1[3] + param_2 * 4" (subscript_expression "param_1[3]" identifier [ number_literal ]) + (binary_expression "param_2 * 4" identifier * number_literal)) ))))) ;) (expression_statement "*(undefined4 *)(iVar4 + 4 + param_3 * 0xc) = 0;" (assignment_expression "*(undefined4 *)(iVar4 + 4 + param_3 * 0xc) = 0" (pointer_expression "*(undefined4 *)(iVar4 + 4 + param_3 * 0xc)" * (cast_expression "(undefined4 *)(iVar4 + 4 + param_3 * 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 4 + param_3 * 0xc)" ( (binary_expression "iVar4 + 4 + param_3 * 0xc" (binary_expression "iVar4 + 4" identifier + number_literal) + (binary_expression "param_3 * 0xc" identifier * number_literal)) )))) = number_literal) ;) (expression_statement "iVar7 = FUN_00022950();" (assignment_expression "iVar7 = FUN_00022950()" identifier = (call_expression "FUN_00022950()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar7 == -1) {\n        return 0xc;\n      }" if (parenthesized_expression "(iVar7 == -1)" ( (binary_expression "iVar7 == -1" identifier == number_literal) )) (compound_statement "{\n        return 0xc;\n      }" { (return_statement "return 0xc;" return number_literal ;) })) (expression_statement "*(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar5);" (assignment_expression "*(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar5)" (pointer_expression "*(undefined4 *)(param_1[3] + param_3 * 4)" * (cast_expression "(undefined4 *)(param_1[3] + param_3 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[3] + param_3 * 4)" ( (binary_expression "param_1[3] + param_3 * 4" (subscript_expression "param_1[3]" identifier [ number_literal ]) + (binary_expression "param_3 * 4" identifier * number_literal)) )))) = (pointer_expression "*(undefined4 *)(param_1[3] + iVar5)" * (cast_expression "(undefined4 *)(param_1[3] + iVar5)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[3] + iVar5)" ( (binary_expression "param_1[3] + iVar5" (subscript_expression "param_1[3]" identifier [ number_literal ]) + identifier) ))))) ;) (expression_statement "cVar2 = FUN_00021a30(param_3 * 0xc + param_1[5],iVar7);" (assignment_expression "cVar2 = FUN_00021a30(param_3 * 0xc + param_1[5],iVar7)" identifier = (call_expression "FUN_00021a30(param_3 * 0xc + param_1[5],iVar7)" identifier (argument_list "(param_3 * 0xc + param_1[5],iVar7)" ( (binary_expression "param_3 * 0xc + param_1[5]" (binary_expression "param_3 * 0xc" identifier * number_literal) + (subscript_expression "param_1[5]" identifier [ number_literal ])) , identifier )))) ;) (expression_statement "param_3 = iVar7;" (assignment_expression "param_3 = iVar7" identifier = identifier) ;) (if_statement "if (cVar2 == '\0') {\n        return 0xc;\n      }" if (parenthesized_expression "(cVar2 == '\0')" ( (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        return 0xc;\n      }" { (return_statement "return 0xc;" return number_literal ;) })) })) (expression_statement "iVar1 = iVar4 + param_2 * 0xc;" (assignment_expression "iVar1 = iVar4 + param_2 * 0xc" identifier = (binary_expression "iVar4 + param_2 * 0xc" identifier + (binary_expression "param_2 * 0xc" identifier * number_literal))) ;) (expression_statement "iVar3 = *(int *)(iVar1 + 4);" (assignment_expression "iVar3 = *(int *)(iVar1 + 4)" identifier = (pointer_expression "*(int *)(iVar1 + 4)" * (cast_expression "(int *)(iVar1 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 4)" ( (binary_expression "iVar1 + 4" identifier + number_literal) ))))) ;) (if_statement "if (iVar3 == 0) {\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n      return 0;\n    }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n      return 0;\n    }" { (expression_statement "*(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);" (assignment_expression "*(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4)" (pointer_expression "*(undefined4 *)(param_1[3] + param_3 * 4)" * (cast_expression "(undefined4 *)(param_1[3] + param_3 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[3] + param_3 * 4)" ( (binary_expression "param_1[3] + param_3 * 4" (subscript_expression "param_1[3]" identifier [ number_literal ]) + (binary_expression "param_3 * 4" identifier * number_literal)) )))) = (pointer_expression "*(undefined4 *)(param_1[3] + param_2 * 4)" * (cast_expression "(undefined4 *)(param_1[3] + param_2 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[3] + param_2 * 4)" ( (binary_expression "param_1[3] + param_2 * 4" (subscript_expression "param_1[3]" identifier [ number_literal ]) + (binary_expression "param_2 * 4" identifier * number_literal)) ))))) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar6 = param_3 * 0xc;" (assignment_expression "iVar6 = param_3 * 0xc" identifier = (binary_expression "param_3 * 0xc" identifier * number_literal)) ;) (expression_statement "iVar4 = iVar4 + iVar6;" (assignment_expression "iVar4 = iVar4 + iVar6" identifier = (binary_expression "iVar4 + iVar6" identifier + identifier)) ;) (expression_statement "iVar1 = **(int **)(iVar1 + 8);" (assignment_expression "iVar1 = **(int **)(iVar1 + 8)" identifier = (pointer_expression "**(int **)(iVar1 + 8)" * (pointer_expression "*(int **)(iVar1 + 8)" * (cast_expression "(int **)(iVar1 + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar1 + 8)" ( (binary_expression "iVar1 + 8" identifier + number_literal) )))))) ;) (expression_statement "*(undefined4 *)(iVar4 + 4) = 0;" (assignment_expression "*(undefined4 *)(iVar4 + 4) = 0" (pointer_expression "*(undefined4 *)(iVar4 + 4)" * (cast_expression "(undefined4 *)(iVar4 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 4)" ( (binary_expression "iVar4 + 4" identifier + number_literal) )))) = number_literal) ;) (if_statement "if (iVar3 == 1) {\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        cVar2 = FUN_00021a30(iVar4,iVar1);\n        if (cVar2 == '\0') {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | *(uint *)(iVar5 + 4) >> 8 & 0x3ff;\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n      param_2 = iVar1;\n    }\n    else {\n      iVar5 = param_1[2] + -1;\n      iVar3 = iVar7 + iVar5 * 8;\n      if (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)) {\n        iVar7 = (iVar7 + param_1[2] * 8) - iVar3;\n        do {\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));\n      }\n      iVar5 = FUN_00022950();\n      if (iVar5 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],iVar5);\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n      iVar5 = FUN_000229f0(param_4,param_5);\n      if (iVar5 != 0) {\n        return iVar5;\n      }\nLAB_00022ad1:\n      param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4);\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n    }" if (parenthesized_expression "(iVar3 == 1)" ( (binary_expression "iVar3 == 1" identifier == number_literal) )) (compound_statement "{\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        cVar2 = FUN_00021a30(iVar4,iVar1);\n        if (cVar2 == '\0') {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | *(uint *)(iVar5 + 4) >> 8 & 0x3ff;\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n      param_2 = iVar1;\n    }" { (if_statement "if ((param_2 == param_4) && (param_2 != param_3)) {\n        cVar2 = FUN_00021a30(iVar4,iVar1);\n        if (cVar2 == '\0') {\n          return 0xc;\n        }\n        return 0;\n      }" if (parenthesized_expression "((param_2 == param_4) && (param_2 != param_3))" ( (binary_expression "(param_2 == param_4) && (param_2 != param_3)" (parenthesized_expression "(param_2 == param_4)" ( (binary_expression "param_2 == param_4" identifier == identifier) )) && (parenthesized_expression "(param_2 != param_3)" ( (binary_expression "param_2 != param_3" identifier != identifier) ))) )) (compound_statement "{\n        cVar2 = FUN_00021a30(iVar4,iVar1);\n        if (cVar2 == '\0') {\n          return 0xc;\n        }\n        return 0;\n      }" { (expression_statement "cVar2 = FUN_00021a30(iVar4,iVar1);" (assignment_expression "cVar2 = FUN_00021a30(iVar4,iVar1)" identifier = (call_expression "FUN_00021a30(iVar4,iVar1)" identifier (argument_list "(iVar4,iVar1)" ( identifier , identifier )))) ;) (if_statement "if (cVar2 == '\0') {\n          return 0xc;\n        }" if (parenthesized_expression "(cVar2 == '\0')" ( (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n          return 0xc;\n        }" { (return_statement "return 0xc;" return number_literal ;) })) (return_statement "return 0;" return number_literal ;) })) (expression_statement "param_5 = param_5 | *(uint *)(iVar5 + 4) >> 8 & 0x3ff;" (assignment_expression "param_5 = param_5 | *(uint *)(iVar5 + 4) >> 8 & 0x3ff" identifier = (binary_expression "param_5 | *(uint *)(iVar5 + 4) >> 8 & 0x3ff" identifier | (binary_expression "*(uint *)(iVar5 + 4) >> 8 & 0x3ff" (binary_expression "*(uint *)(iVar5 + 4) >> 8" (pointer_expression "*(uint *)(iVar5 + 4)" * (cast_expression "(uint *)(iVar5 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 4)" ( (binary_expression "iVar5 + 4" identifier + number_literal) )))) >> number_literal) & number_literal))) ;) (expression_statement "param_3 = FUN_00022950();" (assignment_expression "param_3 = FUN_00022950()" identifier = (call_expression "FUN_00022950()" identifier (argument_list "()" ( )))) ;) (if_statement "if (param_3 == -1) {\n        return 0xc;\n      }" if (parenthesized_expression "(param_3 == -1)" ( (binary_expression "param_3 == -1" identifier == number_literal) )) (compound_statement "{\n        return 0xc;\n      }" { (return_statement "return 0xc;" return number_literal ;) })) (expression_statement "cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);" (assignment_expression "cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3)" identifier = (call_expression "FUN_00021a30(iVar6 + param_1[5],param_3)" identifier (argument_list "(iVar6 + param_1[5],param_3)" ( (binary_expression "iVar6 + param_1[5]" identifier + (subscript_expression "param_1[5]" identifier [ number_literal ])) , identifier )))) ;) (expression_statement "param_2 = iVar1;" (assignment_expression "param_2 = iVar1" identifier = identifier) ;) }) (else_clause "else {\n      iVar5 = param_1[2] + -1;\n      iVar3 = iVar7 + iVar5 * 8;\n      if (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)) {\n        iVar7 = (iVar7 + param_1[2] * 8) - iVar3;\n        do {\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));\n      }\n      iVar5 = FUN_00022950();\n      if (iVar5 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],iVar5);\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n      iVar5 = FUN_000229f0(param_4,param_5);\n      if (iVar5 != 0) {\n        return iVar5;\n      }\nLAB_00022ad1:\n      param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4);\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n    }" else (compound_statement "{\n      iVar5 = param_1[2] + -1;\n      iVar3 = iVar7 + iVar5 * 8;\n      if (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)) {\n        iVar7 = (iVar7 + param_1[2] * 8) - iVar3;\n        do {\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));\n      }\n      iVar5 = FUN_00022950();\n      if (iVar5 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],iVar5);\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n      iVar5 = FUN_000229f0(param_4,param_5);\n      if (iVar5 != 0) {\n        return iVar5;\n      }\nLAB_00022ad1:\n      param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4);\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n    }" { (expression_statement "iVar5 = param_1[2] + -1;" (assignment_expression "iVar5 = param_1[2] + -1" identifier = (binary_expression "param_1[2] + -1" (subscript_expression "param_1[2]" identifier [ number_literal ]) + number_literal)) ;) (expression_statement "iVar3 = iVar7 + iVar5 * 8;" (assignment_expression "iVar3 = iVar7 + iVar5 * 8" identifier = (binary_expression "iVar7 + iVar5 * 8" identifier + (binary_expression "iVar5 * 8" identifier * number_literal))) ;) (if_statement "if (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)) {\n        iVar7 = (iVar7 + param_1[2] * 8) - iVar3;\n        do {\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));\n      }" if (parenthesized_expression "(((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5))" ( (binary_expression "((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)" (parenthesized_expression "((*(byte *)(iVar3 + 6) & 4) != 0)" ( (binary_expression "(*(byte *)(iVar3 + 6) & 4) != 0" (parenthesized_expression "(*(byte *)(iVar3 + 6) & 4)" ( (binary_expression "*(byte *)(iVar3 + 6) & 4" (pointer_expression "*(byte *)(iVar3 + 6)" * (cast_expression "(byte *)(iVar3 + 6)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 6)" ( (binary_expression "iVar3 + 6" identifier + number_literal) )))) & number_literal) )) != number_literal) )) && (parenthesized_expression "(0 < iVar5)" ( (binary_expression "0 < iVar5" number_literal < identifier) ))) )) (compound_statement "{\n        iVar7 = (iVar7 + param_1[2] * 8) - iVar3;\n        do {\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));\n      }" { (expression_statement "iVar7 = (iVar7 + param_1[2] * 8) - iVar3;" (assignment_expression "iVar7 = (iVar7 + param_1[2] * 8) - iVar3" identifier = (binary_expression "(iVar7 + param_1[2] * 8) - iVar3" (parenthesized_expression "(iVar7 + param_1[2] * 8)" ( (binary_expression "iVar7 + param_1[2] * 8" identifier + (binary_expression "param_1[2] * 8" (subscript_expression "param_1[2]" identifier [ number_literal ]) * number_literal)) )) - identifier)) ;) (do_statement "do {\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));" do (compound_statement "{\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        }" { (if_statement "if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }" if (parenthesized_expression "((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff)))" ( (binary_expression "(*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))" (parenthesized_expression "(*(int *)(param_1[4] + iVar5 * 4) == iVar1)" ( (binary_expression "*(int *)(param_1[4] + iVar5 * 4) == iVar1" (pointer_expression "*(int *)(param_1[4] + iVar5 * 4)" * (cast_expression "(int *)(param_1[4] + iVar5 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[4] + iVar5 * 4)" ( (binary_expression "param_1[4] + iVar5 * 4" (subscript_expression "param_1[4]" identifier [ number_literal ]) + (binary_expression "iVar5 * 4" identifier * number_literal)) )))) == identifier) )) && (parenthesized_expression "(param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))" ( (binary_expression "param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff)" identifier == (parenthesized_expression "(*(uint *)(iVar3 + 4) >> 8 & 0x3ff)" ( (binary_expression "*(uint *)(iVar3 + 4) >> 8 & 0x3ff" (binary_expression "*(uint *)(iVar3 + 4) >> 8" (pointer_expression "*(uint *)(iVar3 + 4)" * (cast_expression "(uint *)(iVar3 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 4)" ( (binary_expression "iVar3 + 4" identifier + number_literal) )))) >> number_literal) & number_literal) ))) ))) )) (compound_statement "{\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }" { (expression_statement "cVar2 = FUN_00021a30(iVar4,iVar5);" (assignment_expression "cVar2 = FUN_00021a30(iVar4,iVar5)" identifier = (call_expression "FUN_00021a30(iVar4,iVar5)" identifier (argument_list "(iVar4,iVar5)" ( identifier , identifier )))) ;) (if_statement "if (cVar2 == '\0') {\n              return 0xc;\n            }" if (parenthesized_expression "(cVar2 == '\0')" ( (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n              return 0xc;\n            }" { (return_statement "return 0xc;" return number_literal ;) })) (goto_statement "goto LAB_00022ad1;" goto statement_identifier ;) })) (expression_statement "iVar3 = iVar3 + iVar7 + -0x10;" (assignment_expression "iVar3 = iVar3 + iVar7 + -0x10" identifier = (binary_expression "iVar3 + iVar7 + -0x10" (binary_expression "iVar3 + iVar7" identifier + identifier) + number_literal)) ;) (expression_statement "iVar5 = iVar5 + -1;" (assignment_expression "iVar5 = iVar5 + -1" identifier = (binary_expression "iVar5 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5))" ( (binary_expression "((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)" (parenthesized_expression "((*(byte *)(iVar3 + 6) & 4) != 0)" ( (binary_expression "(*(byte *)(iVar3 + 6) & 4) != 0" (parenthesized_expression "(*(byte *)(iVar3 + 6) & 4)" ( (binary_expression "*(byte *)(iVar3 + 6) & 4" (pointer_expression "*(byte *)(iVar3 + 6)" * (cast_expression "(byte *)(iVar3 + 6)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 6)" ( (binary_expression "iVar3 + 6" identifier + number_literal) )))) & number_literal) )) != number_literal) )) && (parenthesized_expression "(0 < iVar5)" ( (binary_expression "0 < iVar5" number_literal < identifier) ))) )) ;) })) (expression_statement "iVar5 = FUN_00022950();" (assignment_expression "iVar5 = FUN_00022950()" identifier = (call_expression "FUN_00022950()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar5 == -1) {\n        return 0xc;\n      }" if (parenthesized_expression "(iVar5 == -1)" ( (binary_expression "iVar5 == -1" identifier == number_literal) )) (compound_statement "{\n        return 0xc;\n      }" { (return_statement "return 0xc;" return number_literal ;) })) (expression_statement "cVar2 = FUN_00021a30(iVar6 + param_1[5],iVar5);" (assignment_expression "cVar2 = FUN_00021a30(iVar6 + param_1[5],iVar5)" identifier = (call_expression "FUN_00021a30(iVar6 + param_1[5],iVar5)" identifier (argument_list "(iVar6 + param_1[5],iVar5)" ( (binary_expression "iVar6 + param_1[5]" identifier + (subscript_expression "param_1[5]" identifier [ number_literal ])) , identifier )))) ;) (if_statement "if (cVar2 == '\0') {\n        return 0xc;\n      }" if (parenthesized_expression "(cVar2 == '\0')" ( (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        return 0xc;\n      }" { (return_statement "return 0xc;" return number_literal ;) })) (expression_statement "iVar5 = FUN_000229f0(param_4,param_5);" (assignment_expression "iVar5 = FUN_000229f0(param_4,param_5)" identifier = (call_expression "FUN_000229f0(param_4,param_5)" identifier (argument_list "(param_4,param_5)" ( identifier , identifier )))) ;) (if_statement "if (iVar5 != 0) {\n        return iVar5;\n      }" if (parenthesized_expression "(iVar5 != 0)" ( (binary_expression "iVar5 != 0" identifier != number_literal) )) (compound_statement "{\n        return iVar5;\n      }" { (return_statement "return iVar5;" return identifier ;) })) (labeled_statement "LAB_00022ad1:\n      param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4);" statement_identifier : (expression_statement "param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4);" (assignment_expression "param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4)" identifier = (pointer_expression "*(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4)" * (cast_expression "(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4)" ( (binary_expression "*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4" (pointer_expression "*(int *)(param_1[5] + 8 + param_2 * 0xc)" * (cast_expression "(int *)(param_1[5] + 8 + param_2 * 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[5] + 8 + param_2 * 0xc)" ( (binary_expression "param_1[5] + 8 + param_2 * 0xc" (binary_expression "param_1[5] + 8" (subscript_expression "param_1[5]" identifier [ number_literal ]) + number_literal) + (binary_expression "param_2 * 0xc" identifier * number_literal)) )))) + number_literal) ))))) ;)) (expression_statement "param_3 = FUN_00022950();" (assignment_expression "param_3 = FUN_00022950()" identifier = (call_expression "FUN_00022950()" identifier (argument_list "()" ( )))) ;) (if_statement "if (param_3 == -1) {\n        return 0xc;\n      }" if (parenthesized_expression "(param_3 == -1)" ( (binary_expression "param_3 == -1" identifier == number_literal) )) (compound_statement "{\n        return 0xc;\n      }" { (return_statement "return 0xc;" return number_literal ;) })) (expression_statement "cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);" (assignment_expression "cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3)" identifier = (call_expression "FUN_00021a30(iVar6 + param_1[5],param_3)" identifier (argument_list "(iVar6 + param_1[5],param_3)" ( (binary_expression "iVar6 + param_1[5]" identifier + (subscript_expression "param_1[5]" identifier [ number_literal ])) , identifier )))) ;) }))) (if_statement "if (cVar2 == '\0') {\n      return 0xc;\n    }" if (parenthesized_expression "(cVar2 == '\0')" ( (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      return 0xc;\n    }" { (return_statement "return 0xc;" return number_literal ;) })) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression IDENT * LIT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != (char_literal ' escape_sequence ')) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + (binary_expression IDENT * LIT)) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression (binary_expression IDENT * LIT) + (subscript_expression IDENT [ LIT ])) , IDENT )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (compound_statement { (return_statement return LIT ;) })) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression IDENT * LIT))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) ))))) ;) (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == IDENT) )) && (parenthesized_expression ( (binary_expression IDENT != IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (compound_statement { (return_statement return LIT ;) })) (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT | (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) >> LIT) & LIT))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + (subscript_expression IDENT [ LIT ])) , IDENT )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (subscript_expression IDENT [ LIT ]) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression IDENT * LIT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) != LIT) )) && (parenthesized_expression ( (binary_expression LIT < IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT + (binary_expression (subscript_expression IDENT [ LIT ]) * LIT)) )) - IDENT)) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) )))) == IDENT) )) && (parenthesized_expression ( (binary_expression IDENT == (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) >> LIT) & LIT) ))) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (compound_statement { (return_statement return LIT ;) })) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + IDENT) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) != LIT) )) && (parenthesized_expression ( (binary_expression LIT < IDENT) ))) )) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + (subscript_expression IDENT [ LIT ])) , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return IDENT ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) + (binary_expression IDENT * LIT)) )))) + LIT) ))))) ;)) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + (subscript_expression IDENT [ LIT ])) , IDENT )))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (compound_statement { (return_statement return LIT ;) })) }) while (parenthesized_expression ( BOOL )) ;) })))
(function_definition "int __regparm3 FUN_000229f0(int *param_1,int param_2,int param_3,int param_4,uint param_5)\n\n{\n  int iVar1;\n  char cVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  int iVar7;\n  \n  do {\n    while( true ) {\n      iVar7 = *param_1;\n      iVar4 = param_1[5];\n      iVar5 = iVar7 + param_2 * 8;\n      if (*(char *)(iVar5 + 4) != '\x04') break;\n      iVar5 = param_2 * 4;\n      param_2 = *(int *)(param_1[3] + param_2 * 4);\n      *(undefined4 *)(iVar4 + 4 + param_3 * 0xc) = 0;\n      iVar7 = FUN_00022950();\n      if (iVar7 == -1) {\n        return 0xc;\n      }\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar5);\n      cVar2 = FUN_00021a30(param_3 * 0xc + param_1[5],iVar7);\n      param_3 = iVar7;\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n    }\n    iVar1 = iVar4 + param_2 * 0xc;\n    iVar3 = *(int *)(iVar1 + 4);\n    if (iVar3 == 0) {\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n      return 0;\n    }\n    iVar6 = param_3 * 0xc;\n    iVar4 = iVar4 + iVar6;\n    iVar1 = **(int **)(iVar1 + 8);\n    *(undefined4 *)(iVar4 + 4) = 0;\n    if (iVar3 == 1) {\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        cVar2 = FUN_00021a30(iVar4,iVar1);\n        if (cVar2 == '\0') {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | *(uint *)(iVar5 + 4) >> 8 & 0x3ff;\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n      param_2 = iVar1;\n    }\n    else {\n      iVar5 = param_1[2] + -1;\n      iVar3 = iVar7 + iVar5 * 8;\n      if (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)) {\n        iVar7 = (iVar7 + param_1[2] * 8) - iVar3;\n        do {\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));\n      }\n      iVar5 = FUN_00022950();\n      if (iVar5 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],iVar5);\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n      iVar5 = FUN_000229f0(param_4,param_5);\n      if (iVar5 != 0) {\n        return iVar5;\n      }\nLAB_00022ad1:\n      param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4);\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n    }\n    if (cVar2 == '\0') {\n      return 0xc;\n    }\n  } while( true );\n}" (primitive_type "int") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_000229f0(int *param_1,int param_2,int param_3,int param_4,uint param_5)" (identifier "FUN_000229f0") (parameter_list "(int *param_1,int param_2,int param_3,int param_4,uint param_5)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) (, ",") (parameter_declaration "int param_4" (primitive_type "int") (identifier "param_4")) (, ",") (parameter_declaration "uint param_5" (type_identifier "uint") (identifier "param_5")) () ")"))) (compound_statement "{\n  int iVar1;\n  char cVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  int iVar7;\n  \n  do {\n    while( true ) {\n      iVar7 = *param_1;\n      iVar4 = param_1[5];\n      iVar5 = iVar7 + param_2 * 8;\n      if (*(char *)(iVar5 + 4) != '\x04') break;\n      iVar5 = param_2 * 4;\n      param_2 = *(int *)(param_1[3] + param_2 * 4);\n      *(undefined4 *)(iVar4 + 4 + param_3 * 0xc) = 0;\n      iVar7 = FUN_00022950();\n      if (iVar7 == -1) {\n        return 0xc;\n      }\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar5);\n      cVar2 = FUN_00021a30(param_3 * 0xc + param_1[5],iVar7);\n      param_3 = iVar7;\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n    }\n    iVar1 = iVar4 + param_2 * 0xc;\n    iVar3 = *(int *)(iVar1 + 4);\n    if (iVar3 == 0) {\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n      return 0;\n    }\n    iVar6 = param_3 * 0xc;\n    iVar4 = iVar4 + iVar6;\n    iVar1 = **(int **)(iVar1 + 8);\n    *(undefined4 *)(iVar4 + 4) = 0;\n    if (iVar3 == 1) {\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        cVar2 = FUN_00021a30(iVar4,iVar1);\n        if (cVar2 == '\0') {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | *(uint *)(iVar5 + 4) >> 8 & 0x3ff;\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n      param_2 = iVar1;\n    }\n    else {\n      iVar5 = param_1[2] + -1;\n      iVar3 = iVar7 + iVar5 * 8;\n      if (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)) {\n        iVar7 = (iVar7 + param_1[2] * 8) - iVar3;\n        do {\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));\n      }\n      iVar5 = FUN_00022950();\n      if (iVar5 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],iVar5);\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n      iVar5 = FUN_000229f0(param_4,param_5);\n      if (iVar5 != 0) {\n        return iVar5;\n      }\nLAB_00022ad1:\n      param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4);\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n    }\n    if (cVar2 == '\0') {\n      return 0xc;\n    }\n  } while( true );\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "char cVar2;" (primitive_type "char") (identifier "cVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (do_statement "do {\n    while( true ) {\n      iVar7 = *param_1;\n      iVar4 = param_1[5];\n      iVar5 = iVar7 + param_2 * 8;\n      if (*(char *)(iVar5 + 4) != '\x04') break;\n      iVar5 = param_2 * 4;\n      param_2 = *(int *)(param_1[3] + param_2 * 4);\n      *(undefined4 *)(iVar4 + 4 + param_3 * 0xc) = 0;\n      iVar7 = FUN_00022950();\n      if (iVar7 == -1) {\n        return 0xc;\n      }\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar5);\n      cVar2 = FUN_00021a30(param_3 * 0xc + param_1[5],iVar7);\n      param_3 = iVar7;\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n    }\n    iVar1 = iVar4 + param_2 * 0xc;\n    iVar3 = *(int *)(iVar1 + 4);\n    if (iVar3 == 0) {\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n      return 0;\n    }\n    iVar6 = param_3 * 0xc;\n    iVar4 = iVar4 + iVar6;\n    iVar1 = **(int **)(iVar1 + 8);\n    *(undefined4 *)(iVar4 + 4) = 0;\n    if (iVar3 == 1) {\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        cVar2 = FUN_00021a30(iVar4,iVar1);\n        if (cVar2 == '\0') {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | *(uint *)(iVar5 + 4) >> 8 & 0x3ff;\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n      param_2 = iVar1;\n    }\n    else {\n      iVar5 = param_1[2] + -1;\n      iVar3 = iVar7 + iVar5 * 8;\n      if (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)) {\n        iVar7 = (iVar7 + param_1[2] * 8) - iVar3;\n        do {\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));\n      }\n      iVar5 = FUN_00022950();\n      if (iVar5 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],iVar5);\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n      iVar5 = FUN_000229f0(param_4,param_5);\n      if (iVar5 != 0) {\n        return iVar5;\n      }\nLAB_00022ad1:\n      param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4);\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n    }\n    if (cVar2 == '\0') {\n      return 0xc;\n    }\n  } while( true );" (do "do") (compound_statement "{\n    while( true ) {\n      iVar7 = *param_1;\n      iVar4 = param_1[5];\n      iVar5 = iVar7 + param_2 * 8;\n      if (*(char *)(iVar5 + 4) != '\x04') break;\n      iVar5 = param_2 * 4;\n      param_2 = *(int *)(param_1[3] + param_2 * 4);\n      *(undefined4 *)(iVar4 + 4 + param_3 * 0xc) = 0;\n      iVar7 = FUN_00022950();\n      if (iVar7 == -1) {\n        return 0xc;\n      }\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar5);\n      cVar2 = FUN_00021a30(param_3 * 0xc + param_1[5],iVar7);\n      param_3 = iVar7;\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n    }\n    iVar1 = iVar4 + param_2 * 0xc;\n    iVar3 = *(int *)(iVar1 + 4);\n    if (iVar3 == 0) {\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n      return 0;\n    }\n    iVar6 = param_3 * 0xc;\n    iVar4 = iVar4 + iVar6;\n    iVar1 = **(int **)(iVar1 + 8);\n    *(undefined4 *)(iVar4 + 4) = 0;\n    if (iVar3 == 1) {\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        cVar2 = FUN_00021a30(iVar4,iVar1);\n        if (cVar2 == '\0') {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | *(uint *)(iVar5 + 4) >> 8 & 0x3ff;\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n      param_2 = iVar1;\n    }\n    else {\n      iVar5 = param_1[2] + -1;\n      iVar3 = iVar7 + iVar5 * 8;\n      if (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)) {\n        iVar7 = (iVar7 + param_1[2] * 8) - iVar3;\n        do {\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));\n      }\n      iVar5 = FUN_00022950();\n      if (iVar5 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],iVar5);\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n      iVar5 = FUN_000229f0(param_4,param_5);\n      if (iVar5 != 0) {\n        return iVar5;\n      }\nLAB_00022ad1:\n      param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4);\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n    }\n    if (cVar2 == '\0') {\n      return 0xc;\n    }\n  }" ({ "{") (while_statement "while( true ) {\n      iVar7 = *param_1;\n      iVar4 = param_1[5];\n      iVar5 = iVar7 + param_2 * 8;\n      if (*(char *)(iVar5 + 4) != '\x04') break;\n      iVar5 = param_2 * 4;\n      param_2 = *(int *)(param_1[3] + param_2 * 4);\n      *(undefined4 *)(iVar4 + 4 + param_3 * 0xc) = 0;\n      iVar7 = FUN_00022950();\n      if (iVar7 == -1) {\n        return 0xc;\n      }\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar5);\n      cVar2 = FUN_00021a30(param_3 * 0xc + param_1[5],iVar7);\n      param_3 = iVar7;\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n    }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n      iVar7 = *param_1;\n      iVar4 = param_1[5];\n      iVar5 = iVar7 + param_2 * 8;\n      if (*(char *)(iVar5 + 4) != '\x04') break;\n      iVar5 = param_2 * 4;\n      param_2 = *(int *)(param_1[3] + param_2 * 4);\n      *(undefined4 *)(iVar4 + 4 + param_3 * 0xc) = 0;\n      iVar7 = FUN_00022950();\n      if (iVar7 == -1) {\n        return 0xc;\n      }\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar5);\n      cVar2 = FUN_00021a30(param_3 * 0xc + param_1[5],iVar7);\n      param_3 = iVar7;\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n    }" ({ "{") (expression_statement "iVar7 = *param_1;" (assignment_expression "iVar7 = *param_1" (identifier "iVar7") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "iVar4 = param_1[5];" (assignment_expression "iVar4 = param_1[5]" (identifier "iVar4") (= "=") (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]"))) (; ";")) (expression_statement "iVar5 = iVar7 + param_2 * 8;" (assignment_expression "iVar5 = iVar7 + param_2 * 8" (identifier "iVar5") (= "=") (binary_expression "iVar7 + param_2 * 8" (identifier "iVar7") (+ "+") (binary_expression "param_2 * 8" (identifier "param_2") (* "*") (number_literal "8")))) (; ";")) (if_statement "if (*(char *)(iVar5 + 4) != '\x04') break;" (if "if") (parenthesized_expression "(*(char *)(iVar5 + 4) != '\x04')" (( "(") (binary_expression "*(char *)(iVar5 + 4) != '\x04'" (pointer_expression "*(char *)(iVar5 + 4)" (* "*") (cast_expression "(char *)(iVar5 + 4)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar5 + 4)" (( "(") (binary_expression "iVar5 + 4" (identifier "iVar5") (+ "+") (number_literal "4")) () ")")))) (!= "!=") (char_literal "'\x04'" (' "'") (escape_sequence "\x04") (' "'"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "iVar5 = param_2 * 4;" (assignment_expression "iVar5 = param_2 * 4" (identifier "iVar5") (= "=") (binary_expression "param_2 * 4" (identifier "param_2") (* "*") (number_literal "4"))) (; ";")) (expression_statement "param_2 = *(int *)(param_1[3] + param_2 * 4);" (assignment_expression "param_2 = *(int *)(param_1[3] + param_2 * 4)" (identifier "param_2") (= "=") (pointer_expression "*(int *)(param_1[3] + param_2 * 4)" (* "*") (cast_expression "(int *)(param_1[3] + param_2 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[3] + param_2 * 4)" (( "(") (binary_expression "param_1[3] + param_2 * 4" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (+ "+") (binary_expression "param_2 * 4" (identifier "param_2") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "*(undefined4 *)(iVar4 + 4 + param_3 * 0xc) = 0;" (assignment_expression "*(undefined4 *)(iVar4 + 4 + param_3 * 0xc) = 0" (pointer_expression "*(undefined4 *)(iVar4 + 4 + param_3 * 0xc)" (* "*") (cast_expression "(undefined4 *)(iVar4 + 4 + param_3 * 0xc)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 4 + param_3 * 0xc)" (( "(") (binary_expression "iVar4 + 4 + param_3 * 0xc" (binary_expression "iVar4 + 4" (identifier "iVar4") (+ "+") (number_literal "4")) (+ "+") (binary_expression "param_3 * 0xc" (identifier "param_3") (* "*") (number_literal "0xc"))) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar7 = FUN_00022950();" (assignment_expression "iVar7 = FUN_00022950()" (identifier "iVar7") (= "=") (call_expression "FUN_00022950()" (identifier "FUN_00022950") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (iVar7 == -1) {\n        return 0xc;\n      }" (if "if") (parenthesized_expression "(iVar7 == -1)" (( "(") (binary_expression "iVar7 == -1" (identifier "iVar7") (== "==") (number_literal "-1")) () ")")) (compound_statement "{\n        return 0xc;\n      }" ({ "{") (return_statement "return 0xc;" (return "return") (number_literal "0xc") (; ";")) (} "}"))) (expression_statement "*(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar5);" (assignment_expression "*(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar5)" (pointer_expression "*(undefined4 *)(param_1[3] + param_3 * 4)" (* "*") (cast_expression "(undefined4 *)(param_1[3] + param_3 * 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[3] + param_3 * 4)" (( "(") (binary_expression "param_1[3] + param_3 * 4" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (+ "+") (binary_expression "param_3 * 4" (identifier "param_3") (* "*") (number_literal "4"))) () ")")))) (= "=") (pointer_expression "*(undefined4 *)(param_1[3] + iVar5)" (* "*") (cast_expression "(undefined4 *)(param_1[3] + iVar5)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[3] + iVar5)" (( "(") (binary_expression "param_1[3] + iVar5" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (+ "+") (identifier "iVar5")) () ")"))))) (; ";")) (expression_statement "cVar2 = FUN_00021a30(param_3 * 0xc + param_1[5],iVar7);" (assignment_expression "cVar2 = FUN_00021a30(param_3 * 0xc + param_1[5],iVar7)" (identifier "cVar2") (= "=") (call_expression "FUN_00021a30(param_3 * 0xc + param_1[5],iVar7)" (identifier "FUN_00021a30") (argument_list "(param_3 * 0xc + param_1[5],iVar7)" (( "(") (binary_expression "param_3 * 0xc + param_1[5]" (binary_expression "param_3 * 0xc" (identifier "param_3") (* "*") (number_literal "0xc")) (+ "+") (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]"))) (, ",") (identifier "iVar7") () ")")))) (; ";")) (expression_statement "param_3 = iVar7;" (assignment_expression "param_3 = iVar7" (identifier "param_3") (= "=") (identifier "iVar7")) (; ";")) (if_statement "if (cVar2 == '\0') {\n        return 0xc;\n      }" (if "if") (parenthesized_expression "(cVar2 == '\0')" (( "(") (binary_expression "cVar2 == '\0'" (identifier "cVar2") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n        return 0xc;\n      }" ({ "{") (return_statement "return 0xc;" (return "return") (number_literal "0xc") (; ";")) (} "}"))) (} "}"))) (expression_statement "iVar1 = iVar4 + param_2 * 0xc;" (assignment_expression "iVar1 = iVar4 + param_2 * 0xc" (identifier "iVar1") (= "=") (binary_expression "iVar4 + param_2 * 0xc" (identifier "iVar4") (+ "+") (binary_expression "param_2 * 0xc" (identifier "param_2") (* "*") (number_literal "0xc")))) (; ";")) (expression_statement "iVar3 = *(int *)(iVar1 + 4);" (assignment_expression "iVar3 = *(int *)(iVar1 + 4)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(iVar1 + 4)" (* "*") (cast_expression "(int *)(iVar1 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 + 4)" (( "(") (binary_expression "iVar1 + 4" (identifier "iVar1") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (if_statement "if (iVar3 == 0) {\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n      return 0;\n    }" (if "if") (parenthesized_expression "(iVar3 == 0)" (( "(") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n      return 0;\n    }" ({ "{") (expression_statement "*(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);" (assignment_expression "*(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4)" (pointer_expression "*(undefined4 *)(param_1[3] + param_3 * 4)" (* "*") (cast_expression "(undefined4 *)(param_1[3] + param_3 * 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[3] + param_3 * 4)" (( "(") (binary_expression "param_1[3] + param_3 * 4" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (+ "+") (binary_expression "param_3 * 4" (identifier "param_3") (* "*") (number_literal "4"))) () ")")))) (= "=") (pointer_expression "*(undefined4 *)(param_1[3] + param_2 * 4)" (* "*") (cast_expression "(undefined4 *)(param_1[3] + param_2 * 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[3] + param_2 * 4)" (( "(") (binary_expression "param_1[3] + param_2 * 4" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (+ "+") (binary_expression "param_2 * 4" (identifier "param_2") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "iVar6 = param_3 * 0xc;" (assignment_expression "iVar6 = param_3 * 0xc" (identifier "iVar6") (= "=") (binary_expression "param_3 * 0xc" (identifier "param_3") (* "*") (number_literal "0xc"))) (; ";")) (expression_statement "iVar4 = iVar4 + iVar6;" (assignment_expression "iVar4 = iVar4 + iVar6" (identifier "iVar4") (= "=") (binary_expression "iVar4 + iVar6" (identifier "iVar4") (+ "+") (identifier "iVar6"))) (; ";")) (expression_statement "iVar1 = **(int **)(iVar1 + 8);" (assignment_expression "iVar1 = **(int **)(iVar1 + 8)" (identifier "iVar1") (= "=") (pointer_expression "**(int **)(iVar1 + 8)" (* "*") (pointer_expression "*(int **)(iVar1 + 8)" (* "*") (cast_expression "(int **)(iVar1 + 8)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar1 + 8)" (( "(") (binary_expression "iVar1 + 8" (identifier "iVar1") (+ "+") (number_literal "8")) () ")")))))) (; ";")) (expression_statement "*(undefined4 *)(iVar4 + 4) = 0;" (assignment_expression "*(undefined4 *)(iVar4 + 4) = 0" (pointer_expression "*(undefined4 *)(iVar4 + 4)" (* "*") (cast_expression "(undefined4 *)(iVar4 + 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 4)" (( "(") (binary_expression "iVar4 + 4" (identifier "iVar4") (+ "+") (number_literal "4")) () ")")))) (= "=") (number_literal "0")) (; ";")) (if_statement "if (iVar3 == 1) {\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        cVar2 = FUN_00021a30(iVar4,iVar1);\n        if (cVar2 == '\0') {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | *(uint *)(iVar5 + 4) >> 8 & 0x3ff;\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n      param_2 = iVar1;\n    }\n    else {\n      iVar5 = param_1[2] + -1;\n      iVar3 = iVar7 + iVar5 * 8;\n      if (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)) {\n        iVar7 = (iVar7 + param_1[2] * 8) - iVar3;\n        do {\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));\n      }\n      iVar5 = FUN_00022950();\n      if (iVar5 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],iVar5);\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n      iVar5 = FUN_000229f0(param_4,param_5);\n      if (iVar5 != 0) {\n        return iVar5;\n      }\nLAB_00022ad1:\n      param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4);\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n    }" (if "if") (parenthesized_expression "(iVar3 == 1)" (( "(") (binary_expression "iVar3 == 1" (identifier "iVar3") (== "==") (number_literal "1")) () ")")) (compound_statement "{\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        cVar2 = FUN_00021a30(iVar4,iVar1);\n        if (cVar2 == '\0') {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | *(uint *)(iVar5 + 4) >> 8 & 0x3ff;\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n      param_2 = iVar1;\n    }" ({ "{") (if_statement "if ((param_2 == param_4) && (param_2 != param_3)) {\n        cVar2 = FUN_00021a30(iVar4,iVar1);\n        if (cVar2 == '\0') {\n          return 0xc;\n        }\n        return 0;\n      }" (if "if") (parenthesized_expression "((param_2 == param_4) && (param_2 != param_3))" (( "(") (binary_expression "(param_2 == param_4) && (param_2 != param_3)" (parenthesized_expression "(param_2 == param_4)" (( "(") (binary_expression "param_2 == param_4" (identifier "param_2") (== "==") (identifier "param_4")) () ")")) (&& "&&") (parenthesized_expression "(param_2 != param_3)" (( "(") (binary_expression "param_2 != param_3" (identifier "param_2") (!= "!=") (identifier "param_3")) () ")"))) () ")")) (compound_statement "{\n        cVar2 = FUN_00021a30(iVar4,iVar1);\n        if (cVar2 == '\0') {\n          return 0xc;\n        }\n        return 0;\n      }" ({ "{") (expression_statement "cVar2 = FUN_00021a30(iVar4,iVar1);" (assignment_expression "cVar2 = FUN_00021a30(iVar4,iVar1)" (identifier "cVar2") (= "=") (call_expression "FUN_00021a30(iVar4,iVar1)" (identifier "FUN_00021a30") (argument_list "(iVar4,iVar1)" (( "(") (identifier "iVar4") (, ",") (identifier "iVar1") () ")")))) (; ";")) (if_statement "if (cVar2 == '\0') {\n          return 0xc;\n        }" (if "if") (parenthesized_expression "(cVar2 == '\0')" (( "(") (binary_expression "cVar2 == '\0'" (identifier "cVar2") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n          return 0xc;\n        }" ({ "{") (return_statement "return 0xc;" (return "return") (number_literal "0xc") (; ";")) (} "}"))) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "param_5 = param_5 | *(uint *)(iVar5 + 4) >> 8 & 0x3ff;" (assignment_expression "param_5 = param_5 | *(uint *)(iVar5 + 4) >> 8 & 0x3ff" (identifier "param_5") (= "=") (binary_expression "param_5 | *(uint *)(iVar5 + 4) >> 8 & 0x3ff" (identifier "param_5") (| "|") (binary_expression "*(uint *)(iVar5 + 4) >> 8 & 0x3ff" (binary_expression "*(uint *)(iVar5 + 4) >> 8" (pointer_expression "*(uint *)(iVar5 + 4)" (* "*") (cast_expression "(uint *)(iVar5 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar5 + 4)" (( "(") (binary_expression "iVar5 + 4" (identifier "iVar5") (+ "+") (number_literal "4")) () ")")))) (>> ">>") (number_literal "8")) (& "&") (number_literal "0x3ff")))) (; ";")) (expression_statement "param_3 = FUN_00022950();" (assignment_expression "param_3 = FUN_00022950()" (identifier "param_3") (= "=") (call_expression "FUN_00022950()" (identifier "FUN_00022950") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (param_3 == -1) {\n        return 0xc;\n      }" (if "if") (parenthesized_expression "(param_3 == -1)" (( "(") (binary_expression "param_3 == -1" (identifier "param_3") (== "==") (number_literal "-1")) () ")")) (compound_statement "{\n        return 0xc;\n      }" ({ "{") (return_statement "return 0xc;" (return "return") (number_literal "0xc") (; ";")) (} "}"))) (expression_statement "cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);" (assignment_expression "cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3)" (identifier "cVar2") (= "=") (call_expression "FUN_00021a30(iVar6 + param_1[5],param_3)" (identifier "FUN_00021a30") (argument_list "(iVar6 + param_1[5],param_3)" (( "(") (binary_expression "iVar6 + param_1[5]" (identifier "iVar6") (+ "+") (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]"))) (, ",") (identifier "param_3") () ")")))) (; ";")) (expression_statement "param_2 = iVar1;" (assignment_expression "param_2 = iVar1" (identifier "param_2") (= "=") (identifier "iVar1")) (; ";")) (} "}")) (else_clause "else {\n      iVar5 = param_1[2] + -1;\n      iVar3 = iVar7 + iVar5 * 8;\n      if (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)) {\n        iVar7 = (iVar7 + param_1[2] * 8) - iVar3;\n        do {\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));\n      }\n      iVar5 = FUN_00022950();\n      if (iVar5 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],iVar5);\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n      iVar5 = FUN_000229f0(param_4,param_5);\n      if (iVar5 != 0) {\n        return iVar5;\n      }\nLAB_00022ad1:\n      param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4);\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n    }" (else "else") (compound_statement "{\n      iVar5 = param_1[2] + -1;\n      iVar3 = iVar7 + iVar5 * 8;\n      if (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)) {\n        iVar7 = (iVar7 + param_1[2] * 8) - iVar3;\n        do {\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));\n      }\n      iVar5 = FUN_00022950();\n      if (iVar5 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],iVar5);\n      if (cVar2 == '\0') {\n        return 0xc;\n      }\n      iVar5 = FUN_000229f0(param_4,param_5);\n      if (iVar5 != 0) {\n        return iVar5;\n      }\nLAB_00022ad1:\n      param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4);\n      param_3 = FUN_00022950();\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);\n    }" ({ "{") (expression_statement "iVar5 = param_1[2] + -1;" (assignment_expression "iVar5 = param_1[2] + -1" (identifier "iVar5") (= "=") (binary_expression "param_1[2] + -1" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "iVar3 = iVar7 + iVar5 * 8;" (assignment_expression "iVar3 = iVar7 + iVar5 * 8" (identifier "iVar3") (= "=") (binary_expression "iVar7 + iVar5 * 8" (identifier "iVar7") (+ "+") (binary_expression "iVar5 * 8" (identifier "iVar5") (* "*") (number_literal "8")))) (; ";")) (if_statement "if (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)) {\n        iVar7 = (iVar7 + param_1[2] * 8) - iVar3;\n        do {\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));\n      }" (if "if") (parenthesized_expression "(((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5))" (( "(") (binary_expression "((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)" (parenthesized_expression "((*(byte *)(iVar3 + 6) & 4) != 0)" (( "(") (binary_expression "(*(byte *)(iVar3 + 6) & 4) != 0" (parenthesized_expression "(*(byte *)(iVar3 + 6) & 4)" (( "(") (binary_expression "*(byte *)(iVar3 + 6) & 4" (pointer_expression "*(byte *)(iVar3 + 6)" (* "*") (cast_expression "(byte *)(iVar3 + 6)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 6)" (( "(") (binary_expression "iVar3 + 6" (identifier "iVar3") (+ "+") (number_literal "6")) () ")")))) (& "&") (number_literal "4")) () ")")) (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(0 < iVar5)" (( "(") (binary_expression "0 < iVar5" (number_literal "0") (< "<") (identifier "iVar5")) () ")"))) () ")")) (compound_statement "{\n        iVar7 = (iVar7 + param_1[2] * 8) - iVar3;\n        do {\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));\n      }" ({ "{") (expression_statement "iVar7 = (iVar7 + param_1[2] * 8) - iVar3;" (assignment_expression "iVar7 = (iVar7 + param_1[2] * 8) - iVar3" (identifier "iVar7") (= "=") (binary_expression "(iVar7 + param_1[2] * 8) - iVar3" (parenthesized_expression "(iVar7 + param_1[2] * 8)" (( "(") (binary_expression "iVar7 + param_1[2] * 8" (identifier "iVar7") (+ "+") (binary_expression "param_1[2] * 8" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (* "*") (number_literal "8"))) () ")")) (- "-") (identifier "iVar3"))) (; ";")) (do_statement "do {\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));" (do "do") (compound_statement "{\n          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }\n          iVar3 = iVar3 + iVar7 + -0x10;\n          iVar5 = iVar5 + -1;\n        }" ({ "{") (if_statement "if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }" (if "if") (parenthesized_expression "((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff)))" (( "(") (binary_expression "(*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&\n             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))" (parenthesized_expression "(*(int *)(param_1[4] + iVar5 * 4) == iVar1)" (( "(") (binary_expression "*(int *)(param_1[4] + iVar5 * 4) == iVar1" (pointer_expression "*(int *)(param_1[4] + iVar5 * 4)" (* "*") (cast_expression "(int *)(param_1[4] + iVar5 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[4] + iVar5 * 4)" (( "(") (binary_expression "param_1[4] + iVar5 * 4" (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (+ "+") (binary_expression "iVar5 * 4" (identifier "iVar5") (* "*") (number_literal "4"))) () ")")))) (== "==") (identifier "iVar1")) () ")")) (&& "&&") (parenthesized_expression "(param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))" (( "(") (binary_expression "param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff)" (identifier "param_5") (== "==") (parenthesized_expression "(*(uint *)(iVar3 + 4) >> 8 & 0x3ff)" (( "(") (binary_expression "*(uint *)(iVar3 + 4) >> 8 & 0x3ff" (binary_expression "*(uint *)(iVar3 + 4) >> 8" (pointer_expression "*(uint *)(iVar3 + 4)" (* "*") (cast_expression "(uint *)(iVar3 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 4)" (( "(") (binary_expression "iVar3 + 4" (identifier "iVar3") (+ "+") (number_literal "4")) () ")")))) (>> ">>") (number_literal "8")) (& "&") (number_literal "0x3ff")) () ")"))) () ")"))) () ")")) (compound_statement "{\n            cVar2 = FUN_00021a30(iVar4,iVar5);\n            if (cVar2 == '\0') {\n              return 0xc;\n            }\n            goto LAB_00022ad1;\n          }" ({ "{") (expression_statement "cVar2 = FUN_00021a30(iVar4,iVar5);" (assignment_expression "cVar2 = FUN_00021a30(iVar4,iVar5)" (identifier "cVar2") (= "=") (call_expression "FUN_00021a30(iVar4,iVar5)" (identifier "FUN_00021a30") (argument_list "(iVar4,iVar5)" (( "(") (identifier "iVar4") (, ",") (identifier "iVar5") () ")")))) (; ";")) (if_statement "if (cVar2 == '\0') {\n              return 0xc;\n            }" (if "if") (parenthesized_expression "(cVar2 == '\0')" (( "(") (binary_expression "cVar2 == '\0'" (identifier "cVar2") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n              return 0xc;\n            }" ({ "{") (return_statement "return 0xc;" (return "return") (number_literal "0xc") (; ";")) (} "}"))) (goto_statement "goto LAB_00022ad1;" (goto "goto") (statement_identifier "LAB_00022ad1") (; ";")) (} "}"))) (expression_statement "iVar3 = iVar3 + iVar7 + -0x10;" (assignment_expression "iVar3 = iVar3 + iVar7 + -0x10" (identifier "iVar3") (= "=") (binary_expression "iVar3 + iVar7 + -0x10" (binary_expression "iVar3 + iVar7" (identifier "iVar3") (+ "+") (identifier "iVar7")) (+ "+") (number_literal "-0x10"))) (; ";")) (expression_statement "iVar5 = iVar5 + -1;" (assignment_expression "iVar5 = iVar5 + -1" (identifier "iVar5") (= "=") (binary_expression "iVar5 + -1" (identifier "iVar5") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5))" (( "(") (binary_expression "((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)" (parenthesized_expression "((*(byte *)(iVar3 + 6) & 4) != 0)" (( "(") (binary_expression "(*(byte *)(iVar3 + 6) & 4) != 0" (parenthesized_expression "(*(byte *)(iVar3 + 6) & 4)" (( "(") (binary_expression "*(byte *)(iVar3 + 6) & 4" (pointer_expression "*(byte *)(iVar3 + 6)" (* "*") (cast_expression "(byte *)(iVar3 + 6)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 6)" (( "(") (binary_expression "iVar3 + 6" (identifier "iVar3") (+ "+") (number_literal "6")) () ")")))) (& "&") (number_literal "4")) () ")")) (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(0 < iVar5)" (( "(") (binary_expression "0 < iVar5" (number_literal "0") (< "<") (identifier "iVar5")) () ")"))) () ")")) (; ";")) (} "}"))) (expression_statement "iVar5 = FUN_00022950();" (assignment_expression "iVar5 = FUN_00022950()" (identifier "iVar5") (= "=") (call_expression "FUN_00022950()" (identifier "FUN_00022950") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (iVar5 == -1) {\n        return 0xc;\n      }" (if "if") (parenthesized_expression "(iVar5 == -1)" (( "(") (binary_expression "iVar5 == -1" (identifier "iVar5") (== "==") (number_literal "-1")) () ")")) (compound_statement "{\n        return 0xc;\n      }" ({ "{") (return_statement "return 0xc;" (return "return") (number_literal "0xc") (; ";")) (} "}"))) (expression_statement "cVar2 = FUN_00021a30(iVar6 + param_1[5],iVar5);" (assignment_expression "cVar2 = FUN_00021a30(iVar6 + param_1[5],iVar5)" (identifier "cVar2") (= "=") (call_expression "FUN_00021a30(iVar6 + param_1[5],iVar5)" (identifier "FUN_00021a30") (argument_list "(iVar6 + param_1[5],iVar5)" (( "(") (binary_expression "iVar6 + param_1[5]" (identifier "iVar6") (+ "+") (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]"))) (, ",") (identifier "iVar5") () ")")))) (; ";")) (if_statement "if (cVar2 == '\0') {\n        return 0xc;\n      }" (if "if") (parenthesized_expression "(cVar2 == '\0')" (( "(") (binary_expression "cVar2 == '\0'" (identifier "cVar2") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n        return 0xc;\n      }" ({ "{") (return_statement "return 0xc;" (return "return") (number_literal "0xc") (; ";")) (} "}"))) (expression_statement "iVar5 = FUN_000229f0(param_4,param_5);" (assignment_expression "iVar5 = FUN_000229f0(param_4,param_5)" (identifier "iVar5") (= "=") (call_expression "FUN_000229f0(param_4,param_5)" (identifier "FUN_000229f0") (argument_list "(param_4,param_5)" (( "(") (identifier "param_4") (, ",") (identifier "param_5") () ")")))) (; ";")) (if_statement "if (iVar5 != 0) {\n        return iVar5;\n      }" (if "if") (parenthesized_expression "(iVar5 != 0)" (( "(") (binary_expression "iVar5 != 0" (identifier "iVar5") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        return iVar5;\n      }" ({ "{") (return_statement "return iVar5;" (return "return") (identifier "iVar5") (; ";")) (} "}"))) (labeled_statement "LAB_00022ad1:\n      param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4);" (statement_identifier "LAB_00022ad1") (: ":") (expression_statement "param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4);" (assignment_expression "param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4)" (identifier "param_2") (= "=") (pointer_expression "*(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4)" (* "*") (cast_expression "(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4)" (( "(") (binary_expression "*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4" (pointer_expression "*(int *)(param_1[5] + 8 + param_2 * 0xc)" (* "*") (cast_expression "(int *)(param_1[5] + 8 + param_2 * 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[5] + 8 + param_2 * 0xc)" (( "(") (binary_expression "param_1[5] + 8 + param_2 * 0xc" (binary_expression "param_1[5] + 8" (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")) (+ "+") (number_literal "8")) (+ "+") (binary_expression "param_2 * 0xc" (identifier "param_2") (* "*") (number_literal "0xc"))) () ")")))) (+ "+") (number_literal "4")) () ")"))))) (; ";"))) (expression_statement "param_3 = FUN_00022950();" (assignment_expression "param_3 = FUN_00022950()" (identifier "param_3") (= "=") (call_expression "FUN_00022950()" (identifier "FUN_00022950") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (param_3 == -1) {\n        return 0xc;\n      }" (if "if") (parenthesized_expression "(param_3 == -1)" (( "(") (binary_expression "param_3 == -1" (identifier "param_3") (== "==") (number_literal "-1")) () ")")) (compound_statement "{\n        return 0xc;\n      }" ({ "{") (return_statement "return 0xc;" (return "return") (number_literal "0xc") (; ";")) (} "}"))) (expression_statement "cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);" (assignment_expression "cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3)" (identifier "cVar2") (= "=") (call_expression "FUN_00021a30(iVar6 + param_1[5],param_3)" (identifier "FUN_00021a30") (argument_list "(iVar6 + param_1[5],param_3)" (( "(") (binary_expression "iVar6 + param_1[5]" (identifier "iVar6") (+ "+") (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]"))) (, ",") (identifier "param_3") () ")")))) (; ";")) (} "}")))) (if_statement "if (cVar2 == '\0') {\n      return 0xc;\n    }" (if "if") (parenthesized_expression "(cVar2 == '\0')" (( "(") (binary_expression "cVar2 == '\0'" (identifier "cVar2") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n      return 0xc;\n    }" ({ "{") (return_statement "return 0xc;" (return "return") (number_literal "0xc") (; ";")) (} "}"))) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";")) (} "}")))

/* WARNING: Type propagation algorithm not settling */

type_1 __regparm3
function_1
          (type_2 *dfa,type_3 var_7,type_3 var_4,type_3 var_8,type_4 var_9)

{
  type_5 *var_11;
  type_6 *var_6;
  int var_12;
  int var_13;
  type_7 _Var4;
  bool bVar5;
  type_3 var_10;
  type_3 var_2;
  type_1 var_14;
  type_5 *prVar8;
  type_6 *set;
  int var_5;
  
  do {
    while( true ) {
      var_11 = dfa->nodes;
      var_6 = dfa->edests;
      if (var_11[var_7].field_0x4 != '\x04') break;
      var_10 = dfa->nexts[var_7];
      var_6[var_4].nelem = 0;
      var_2 = var_1(dfa,var_10,var_9);
      if (var_2 == -1) {
        return _REG_ESPACE;
      }
      dfa->nexts[var_4] = dfa->nexts[var_7];
      _Var4 = var_3(dfa->edests + var_4,var_2);
      var_4 = var_2;
      var_7 = var_10;
      if (!_Var4) {
        return _REG_ESPACE;
      }
    }
    var_5 = var_6[var_7].nelem;
    if (var_5 == 0) {
      dfa->nexts[var_4] = dfa->nexts[var_7];
      return var_15;
    }
    set = var_6 + var_4;
    var_12 = *var_6[var_7].elems;
    set->nelem = 0;
    if (var_5 == 1) {
      if ((var_7 == var_8) && (var_7 != var_4)) {
        _Var4 = var_3(set,var_12);
        if (!_Var4) {
          return _REG_ESPACE;
        }
        return var_15;
      }
      var_9 = var_9 | *(type_4 *)&var_11[var_7].field_0x4 >> 8 & 0x3ff;
      var_10 = var_1(dfa,var_12,var_9);
      if (var_10 == -1) {
        return _REG_ESPACE;
      }
      bVar5 = var_3(dfa->edests + var_4,var_10);
    }
    else {
      var_5 = dfa->nodes_len - 1;
      prVar8 = var_11 + var_5;
      if (((prVar8->field_0x6 & 4) != 0) && (0 < var_5)) {
        var_13 = dfa->nodes_len * 8 - (int)prVar8;
        do {
          if ((dfa->org_indices[var_5] == var_12) &&
             (var_9 == (*(type_4 *)&prVar8->field_0x4 >> 8 & 0x3ff))) {
            _Var4 = var_3(set,var_5);
            if (!_Var4) {
              return _REG_ESPACE;
            }
            goto LAB_00022ad1;
          }
          prVar8 = (type_5 *)((int)prVar8 + (int)var_11 + var_13 + -0x10);
          var_5 = var_5 + -1;
        } while (((prVar8->field_0x6 & 4) != 0) && (0 < var_5));
      }
      var_10 = var_1(dfa,var_12,var_9);
      if (var_10 == -1) {
        return _REG_ESPACE;
      }
      _Var4 = var_3(dfa->edests + var_4,var_10);
      if (!_Var4) {
        return _REG_ESPACE;
      }
      var_14 = function_1(dfa,var_12,var_10,var_8,var_9);
      if (var_14 != var_15) {
        return var_14;
      }
LAB_00022ad1:
      var_12 = dfa->edests[var_7].elems[1];
      var_10 = var_1(dfa,var_12,var_9);
      if (var_10 == -1) {
        return _REG_ESPACE;
      }
      bVar5 = var_3(dfa->edests + var_4,var_10);
    }
    var_4 = var_10;
    var_7 = var_12;
    if (!bVar5) {
      return _REG_ESPACE;
    }
  } while( true );
}


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

int __regparm3 MASKED(int *param_1,int param_2,int param_3,int param_4,uint param_5)

{
  int iVar1;
  char cVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  
  do {
    while( true ) {
      iVar7 = *param_1;
      iVar4 = param_1[5];
      iVar5 = iVar7 + param_2 * 8;
      if (*(char *)(iVar5 + 4) != '\x04') break;
      iVar5 = param_2 * 4;
      param_2 = *(int *)(param_1[3] + param_2 * 4);
      *(undefined4 *)(iVar4 + 4 + param_3 * 0xc) = 0;
      iVar7 = FUN_00022950();
      if (iVar7 == -1) {
        return 0xc;
      }
      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar5);
      cVar2 = FUN_00021a30(param_3 * 0xc + param_1[5],iVar7);
      param_3 = iVar7;
      if (cVar2 == '\0') {
        return 0xc;
      }
    }
    iVar1 = iVar4 + param_2 * 0xc;
    iVar3 = *(int *)(iVar1 + 4);
    if (iVar3 == 0) {
      *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);
      return 0;
    }
    iVar6 = param_3 * 0xc;
    iVar4 = iVar4 + iVar6;
    iVar1 = **(int **)(iVar1 + 8);
    *(undefined4 *)(iVar4 + 4) = 0;
    if (iVar3 == 1) {
      if ((param_2 == param_4) && (param_2 != param_3)) {
        cVar2 = FUN_00021a30(iVar4,iVar1);
        if (cVar2 == '\0') {
          return 0xc;
        }
        return 0;
      }
      param_5 = param_5 | *(uint *)(iVar5 + 4) >> 8 & 0x3ff;
      param_3 = FUN_00022950();
      if (param_3 == -1) {
        return 0xc;
      }
      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);
      param_2 = iVar1;
    }
    else {
      iVar5 = param_1[2] + -1;
      iVar3 = iVar7 + iVar5 * 8;
      if (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5)) {
        iVar7 = (iVar7 + param_1[2] * 8) - iVar3;
        do {
          if ((*(int *)(param_1[4] + iVar5 * 4) == iVar1) &&
             (param_5 == (*(uint *)(iVar3 + 4) >> 8 & 0x3ff))) {
            cVar2 = FUN_00021a30(iVar4,iVar5);
            if (cVar2 == '\0') {
              return 0xc;
            }
            goto LAB_00022ad1;
          }
          iVar3 = iVar3 + iVar7 + -0x10;
          iVar5 = iVar5 + -1;
        } while (((*(byte *)(iVar3 + 6) & 4) != 0) && (0 < iVar5));
      }
      iVar5 = FUN_00022950();
      if (iVar5 == -1) {
        return 0xc;
      }
      cVar2 = FUN_00021a30(iVar6 + param_1[5],iVar5);
      if (cVar2 == '\0') {
        return 0xc;
      }
      iVar5 = MASKED(param_4,param_5);
      if (iVar5 != 0) {
        return iVar5;
      }
LAB_00022ad1:
      param_2 = *(int *)(*(int *)(param_1[5] + 8 + param_2 * 0xc) + 4);
      param_3 = FUN_00022950();
      if (param_3 == -1) {
        return 0xc;
      }
      cVar2 = FUN_00021a30(iVar6 + param_1[5],param_3);
    }
    if (cVar2 == '\0') {
      return 0xc;
    }
  } while( true );
}

