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

{
  undefined3 extraout_var;
  int iVar1;
  _Bool _Var6;
  re_token_t *prVar2;
  int iVar3;
  int iVar4;
  reg_errcode_t rVar5;
  re_node_set *prVar7;
  Idx *pIVar8;
  int iVar9;
  size_t sVar10;
  int iVar11;
  code *pcVar12;
  code *pcVar13;
  
  pcVar13 = (code *)(PTR_LAB_000471f4 + 0x309c);
  pcVar12 = (code *)(PTR_LAB_000471f4 + 0xb4);
  do {
    iVar9 = top_org_node << 3;
    iVar3 = top_clone_node;
    while( true ) {
      while ((&dfa->nodes->field_0x4)[iVar9] == '\x04') {
        iVar4 = dfa->nexts[top_org_node];
        dfa->edests[iVar3].nelem = 0;
        iVar11 = (*pcVar13)(dfa,iVar4,init_constraint);
        if (iVar11 == -1) {
          return _REG_ESPACE;
        }
        dfa->nexts[iVar3] = dfa->nexts[top_org_node];
        iVar1 = (*pcVar12)(dfa->edests + iVar3,iVar11);
        iVar9 = iVar4 << 3;
        top_org_node = iVar4;
        iVar3 = iVar11;
        if (iVar1 == 0) {
          return _REG_ESPACE;
        }
      }
      prVar7 = dfa->edests;
      if (prVar7[top_org_node].nelem == 0) {
        dfa->nexts[iVar3] = dfa->nexts[top_org_node];
        return _REG_NOERROR;
      }
      if (prVar7[top_org_node].nelem != 1) break;
      iVar11 = *prVar7[top_org_node].elems;
      prVar7[iVar3].nelem = 0;
      if ((top_org_node == root_node) && (top_org_node != iVar3)) {
        _Var6 = re_node_set_insert(dfa->edests + iVar3,iVar11);
        if (CONCAT31(extraout_var,_Var6) == 0) {
          return _REG_ESPACE;
        }
        return _REG_NOERROR;
      }
      init_constraint =
           init_constraint | (uint)(*(int *)(&dfa->nodes->field_0x4 + iVar9) << 8) >> 0x16;
      iVar4 = (*pcVar13)(dfa,iVar11,init_constraint);
      if (iVar4 == -1) {
        return _REG_ESPACE;
      }
      iVar3 = (*pcVar12)(dfa->edests + iVar3,iVar4);
      if (iVar3 == 0) {
        return _REG_ESPACE;
      }
      iVar9 = iVar11 << 3;
      top_org_node = iVar11;
      iVar3 = iVar4;
    }
    iVar11 = *prVar7[top_org_node].elems;
    prVar7[iVar3].nelem = 0;
    sVar10 = dfa->nodes_len;
    iVar9 = sVar10 - 1;
    prVar2 = dfa->nodes + iVar9;
    if (((*(uint *)&prVar2->field_0x4 & 0x2000) != 0) && (0 < iVar9)) {
      pIVar8 = dfa->org_indices + sVar10;
      iVar4 = sVar10 * 8 - (int)prVar2;
      while ((iVar11 != pIVar8[-1] ||
             (init_constraint != (uint)(*(int *)&prVar2->field_0x4 << 8) >> 0x16))) {
        prVar2 = (re_token_t *)((int)prVar2 + (int)dfa->nodes + iVar4 + -0x10);
        iVar9 = iVar9 + -1;
        if (((*(uint *)&prVar2->field_0x4 & 0x2000) == 0) || (pIVar8 = pIVar8 + -1, iVar9 == 0))
        goto LAB_000234d0;
      }
      if (iVar9 != -1) {
        iVar9 = (*pcVar12)(dfa->edests + iVar3);
        if (iVar9 == 0) {
          return _REG_ESPACE;
        }
        goto LAB_000233d0;
      }
    }
LAB_000234d0:
    iVar9 = (*pcVar13)(dfa,iVar11,init_constraint);
    if (iVar9 == -1) {
      return _REG_ESPACE;
    }
    iVar4 = (*pcVar12)(dfa->edests + iVar3,iVar9);
    if (iVar4 == 0) {
      return _REG_ESPACE;
    }
    rVar5 = duplicate_node_closure(dfa,iVar11,iVar9,root_node,init_constraint);
    if (rVar5 != _REG_NOERROR) {
      return rVar5;
    }
LAB_000233d0:
    top_org_node = dfa->edests[top_org_node].elems[1];
    top_clone_node = (*pcVar13)(dfa,top_org_node,init_constraint);
    if (top_clone_node == -1) {
      return _REG_ESPACE;
    }
    iVar3 = (*pcVar12)(dfa->edests + iVar3,top_clone_node);
    if (iVar3 == 0) {
      return _REG_ESPACE;
    }
  } while( true );
}



int FUN_00023180(int *param_1,int param_2,int param_3,int param_4,uint param_5)

{
  int iVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  code *pcVar7;
  code *pcVar8;
  
  pcVar8 = (code *)(PTR_DAT_000471f4 + 0x309c);
  pcVar7 = (code *)(PTR_DAT_000471f4 + 0xb4);
  do {
    iVar4 = param_2 << 3;
    while( true ) {
      while (*(char *)(*param_1 + iVar4 + 4) == '\x04') {
        iVar4 = param_2 * 4;
        param_2 = *(int *)(param_1[3] + iVar4);
        *(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0;
        iVar1 = (*pcVar8)(param_1,param_2,param_5);
        if (iVar1 == -1) {
          return 0xc;
        }
        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar4);
        iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1);
        iVar4 = param_2 << 3;
        param_3 = iVar1;
        if (iVar2 == 0) {
          return 0xc;
        }
      }
      iVar1 = param_1[5];
      iVar2 = iVar1 + param_2 * 0xc;
      if (*(int *)(iVar2 + 4) == 0) {
        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);
        return 0;
      }
      if (*(int *)(iVar2 + 4) != 1) break;
      iVar5 = **(int **)(iVar2 + 8);
      iVar2 = param_3 * 0xc;
      *(undefined4 *)(iVar1 + iVar2 + 4) = 0;
      if ((param_2 == param_4) && (param_2 != param_3)) {
        iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5);
        if (iVar4 == 0) {
          return 0xc;
        }
        return 0;
      }
      param_5 = param_5 | (uint)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16;
      param_3 = (*pcVar8)(param_1,iVar5,param_5);
      if (param_3 == -1) {
        return 0xc;
      }
      iVar4 = (*pcVar7)(param_1[5] + iVar2,param_3);
      if (iVar4 == 0) {
        return 0xc;
      }
      iVar4 = iVar5 << 3;
      param_2 = iVar5;
    }
    iVar5 = **(int **)(iVar2 + 8);
    iVar6 = param_3 * 0xc;
    *(undefined4 *)(iVar1 + iVar6 + 4) = 0;
    iVar2 = param_1[2];
    iVar1 = iVar2 + -1;
    iVar4 = *param_1 + iVar1 * 8;
    if (((*(uint *)(iVar4 + 4) & 0x2000) != 0) && (0 < iVar1)) {
      iVar3 = param_1[4] + iVar2 * 4;
      iVar2 = (*param_1 + iVar2 * 8) - iVar4;
      while ((iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)
             )) {
        iVar4 = iVar4 + iVar2 + -0x10;
        iVar1 = iVar1 + -1;
        if (((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))
        goto LAB_000234d0;
      }
      if (iVar1 != -1) {
        iVar4 = (*pcVar7)(param_1[5] + iVar6);
        if (iVar4 == 0) {
          return 0xc;
        }
        goto LAB_000233d0;
      }
    }
LAB_000234d0:
    iVar4 = (*pcVar8)(param_1,iVar5,param_5);
    if (iVar4 == -1) {
      return 0xc;
    }
    iVar1 = (*pcVar7)(param_1[5] + iVar6,iVar4);
    if (iVar1 == 0) {
      return 0xc;
    }
    iVar4 = FUN_00023180(param_1,iVar5,iVar4,param_4,param_5);
    if (iVar4 != 0) {
      return iVar4;
    }
LAB_000233d0:
    param_2 = *(int *)(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4);
    param_3 = (*pcVar8)(param_1,param_2,param_5);
    if (param_3 == -1) {
      return 0xc;
    }
    iVar4 = (*pcVar7)(param_1[5] + iVar6,param_3);
    if (iVar4 == 0) {
      return 0xc;
    }
  } while( true );
}


lui gp,0x3
addiu gp,gp,-0x4080
addu gp,gp,t9
addiu sp,sp,-0x50
sw ra,0x4c(sp)
sw s8,0x48(sp)
sw s7,0x44(sp)
sw s6,0x40(sp)
sw s5,0x3c(sp)
sw s4,0x38(sp)
sw s3,0x34(sp)
sw s2,0x30(sp)
sw s1,0x2c(sp)
sw s0,0x28(sp)
sw gp,0x18(sp)
or s0,a0,zero
or s1,a1,zero
or s2,a2,zero
sw a3,0x5c(sp)
lw s5,0x60(sp)
lw s7,-0x7f0c(gp)
addiu s7,s7,0x309c
lw s6,-0x7f0c(gp)
addiu s6,s6,0xb4
b 0x00023430
_lw s8,-0x7f0c(gp)
sll s4,s1,0x2
lw v0,0xc(s0)
addu v0,v0,s4
lw s1,0x0(v0)
sw s2,0x24(sp)
sll s3,s2,0x1
addu s2,s3,s2
sll s3,s2,0x2
lw v0,0x14(s0)
addu v0,v0,s3
sw zero,0x4(v0)
or a2,s5,zero
or a1,s1,zero
or a0,s0,zero
or t9,s7,zero
jalr t9
_nop
lw gp,0x18(sp)
or s2,v0,zero
li v0,-0x1
beq s2,v0,0x0002354c
_lw v1,0x24(sp)
lw v0,0xc(s0)
addu s4,v0,s4
lw a0,0x0(s4)
sll v1,v1,0x2
addu v0,v0,v1
sw a0,0x0(v0)
lw a0,0x14(s0)
or a1,s2,zero
addu a0,a0,s3
or t9,s6,zero
jalr t9
_nop
lw gp,0x18(sp)
bne v0,zero,0x00023434
_sll a1,s1,0x3
b 0x00023568
_li v0,0xc
lw v1,0xc(s0)
sll a2,s1,0x2
addu a2,v1,a2
lw a0,0x0(a2)
sll s2,s2,0x2
addu s2,v1,s2
b 0x00023568
_sw a0,0x0(s2)
lw v0,0x8(a0)
lw s4,0x0(v0)
sll s3,s2,0x1
addu s3,s3,s2
sll s3,s3,0x2
addu v1,v1,s3
sw zero,0x4(v1)
lw v1,0x5c(sp)
bne s1,v1,0x000232d4
_nop
bne s1,s2,0x0002333c
_lw t9,-0x7f0c(gp)
lw v0,0x0(s0)
addu a1,v0,a1
lw v0,0x4(a1)
ext v0,v0,0xe,0xa
or s5,s5,v0
or a2,s5,zero
or a1,s4,zero
or a0,s0,zero
or t9,s7,zero
jalr t9
_nop
lw gp,0x18(sp)
or s2,v0,zero
li v0,-0x1
beq s2,v0,0x00023554
_or a1,s2,zero
lw a0,0x14(s0)
addu a0,a0,s3
or t9,s6,zero
jalr t9
_nop
lw gp,0x18(sp)
beq v0,zero,0x00023368
_or s1,s4,zero
b 0x00023434
_sll a1,s1,0x3
lw a0,0x14(s0)
or a1,s4,zero
addu a0,a0,s3
addiu t9,t9,0xb4
bal 0x000200b4
_nop
lw gp,0x18(sp)
li v1,0xc
movn v1,zero,v0
b 0x00023568
_or v0,v1,zero
b 0x00023568
_li v0,0xc
addu v0,v0,v1
lw a2,0x4(v0)
andi a2,a2,0x2000
beq a2,zero,0x000234d0
_addiu a1,a1,-0x1
beq a1,zero,0x000234d0
_addiu a0,a0,-0x4
lw a2,-0x4(a0)
bne s1,a2,0x00023370
_nop
lw a2,0x4(v0)
ext a2,a2,0xe,0xa
bne s5,a2,0x00023374
_addu v0,v0,v1
li v0,-0x1
beq a1,v0,0x000234d0
_or t9,s6,zero
lw a0,0x14(s0)
addu a0,a0,s4
jalr t9
_nop
lw gp,0x18(sp)
beq v0,zero,0x00023568
_li v0,0xc
lw v0,0x14(s0)
addu s3,v0,s3
lw v0,0x8(s3)
lw s1,0x4(v0)
or a2,s5,zero
or a1,s1,zero
or a0,s0,zero
or t9,s7,zero
jalr t9
_nop
lw gp,0x18(sp)
or s2,v0,zero
li v0,-0x1
beq s2,v0,0x00023568
_li v0,0xc
lw a0,0x14(s0)
or a1,s2,zero
addu a0,a0,s4
or t9,s6,zero
jalr t9
_nop
lw gp,0x18(sp)
beq v0,zero,0x00023568
_li v0,0xc
sll a1,s1,0x3
lw v0,0x0(s0)
addu v0,v0,a1
lbu v1,0x4(v0)
li v0,0x4
beq v1,v0,0x000231e8
_sll s3,s1,0x1
lw v1,0x14(s0)
addu s3,s3,s1
sll s3,s3,0x2
addu a0,v1,s3
lw v0,0x4(a0)
beq v0,zero,0x00023284
_li a2,0x1
beq v0,a2,0x000232a4
_sll s4,s2,0x1
lw v0,0x8(a0)
lw s1,0x0(v0)
addu s2,s4,s2
sll s4,s2,0x2
addu v1,v1,s4
sw zero,0x4(v1)
lw a2,0x8(s0)
addiu a1,a2,-0x1
lw v1,0x0(s0)
sll v0,a1,0x3
addu v0,v1,v0
lw a0,0x4(v0)
andi a0,a0,0x2000
beq a0,zero,0x000234d0
_nop
blez a1,0x000234d0
_sll a3,a2,0x2
lw a0,0x10(s0)
addu a0,a0,a3
sll a2,a2,0x3
addu v1,v1,a2
subu v1,v1,v0
b 0x0002338c
_addiu v1,v1,-0x10
or a2,s5,zero
or a1,s1,zero
or a0,s0,zero
or t9,s7,zero
jalr t9
_nop
lw gp,0x18(sp)
or s2,v0,zero
li v0,-0x1
beq s2,v0,0x0002355c
_or a1,s2,zero
lw a0,0x14(s0)
addu a0,a0,s4
or t9,s6,zero
jalr t9
_nop
lw gp,0x18(sp)
beq v0,zero,0x00023564
_or a2,s2,zero
sw s5,0x10(sp)
lw a3,0x5c(sp)
or a1,s1,zero
or a0,s0,zero
addiu t9,s8,0x3180
bal 0x00023180
_nop
lw gp,0x18(sp)
beq v0,zero,0x000233d0
_lw ra,0x4c(sp)
b 0x00023570
_lw s8,0x48(sp)
b 0x00023568
_li v0,0xc
b 0x00023568
_li v0,0xc
b 0x00023568
_li v0,0xc
li v0,0xc
lw ra,0x4c(sp)
lw s8,0x48(sp)
lw s7,0x44(sp)
lw s6,0x40(sp)
lw s5,0x3c(sp)
lw s4,0x38(sp)
lw s3,0x34(sp)
lw s2,0x30(sp)
lw s1,0x2c(sp)
lw s0,0x28(sp)
jr ra
_addiu sp,sp,0x50
(translation_unit "int FUN_00023180(int *param_1,int param_2,int param_3,int param_4,uint param_5)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  code *pcVar7;\n  code *pcVar8;\n  \n  pcVar8 = (code *)(PTR_DAT_000471f4 + 0x309c);\n  pcVar7 = (code *)(PTR_DAT_000471f4 + 0xb4);\n  do {\n    iVar4 = param_2 << 3;\n    while( true ) {\n      while (*(char *)(*param_1 + iVar4 + 4) == '\x04') {\n        iVar4 = param_2 * 4;\n        param_2 = *(int *)(param_1[3] + iVar4);\n        *(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0;\n        iVar1 = (*pcVar8)(param_1,param_2,param_5);\n        if (iVar1 == -1) {\n          return 0xc;\n        }\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar4);\n        iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1);\n        iVar4 = param_2 << 3;\n        param_3 = iVar1;\n        if (iVar2 == 0) {\n          return 0xc;\n        }\n      }\n      iVar1 = param_1[5];\n      iVar2 = iVar1 + param_2 * 0xc;\n      if (*(int *)(iVar2 + 4) == 0) {\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n        return 0;\n      }\n      if (*(int *)(iVar2 + 4) != 1) break;\n      iVar5 = **(int **)(iVar2 + 8);\n      iVar2 = param_3 * 0xc;\n      *(undefined4 *)(iVar1 + iVar2 + 4) = 0;\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | (uint)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16;\n      param_3 = (*pcVar8)(param_1,iVar5,param_5);\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      iVar4 = (*pcVar7)(param_1[5] + iVar2,param_3);\n      if (iVar4 == 0) {\n        return 0xc;\n      }\n      iVar4 = iVar5 << 3;\n      param_2 = iVar5;\n    }\n    iVar5 = **(int **)(iVar2 + 8);\n    iVar6 = param_3 * 0xc;\n    *(undefined4 *)(iVar1 + iVar6 + 4) = 0;\n    iVar2 = param_1[2];\n    iVar1 = iVar2 + -1;\n    iVar4 = *param_1 + iVar1 * 8;\n    if (((*(uint *)(iVar4 + 4) & 0x2000) != 0) && (0 < iVar1)) {\n      iVar3 = param_1[4] + iVar2 * 4;\n      iVar2 = (*param_1 + iVar2 * 8) - iVar4;\n      while ((iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)\n             )) {\n        iVar4 = iVar4 + iVar2 + -0x10;\n        iVar1 = iVar1 + -1;\n        if (((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))\n        goto LAB_000234d0;\n      }\n      if (iVar1 != -1) {\n        iVar4 = (*pcVar7)(param_1[5] + iVar6);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        goto LAB_000233d0;\n      }\n    }\nLAB_000234d0:\n    iVar4 = (*pcVar8)(param_1,iVar5,param_5);\n    if (iVar4 == -1) {\n      return 0xc;\n    }\n    iVar1 = (*pcVar7)(param_1[5] + iVar6,iVar4);\n    if (iVar1 == 0) {\n      return 0xc;\n    }\n    iVar4 = FUN_00023180(param_1,iVar5,iVar4,param_4,param_5);\n    if (iVar4 != 0) {\n      return iVar4;\n    }\nLAB_000233d0:\n    param_2 = *(int *)(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4);\n    param_3 = (*pcVar8)(param_1,param_2,param_5);\n    if (param_3 == -1) {\n      return 0xc;\n    }\n    iVar4 = (*pcVar7)(param_1[5] + iVar6,param_3);\n    if (iVar4 == 0) {\n      return 0xc;\n    }\n  } while( true );\n}\n\n" (function_definition "int FUN_00023180(int *param_1,int param_2,int param_3,int param_4,uint param_5)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  code *pcVar7;\n  code *pcVar8;\n  \n  pcVar8 = (code *)(PTR_DAT_000471f4 + 0x309c);\n  pcVar7 = (code *)(PTR_DAT_000471f4 + 0xb4);\n  do {\n    iVar4 = param_2 << 3;\n    while( true ) {\n      while (*(char *)(*param_1 + iVar4 + 4) == '\x04') {\n        iVar4 = param_2 * 4;\n        param_2 = *(int *)(param_1[3] + iVar4);\n        *(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0;\n        iVar1 = (*pcVar8)(param_1,param_2,param_5);\n        if (iVar1 == -1) {\n          return 0xc;\n        }\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar4);\n        iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1);\n        iVar4 = param_2 << 3;\n        param_3 = iVar1;\n        if (iVar2 == 0) {\n          return 0xc;\n        }\n      }\n      iVar1 = param_1[5];\n      iVar2 = iVar1 + param_2 * 0xc;\n      if (*(int *)(iVar2 + 4) == 0) {\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n        return 0;\n      }\n      if (*(int *)(iVar2 + 4) != 1) break;\n      iVar5 = **(int **)(iVar2 + 8);\n      iVar2 = param_3 * 0xc;\n      *(undefined4 *)(iVar1 + iVar2 + 4) = 0;\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | (uint)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16;\n      param_3 = (*pcVar8)(param_1,iVar5,param_5);\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      iVar4 = (*pcVar7)(param_1[5] + iVar2,param_3);\n      if (iVar4 == 0) {\n        return 0xc;\n      }\n      iVar4 = iVar5 << 3;\n      param_2 = iVar5;\n    }\n    iVar5 = **(int **)(iVar2 + 8);\n    iVar6 = param_3 * 0xc;\n    *(undefined4 *)(iVar1 + iVar6 + 4) = 0;\n    iVar2 = param_1[2];\n    iVar1 = iVar2 + -1;\n    iVar4 = *param_1 + iVar1 * 8;\n    if (((*(uint *)(iVar4 + 4) & 0x2000) != 0) && (0 < iVar1)) {\n      iVar3 = param_1[4] + iVar2 * 4;\n      iVar2 = (*param_1 + iVar2 * 8) - iVar4;\n      while ((iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)\n             )) {\n        iVar4 = iVar4 + iVar2 + -0x10;\n        iVar1 = iVar1 + -1;\n        if (((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))\n        goto LAB_000234d0;\n      }\n      if (iVar1 != -1) {\n        iVar4 = (*pcVar7)(param_1[5] + iVar6);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        goto LAB_000233d0;\n      }\n    }\nLAB_000234d0:\n    iVar4 = (*pcVar8)(param_1,iVar5,param_5);\n    if (iVar4 == -1) {\n      return 0xc;\n    }\n    iVar1 = (*pcVar7)(param_1[5] + iVar6,iVar4);\n    if (iVar1 == 0) {\n      return 0xc;\n    }\n    iVar4 = FUN_00023180(param_1,iVar5,iVar4,param_4,param_5);\n    if (iVar4 != 0) {\n      return iVar4;\n    }\nLAB_000233d0:\n    param_2 = *(int *)(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4);\n    param_3 = (*pcVar8)(param_1,param_2,param_5);\n    if (param_3 == -1) {\n      return 0xc;\n    }\n    iVar4 = (*pcVar7)(param_1[5] + iVar6,param_3);\n    if (iVar4 == 0) {\n      return 0xc;\n    }\n  } while( true );\n}" primitive_type (function_declarator "FUN_00023180(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  int iVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  code *pcVar7;\n  code *pcVar8;\n  \n  pcVar8 = (code *)(PTR_DAT_000471f4 + 0x309c);\n  pcVar7 = (code *)(PTR_DAT_000471f4 + 0xb4);\n  do {\n    iVar4 = param_2 << 3;\n    while( true ) {\n      while (*(char *)(*param_1 + iVar4 + 4) == '\x04') {\n        iVar4 = param_2 * 4;\n        param_2 = *(int *)(param_1[3] + iVar4);\n        *(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0;\n        iVar1 = (*pcVar8)(param_1,param_2,param_5);\n        if (iVar1 == -1) {\n          return 0xc;\n        }\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar4);\n        iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1);\n        iVar4 = param_2 << 3;\n        param_3 = iVar1;\n        if (iVar2 == 0) {\n          return 0xc;\n        }\n      }\n      iVar1 = param_1[5];\n      iVar2 = iVar1 + param_2 * 0xc;\n      if (*(int *)(iVar2 + 4) == 0) {\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n        return 0;\n      }\n      if (*(int *)(iVar2 + 4) != 1) break;\n      iVar5 = **(int **)(iVar2 + 8);\n      iVar2 = param_3 * 0xc;\n      *(undefined4 *)(iVar1 + iVar2 + 4) = 0;\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | (uint)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16;\n      param_3 = (*pcVar8)(param_1,iVar5,param_5);\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      iVar4 = (*pcVar7)(param_1[5] + iVar2,param_3);\n      if (iVar4 == 0) {\n        return 0xc;\n      }\n      iVar4 = iVar5 << 3;\n      param_2 = iVar5;\n    }\n    iVar5 = **(int **)(iVar2 + 8);\n    iVar6 = param_3 * 0xc;\n    *(undefined4 *)(iVar1 + iVar6 + 4) = 0;\n    iVar2 = param_1[2];\n    iVar1 = iVar2 + -1;\n    iVar4 = *param_1 + iVar1 * 8;\n    if (((*(uint *)(iVar4 + 4) & 0x2000) != 0) && (0 < iVar1)) {\n      iVar3 = param_1[4] + iVar2 * 4;\n      iVar2 = (*param_1 + iVar2 * 8) - iVar4;\n      while ((iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)\n             )) {\n        iVar4 = iVar4 + iVar2 + -0x10;\n        iVar1 = iVar1 + -1;\n        if (((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))\n        goto LAB_000234d0;\n      }\n      if (iVar1 != -1) {\n        iVar4 = (*pcVar7)(param_1[5] + iVar6);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        goto LAB_000233d0;\n      }\n    }\nLAB_000234d0:\n    iVar4 = (*pcVar8)(param_1,iVar5,param_5);\n    if (iVar4 == -1) {\n      return 0xc;\n    }\n    iVar1 = (*pcVar7)(param_1[5] + iVar6,iVar4);\n    if (iVar1 == 0) {\n      return 0xc;\n    }\n    iVar4 = FUN_00023180(param_1,iVar5,iVar4,param_4,param_5);\n    if (iVar4 != 0) {\n      return iVar4;\n    }\nLAB_000233d0:\n    param_2 = *(int *)(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4);\n    param_3 = (*pcVar8)(param_1,param_2,param_5);\n    if (param_3 == -1) {\n      return 0xc;\n    }\n    iVar4 = (*pcVar7)(param_1[5] + iVar6,param_3);\n    if (iVar4 == 0) {\n      return 0xc;\n    }\n  } while( true );\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" 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 "code *pcVar7;" type_identifier (pointer_declarator "*pcVar7" * identifier) ;) (declaration "code *pcVar8;" type_identifier (pointer_declarator "*pcVar8" * identifier) ;) (expression_statement "pcVar8 = (code *)(PTR_DAT_000471f4 + 0x309c);" (assignment_expression "pcVar8 = (code *)(PTR_DAT_000471f4 + 0x309c)" identifier = (cast_expression "(code *)(PTR_DAT_000471f4 + 0x309c)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_000471f4 + 0x309c)" ( (binary_expression "PTR_DAT_000471f4 + 0x309c" identifier + number_literal) )))) ;) (expression_statement "pcVar7 = (code *)(PTR_DAT_000471f4 + 0xb4);" (assignment_expression "pcVar7 = (code *)(PTR_DAT_000471f4 + 0xb4)" identifier = (cast_expression "(code *)(PTR_DAT_000471f4 + 0xb4)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_000471f4 + 0xb4)" ( (binary_expression "PTR_DAT_000471f4 + 0xb4" identifier + number_literal) )))) ;) (do_statement "do {\n    iVar4 = param_2 << 3;\n    while( true ) {\n      while (*(char *)(*param_1 + iVar4 + 4) == '\x04') {\n        iVar4 = param_2 * 4;\n        param_2 = *(int *)(param_1[3] + iVar4);\n        *(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0;\n        iVar1 = (*pcVar8)(param_1,param_2,param_5);\n        if (iVar1 == -1) {\n          return 0xc;\n        }\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar4);\n        iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1);\n        iVar4 = param_2 << 3;\n        param_3 = iVar1;\n        if (iVar2 == 0) {\n          return 0xc;\n        }\n      }\n      iVar1 = param_1[5];\n      iVar2 = iVar1 + param_2 * 0xc;\n      if (*(int *)(iVar2 + 4) == 0) {\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n        return 0;\n      }\n      if (*(int *)(iVar2 + 4) != 1) break;\n      iVar5 = **(int **)(iVar2 + 8);\n      iVar2 = param_3 * 0xc;\n      *(undefined4 *)(iVar1 + iVar2 + 4) = 0;\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | (uint)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16;\n      param_3 = (*pcVar8)(param_1,iVar5,param_5);\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      iVar4 = (*pcVar7)(param_1[5] + iVar2,param_3);\n      if (iVar4 == 0) {\n        return 0xc;\n      }\n      iVar4 = iVar5 << 3;\n      param_2 = iVar5;\n    }\n    iVar5 = **(int **)(iVar2 + 8);\n    iVar6 = param_3 * 0xc;\n    *(undefined4 *)(iVar1 + iVar6 + 4) = 0;\n    iVar2 = param_1[2];\n    iVar1 = iVar2 + -1;\n    iVar4 = *param_1 + iVar1 * 8;\n    if (((*(uint *)(iVar4 + 4) & 0x2000) != 0) && (0 < iVar1)) {\n      iVar3 = param_1[4] + iVar2 * 4;\n      iVar2 = (*param_1 + iVar2 * 8) - iVar4;\n      while ((iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)\n             )) {\n        iVar4 = iVar4 + iVar2 + -0x10;\n        iVar1 = iVar1 + -1;\n        if (((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))\n        goto LAB_000234d0;\n      }\n      if (iVar1 != -1) {\n        iVar4 = (*pcVar7)(param_1[5] + iVar6);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        goto LAB_000233d0;\n      }\n    }\nLAB_000234d0:\n    iVar4 = (*pcVar8)(param_1,iVar5,param_5);\n    if (iVar4 == -1) {\n      return 0xc;\n    }\n    iVar1 = (*pcVar7)(param_1[5] + iVar6,iVar4);\n    if (iVar1 == 0) {\n      return 0xc;\n    }\n    iVar4 = FUN_00023180(param_1,iVar5,iVar4,param_4,param_5);\n    if (iVar4 != 0) {\n      return iVar4;\n    }\nLAB_000233d0:\n    param_2 = *(int *)(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4);\n    param_3 = (*pcVar8)(param_1,param_2,param_5);\n    if (param_3 == -1) {\n      return 0xc;\n    }\n    iVar4 = (*pcVar7)(param_1[5] + iVar6,param_3);\n    if (iVar4 == 0) {\n      return 0xc;\n    }\n  } while( true );" do (compound_statement "{\n    iVar4 = param_2 << 3;\n    while( true ) {\n      while (*(char *)(*param_1 + iVar4 + 4) == '\x04') {\n        iVar4 = param_2 * 4;\n        param_2 = *(int *)(param_1[3] + iVar4);\n        *(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0;\n        iVar1 = (*pcVar8)(param_1,param_2,param_5);\n        if (iVar1 == -1) {\n          return 0xc;\n        }\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar4);\n        iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1);\n        iVar4 = param_2 << 3;\n        param_3 = iVar1;\n        if (iVar2 == 0) {\n          return 0xc;\n        }\n      }\n      iVar1 = param_1[5];\n      iVar2 = iVar1 + param_2 * 0xc;\n      if (*(int *)(iVar2 + 4) == 0) {\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n        return 0;\n      }\n      if (*(int *)(iVar2 + 4) != 1) break;\n      iVar5 = **(int **)(iVar2 + 8);\n      iVar2 = param_3 * 0xc;\n      *(undefined4 *)(iVar1 + iVar2 + 4) = 0;\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | (uint)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16;\n      param_3 = (*pcVar8)(param_1,iVar5,param_5);\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      iVar4 = (*pcVar7)(param_1[5] + iVar2,param_3);\n      if (iVar4 == 0) {\n        return 0xc;\n      }\n      iVar4 = iVar5 << 3;\n      param_2 = iVar5;\n    }\n    iVar5 = **(int **)(iVar2 + 8);\n    iVar6 = param_3 * 0xc;\n    *(undefined4 *)(iVar1 + iVar6 + 4) = 0;\n    iVar2 = param_1[2];\n    iVar1 = iVar2 + -1;\n    iVar4 = *param_1 + iVar1 * 8;\n    if (((*(uint *)(iVar4 + 4) & 0x2000) != 0) && (0 < iVar1)) {\n      iVar3 = param_1[4] + iVar2 * 4;\n      iVar2 = (*param_1 + iVar2 * 8) - iVar4;\n      while ((iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)\n             )) {\n        iVar4 = iVar4 + iVar2 + -0x10;\n        iVar1 = iVar1 + -1;\n        if (((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))\n        goto LAB_000234d0;\n      }\n      if (iVar1 != -1) {\n        iVar4 = (*pcVar7)(param_1[5] + iVar6);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        goto LAB_000233d0;\n      }\n    }\nLAB_000234d0:\n    iVar4 = (*pcVar8)(param_1,iVar5,param_5);\n    if (iVar4 == -1) {\n      return 0xc;\n    }\n    iVar1 = (*pcVar7)(param_1[5] + iVar6,iVar4);\n    if (iVar1 == 0) {\n      return 0xc;\n    }\n    iVar4 = FUN_00023180(param_1,iVar5,iVar4,param_4,param_5);\n    if (iVar4 != 0) {\n      return iVar4;\n    }\nLAB_000233d0:\n    param_2 = *(int *)(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4);\n    param_3 = (*pcVar8)(param_1,param_2,param_5);\n    if (param_3 == -1) {\n      return 0xc;\n    }\n    iVar4 = (*pcVar7)(param_1[5] + iVar6,param_3);\n    if (iVar4 == 0) {\n      return 0xc;\n    }\n  }" { (expression_statement "iVar4 = param_2 << 3;" (assignment_expression "iVar4 = param_2 << 3" identifier = (binary_expression "param_2 << 3" identifier << number_literal)) ;) (while_statement "while( true ) {\n      while (*(char *)(*param_1 + iVar4 + 4) == '\x04') {\n        iVar4 = param_2 * 4;\n        param_2 = *(int *)(param_1[3] + iVar4);\n        *(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0;\n        iVar1 = (*pcVar8)(param_1,param_2,param_5);\n        if (iVar1 == -1) {\n          return 0xc;\n        }\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar4);\n        iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1);\n        iVar4 = param_2 << 3;\n        param_3 = iVar1;\n        if (iVar2 == 0) {\n          return 0xc;\n        }\n      }\n      iVar1 = param_1[5];\n      iVar2 = iVar1 + param_2 * 0xc;\n      if (*(int *)(iVar2 + 4) == 0) {\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n        return 0;\n      }\n      if (*(int *)(iVar2 + 4) != 1) break;\n      iVar5 = **(int **)(iVar2 + 8);\n      iVar2 = param_3 * 0xc;\n      *(undefined4 *)(iVar1 + iVar2 + 4) = 0;\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | (uint)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16;\n      param_3 = (*pcVar8)(param_1,iVar5,param_5);\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      iVar4 = (*pcVar7)(param_1[5] + iVar2,param_3);\n      if (iVar4 == 0) {\n        return 0xc;\n      }\n      iVar4 = iVar5 << 3;\n      param_2 = iVar5;\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      while (*(char *)(*param_1 + iVar4 + 4) == '\x04') {\n        iVar4 = param_2 * 4;\n        param_2 = *(int *)(param_1[3] + iVar4);\n        *(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0;\n        iVar1 = (*pcVar8)(param_1,param_2,param_5);\n        if (iVar1 == -1) {\n          return 0xc;\n        }\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar4);\n        iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1);\n        iVar4 = param_2 << 3;\n        param_3 = iVar1;\n        if (iVar2 == 0) {\n          return 0xc;\n        }\n      }\n      iVar1 = param_1[5];\n      iVar2 = iVar1 + param_2 * 0xc;\n      if (*(int *)(iVar2 + 4) == 0) {\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n        return 0;\n      }\n      if (*(int *)(iVar2 + 4) != 1) break;\n      iVar5 = **(int **)(iVar2 + 8);\n      iVar2 = param_3 * 0xc;\n      *(undefined4 *)(iVar1 + iVar2 + 4) = 0;\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | (uint)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16;\n      param_3 = (*pcVar8)(param_1,iVar5,param_5);\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      iVar4 = (*pcVar7)(param_1[5] + iVar2,param_3);\n      if (iVar4 == 0) {\n        return 0xc;\n      }\n      iVar4 = iVar5 << 3;\n      param_2 = iVar5;\n    }" { (while_statement "while (*(char *)(*param_1 + iVar4 + 4) == '\x04') {\n        iVar4 = param_2 * 4;\n        param_2 = *(int *)(param_1[3] + iVar4);\n        *(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0;\n        iVar1 = (*pcVar8)(param_1,param_2,param_5);\n        if (iVar1 == -1) {\n          return 0xc;\n        }\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar4);\n        iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1);\n        iVar4 = param_2 << 3;\n        param_3 = iVar1;\n        if (iVar2 == 0) {\n          return 0xc;\n        }\n      }" while (parenthesized_expression "(*(char *)(*param_1 + iVar4 + 4) == '\x04')" ( (binary_expression "*(char *)(*param_1 + iVar4 + 4) == '\x04'" (pointer_expression "*(char *)(*param_1 + iVar4 + 4)" * (cast_expression "(char *)(*param_1 + iVar4 + 4)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + iVar4 + 4)" ( (binary_expression "*param_1 + iVar4 + 4" (binary_expression "*param_1 + iVar4" (pointer_expression "*param_1" * identifier) + identifier) + number_literal) )))) == (char_literal "'\x04'" ' escape_sequence ')) )) (compound_statement "{\n        iVar4 = param_2 * 4;\n        param_2 = *(int *)(param_1[3] + iVar4);\n        *(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0;\n        iVar1 = (*pcVar8)(param_1,param_2,param_5);\n        if (iVar1 == -1) {\n          return 0xc;\n        }\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar4);\n        iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1);\n        iVar4 = param_2 << 3;\n        param_3 = iVar1;\n        if (iVar2 == 0) {\n          return 0xc;\n        }\n      }" { (expression_statement "iVar4 = param_2 * 4;" (assignment_expression "iVar4 = param_2 * 4" identifier = (binary_expression "param_2 * 4" identifier * number_literal)) ;) (expression_statement "param_2 = *(int *)(param_1[3] + iVar4);" (assignment_expression "param_2 = *(int *)(param_1[3] + iVar4)" identifier = (pointer_expression "*(int *)(param_1[3] + iVar4)" * (cast_expression "(int *)(param_1[3] + iVar4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[3] + iVar4)" ( (binary_expression "param_1[3] + iVar4" (subscript_expression "param_1[3]" identifier [ number_literal ]) + identifier) ))))) ;) (expression_statement "*(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0;" (assignment_expression "*(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0" (pointer_expression "*(undefined4 *)(param_1[5] + param_3 * 0xc + 4)" * (cast_expression "(undefined4 *)(param_1[5] + param_3 * 0xc + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[5] + param_3 * 0xc + 4)" ( (binary_expression "param_1[5] + param_3 * 0xc + 4" (binary_expression "param_1[5] + param_3 * 0xc" (subscript_expression "param_1[5]" identifier [ number_literal ]) + (binary_expression "param_3 * 0xc" identifier * number_literal)) + number_literal) )))) = number_literal) ;) (expression_statement "iVar1 = (*pcVar8)(param_1,param_2,param_5);" (assignment_expression "iVar1 = (*pcVar8)(param_1,param_2,param_5)" identifier = (call_expression "(*pcVar8)(param_1,param_2,param_5)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(param_1,param_2,param_5)" ( identifier , identifier , identifier )))) ;) (if_statement "if (iVar1 == -1) {\n          return 0xc;\n        }" if (parenthesized_expression "(iVar1 == -1)" ( (binary_expression "iVar1 == -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] + iVar4);" (assignment_expression "*(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar4)" (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] + iVar4)" * (cast_expression "(undefined4 *)(param_1[3] + iVar4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[3] + iVar4)" ( (binary_expression "param_1[3] + iVar4" (subscript_expression "param_1[3]" identifier [ number_literal ]) + identifier) ))))) ;) (expression_statement "iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1);" (assignment_expression "iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1)" identifier = (call_expression "(*pcVar7)(param_1[5] + param_3 * 0xc,iVar1)" (parenthesized_expression "(*pcVar7)" ( (pointer_expression "*pcVar7" * identifier) )) (argument_list "(param_1[5] + param_3 * 0xc,iVar1)" ( (binary_expression "param_1[5] + param_3 * 0xc" (subscript_expression "param_1[5]" identifier [ number_literal ]) + (binary_expression "param_3 * 0xc" identifier * number_literal)) , identifier )))) ;) (expression_statement "iVar4 = param_2 << 3;" (assignment_expression "iVar4 = param_2 << 3" identifier = (binary_expression "param_2 << 3" identifier << number_literal)) ;) (expression_statement "param_3 = iVar1;" (assignment_expression "param_3 = iVar1" identifier = identifier) ;) (if_statement "if (iVar2 == 0) {\n          return 0xc;\n        }" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (compound_statement "{\n          return 0xc;\n        }" { (return_statement "return 0xc;" return number_literal ;) })) })) (expression_statement "iVar1 = param_1[5];" (assignment_expression "iVar1 = param_1[5]" identifier = (subscript_expression "param_1[5]" identifier [ number_literal ])) ;) (expression_statement "iVar2 = iVar1 + param_2 * 0xc;" (assignment_expression "iVar2 = iVar1 + param_2 * 0xc" identifier = (binary_expression "iVar1 + param_2 * 0xc" identifier + (binary_expression "param_2 * 0xc" identifier * number_literal))) ;) (if_statement "if (*(int *)(iVar2 + 4) == 0) {\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n        return 0;\n      }" if (parenthesized_expression "(*(int *)(iVar2 + 4) == 0)" ( (binary_expression "*(int *)(iVar2 + 4) == 0" (pointer_expression "*(int *)(iVar2 + 4)" * (cast_expression "(int *)(iVar2 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 4)" ( (binary_expression "iVar2 + 4" identifier + number_literal) )))) == 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 ;) })) (if_statement "if (*(int *)(iVar2 + 4) != 1) break;" if (parenthesized_expression "(*(int *)(iVar2 + 4) != 1)" ( (binary_expression "*(int *)(iVar2 + 4) != 1" (pointer_expression "*(int *)(iVar2 + 4)" * (cast_expression "(int *)(iVar2 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 4)" ( (binary_expression "iVar2 + 4" identifier + number_literal) )))) != number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar5 = **(int **)(iVar2 + 8);" (assignment_expression "iVar5 = **(int **)(iVar2 + 8)" identifier = (pointer_expression "**(int **)(iVar2 + 8)" * (pointer_expression "*(int **)(iVar2 + 8)" * (cast_expression "(int **)(iVar2 + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar2 + 8)" ( (binary_expression "iVar2 + 8" identifier + number_literal) )))))) ;) (expression_statement "iVar2 = param_3 * 0xc;" (assignment_expression "iVar2 = param_3 * 0xc" identifier = (binary_expression "param_3 * 0xc" identifier * number_literal)) ;) (expression_statement "*(undefined4 *)(iVar1 + iVar2 + 4) = 0;" (assignment_expression "*(undefined4 *)(iVar1 + iVar2 + 4) = 0" (pointer_expression "*(undefined4 *)(iVar1 + iVar2 + 4)" * (cast_expression "(undefined4 *)(iVar1 + iVar2 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + iVar2 + 4)" ( (binary_expression "iVar1 + iVar2 + 4" (binary_expression "iVar1 + iVar2" identifier + identifier) + number_literal) )))) = number_literal) ;) (if_statement "if ((param_2 == param_4) && (param_2 != param_3)) {\n        iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5);\n        if (iVar4 == 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        iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        return 0;\n      }" { (expression_statement "iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5);" (assignment_expression "iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5)" identifier = (call_expression "FUN_000200b4(param_1[5] + iVar2,iVar5)" identifier (argument_list "(param_1[5] + iVar2,iVar5)" ( (binary_expression "param_1[5] + iVar2" (subscript_expression "param_1[5]" identifier [ number_literal ]) + identifier) , identifier )))) ;) (if_statement "if (iVar4 == 0) {\n          return 0xc;\n        }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (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)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16;" (assignment_expression "param_5 = param_5 | (uint)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16" identifier = (binary_expression "param_5 | (uint)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16" identifier | (binary_expression "(uint)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16" (call_expression "(uint)(*(int *)(*param_1 + iVar4 + 4) << 8)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(int *)(*param_1 + iVar4 + 4) << 8)" ( (binary_expression "*(int *)(*param_1 + iVar4 + 4) << 8" (pointer_expression "*(int *)(*param_1 + iVar4 + 4)" * (cast_expression "(int *)(*param_1 + iVar4 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + iVar4 + 4)" ( (binary_expression "*param_1 + iVar4 + 4" (binary_expression "*param_1 + iVar4" (pointer_expression "*param_1" * identifier) + identifier) + number_literal) )))) << number_literal) ))) >> number_literal))) ;) (expression_statement "param_3 = (*pcVar8)(param_1,iVar5,param_5);" (assignment_expression "param_3 = (*pcVar8)(param_1,iVar5,param_5)" identifier = (call_expression "(*pcVar8)(param_1,iVar5,param_5)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(param_1,iVar5,param_5)" ( identifier , identifier , identifier )))) ;) (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 "iVar4 = (*pcVar7)(param_1[5] + iVar2,param_3);" (assignment_expression "iVar4 = (*pcVar7)(param_1[5] + iVar2,param_3)" identifier = (call_expression "(*pcVar7)(param_1[5] + iVar2,param_3)" (parenthesized_expression "(*pcVar7)" ( (pointer_expression "*pcVar7" * identifier) )) (argument_list "(param_1[5] + iVar2,param_3)" ( (binary_expression "param_1[5] + iVar2" (subscript_expression "param_1[5]" identifier [ number_literal ]) + identifier) , identifier )))) ;) (if_statement "if (iVar4 == 0) {\n        return 0xc;\n      }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0xc;\n      }" { (return_statement "return 0xc;" return number_literal ;) })) (expression_statement "iVar4 = iVar5 << 3;" (assignment_expression "iVar4 = iVar5 << 3" identifier = (binary_expression "iVar5 << 3" identifier << number_literal)) ;) (expression_statement "param_2 = iVar5;" (assignment_expression "param_2 = iVar5" identifier = identifier) ;) })) (expression_statement "iVar5 = **(int **)(iVar2 + 8);" (assignment_expression "iVar5 = **(int **)(iVar2 + 8)" identifier = (pointer_expression "**(int **)(iVar2 + 8)" * (pointer_expression "*(int **)(iVar2 + 8)" * (cast_expression "(int **)(iVar2 + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar2 + 8)" ( (binary_expression "iVar2 + 8" identifier + 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 "*(undefined4 *)(iVar1 + iVar6 + 4) = 0;" (assignment_expression "*(undefined4 *)(iVar1 + iVar6 + 4) = 0" (pointer_expression "*(undefined4 *)(iVar1 + iVar6 + 4)" * (cast_expression "(undefined4 *)(iVar1 + iVar6 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + iVar6 + 4)" ( (binary_expression "iVar1 + iVar6 + 4" (binary_expression "iVar1 + iVar6" identifier + identifier) + number_literal) )))) = number_literal) ;) (expression_statement "iVar2 = param_1[2];" (assignment_expression "iVar2 = param_1[2]" identifier = (subscript_expression "param_1[2]" identifier [ number_literal ])) ;) (expression_statement "iVar1 = iVar2 + -1;" (assignment_expression "iVar1 = iVar2 + -1" identifier = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) (expression_statement "iVar4 = *param_1 + iVar1 * 8;" (assignment_expression "iVar4 = *param_1 + iVar1 * 8" identifier = (binary_expression "*param_1 + iVar1 * 8" (pointer_expression "*param_1" * identifier) + (binary_expression "iVar1 * 8" identifier * number_literal))) ;) (if_statement "if (((*(uint *)(iVar4 + 4) & 0x2000) != 0) && (0 < iVar1)) {\n      iVar3 = param_1[4] + iVar2 * 4;\n      iVar2 = (*param_1 + iVar2 * 8) - iVar4;\n      while ((iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)\n             )) {\n        iVar4 = iVar4 + iVar2 + -0x10;\n        iVar1 = iVar1 + -1;\n        if (((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))\n        goto LAB_000234d0;\n      }\n      if (iVar1 != -1) {\n        iVar4 = (*pcVar7)(param_1[5] + iVar6);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        goto LAB_000233d0;\n      }\n    }" if (parenthesized_expression "(((*(uint *)(iVar4 + 4) & 0x2000) != 0) && (0 < iVar1))" ( (binary_expression "((*(uint *)(iVar4 + 4) & 0x2000) != 0) && (0 < iVar1)" (parenthesized_expression "((*(uint *)(iVar4 + 4) & 0x2000) != 0)" ( (binary_expression "(*(uint *)(iVar4 + 4) & 0x2000) != 0" (parenthesized_expression "(*(uint *)(iVar4 + 4) & 0x2000)" ( (binary_expression "*(uint *)(iVar4 + 4) & 0x2000" (pointer_expression "*(uint *)(iVar4 + 4)" * (cast_expression "(uint *)(iVar4 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 4)" ( (binary_expression "iVar4 + 4" identifier + number_literal) )))) & number_literal) )) != number_literal) )) && (parenthesized_expression "(0 < iVar1)" ( (binary_expression "0 < iVar1" number_literal < identifier) ))) )) (compound_statement "{\n      iVar3 = param_1[4] + iVar2 * 4;\n      iVar2 = (*param_1 + iVar2 * 8) - iVar4;\n      while ((iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)\n             )) {\n        iVar4 = iVar4 + iVar2 + -0x10;\n        iVar1 = iVar1 + -1;\n        if (((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))\n        goto LAB_000234d0;\n      }\n      if (iVar1 != -1) {\n        iVar4 = (*pcVar7)(param_1[5] + iVar6);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        goto LAB_000233d0;\n      }\n    }" { (expression_statement "iVar3 = param_1[4] + iVar2 * 4;" (assignment_expression "iVar3 = param_1[4] + iVar2 * 4" identifier = (binary_expression "param_1[4] + iVar2 * 4" (subscript_expression "param_1[4]" identifier [ number_literal ]) + (binary_expression "iVar2 * 4" identifier * number_literal))) ;) (expression_statement "iVar2 = (*param_1 + iVar2 * 8) - iVar4;" (assignment_expression "iVar2 = (*param_1 + iVar2 * 8) - iVar4" identifier = (binary_expression "(*param_1 + iVar2 * 8) - iVar4" (parenthesized_expression "(*param_1 + iVar2 * 8)" ( (binary_expression "*param_1 + iVar2 * 8" (pointer_expression "*param_1" * identifier) + (binary_expression "iVar2 * 8" identifier * number_literal)) )) - identifier)) ;) (while_statement "while ((iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)\n             )) {\n        iVar4 = iVar4 + iVar2 + -0x10;\n        iVar1 = iVar1 + -1;\n        if (((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))\n        goto LAB_000234d0;\n      }" while (parenthesized_expression "((iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)\n             ))" ( (parenthesized_expression "(iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)\n             )" ( (binary_expression "iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)" (binary_expression "iVar5 != *(int *)(iVar3 + -4)" identifier != (pointer_expression "*(int *)(iVar3 + -4)" * (cast_expression "(int *)(iVar3 + -4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + -4)" ( (binary_expression "iVar3 + -4" identifier + number_literal) ))))) || (parenthesized_expression "(param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)" ( (binary_expression "param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16" identifier != (binary_expression "(uint)(*(int *)(iVar4 + 4) << 8) >> 0x16" (call_expression "(uint)(*(int *)(iVar4 + 4) << 8)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(int *)(iVar4 + 4) << 8)" ( (binary_expression "*(int *)(iVar4 + 4) << 8" (pointer_expression "*(int *)(iVar4 + 4)" * (cast_expression "(int *)(iVar4 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 4)" ( (binary_expression "iVar4 + 4" identifier + number_literal) )))) << number_literal) ))) >> number_literal)) ))) )) )) (compound_statement "{\n        iVar4 = iVar4 + iVar2 + -0x10;\n        iVar1 = iVar1 + -1;\n        if (((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))\n        goto LAB_000234d0;\n      }" { (expression_statement "iVar4 = iVar4 + iVar2 + -0x10;" (assignment_expression "iVar4 = iVar4 + iVar2 + -0x10" identifier = (binary_expression "iVar4 + iVar2 + -0x10" (binary_expression "iVar4 + iVar2" identifier + identifier) + number_literal)) ;) (expression_statement "iVar1 = iVar1 + -1;" (assignment_expression "iVar1 = iVar1 + -1" identifier = (binary_expression "iVar1 + -1" identifier + number_literal)) ;) (if_statement "if (((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))\n        goto LAB_000234d0;" if (parenthesized_expression "(((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))" ( (binary_expression "((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0)" (parenthesized_expression "((*(uint *)(iVar4 + 4) & 0x2000) == 0)" ( (binary_expression "(*(uint *)(iVar4 + 4) & 0x2000) == 0" (parenthesized_expression "(*(uint *)(iVar4 + 4) & 0x2000)" ( (binary_expression "*(uint *)(iVar4 + 4) & 0x2000" (pointer_expression "*(uint *)(iVar4 + 4)" * (cast_expression "(uint *)(iVar4 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 4)" ( (binary_expression "iVar4 + 4" identifier + number_literal) )))) & number_literal) )) == number_literal) )) || (parenthesized_expression "(iVar3 = iVar3 + -4, iVar1 == 0)" ( (comma_expression "iVar3 = iVar3 + -4, iVar1 == 0" (assignment_expression "iVar3 = iVar3 + -4" identifier = (binary_expression "iVar3 + -4" identifier + number_literal)) , (binary_expression "iVar1 == 0" identifier == number_literal)) ))) )) (goto_statement "goto LAB_000234d0;" goto statement_identifier ;)) })) (if_statement "if (iVar1 != -1) {\n        iVar4 = (*pcVar7)(param_1[5] + iVar6);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        goto LAB_000233d0;\n      }" if (parenthesized_expression "(iVar1 != -1)" ( (binary_expression "iVar1 != -1" identifier != number_literal) )) (compound_statement "{\n        iVar4 = (*pcVar7)(param_1[5] + iVar6);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        goto LAB_000233d0;\n      }" { (expression_statement "iVar4 = (*pcVar7)(param_1[5] + iVar6);" (assignment_expression "iVar4 = (*pcVar7)(param_1[5] + iVar6)" identifier = (call_expression "(*pcVar7)(param_1[5] + iVar6)" (parenthesized_expression "(*pcVar7)" ( (pointer_expression "*pcVar7" * identifier) )) (argument_list "(param_1[5] + iVar6)" ( (binary_expression "param_1[5] + iVar6" (subscript_expression "param_1[5]" identifier [ number_literal ]) + identifier) )))) ;) (if_statement "if (iVar4 == 0) {\n          return 0xc;\n        }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n          return 0xc;\n        }" { (return_statement "return 0xc;" return number_literal ;) })) (goto_statement "goto LAB_000233d0;" goto statement_identifier ;) })) })) (labeled_statement "LAB_000234d0:\n    iVar4 = (*pcVar8)(param_1,iVar5,param_5);" statement_identifier : (expression_statement "iVar4 = (*pcVar8)(param_1,iVar5,param_5);" (assignment_expression "iVar4 = (*pcVar8)(param_1,iVar5,param_5)" identifier = (call_expression "(*pcVar8)(param_1,iVar5,param_5)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(param_1,iVar5,param_5)" ( identifier , identifier , identifier )))) ;)) (if_statement "if (iVar4 == -1) {\n      return 0xc;\n    }" if (parenthesized_expression "(iVar4 == -1)" ( (binary_expression "iVar4 == -1" identifier == number_literal) )) (compound_statement "{\n      return 0xc;\n    }" { (return_statement "return 0xc;" return number_literal ;) })) (expression_statement "iVar1 = (*pcVar7)(param_1[5] + iVar6,iVar4);" (assignment_expression "iVar1 = (*pcVar7)(param_1[5] + iVar6,iVar4)" identifier = (call_expression "(*pcVar7)(param_1[5] + iVar6,iVar4)" (parenthesized_expression "(*pcVar7)" ( (pointer_expression "*pcVar7" * identifier) )) (argument_list "(param_1[5] + iVar6,iVar4)" ( (binary_expression "param_1[5] + iVar6" (subscript_expression "param_1[5]" identifier [ number_literal ]) + identifier) , identifier )))) ;) (if_statement "if (iVar1 == 0) {\n      return 0xc;\n    }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n      return 0xc;\n    }" { (return_statement "return 0xc;" return number_literal ;) })) (expression_statement "iVar4 = FUN_00023180(param_1,iVar5,iVar4,param_4,param_5);" (assignment_expression "iVar4 = FUN_00023180(param_1,iVar5,iVar4,param_4,param_5)" identifier = (call_expression "FUN_00023180(param_1,iVar5,iVar4,param_4,param_5)" identifier (argument_list "(param_1,iVar5,iVar4,param_4,param_5)" ( identifier , identifier , identifier , identifier , identifier )))) ;) (if_statement "if (iVar4 != 0) {\n      return iVar4;\n    }" if (parenthesized_expression "(iVar4 != 0)" ( (binary_expression "iVar4 != 0" identifier != number_literal) )) (compound_statement "{\n      return iVar4;\n    }" { (return_statement "return iVar4;" return identifier ;) })) (labeled_statement "LAB_000233d0:\n    param_2 = *(int *)(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4);" statement_identifier : (expression_statement "param_2 = *(int *)(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4);" (assignment_expression "param_2 = *(int *)(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4)" identifier = (pointer_expression "*(int *)(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4)" * (cast_expression "(int *)(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4)" ( (binary_expression "*(int *)(param_1[5] + param_2 * 0xc + 8) + 4" (pointer_expression "*(int *)(param_1[5] + param_2 * 0xc + 8)" * (cast_expression "(int *)(param_1[5] + param_2 * 0xc + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[5] + param_2 * 0xc + 8)" ( (binary_expression "param_1[5] + param_2 * 0xc + 8" (binary_expression "param_1[5] + param_2 * 0xc" (subscript_expression "param_1[5]" identifier [ number_literal ]) + (binary_expression "param_2 * 0xc" identifier * number_literal)) + number_literal) )))) + number_literal) ))))) ;)) (expression_statement "param_3 = (*pcVar8)(param_1,param_2,param_5);" (assignment_expression "param_3 = (*pcVar8)(param_1,param_2,param_5)" identifier = (call_expression "(*pcVar8)(param_1,param_2,param_5)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(param_1,param_2,param_5)" ( identifier , identifier , identifier )))) ;) (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 "iVar4 = (*pcVar7)(param_1[5] + iVar6,param_3);" (assignment_expression "iVar4 = (*pcVar7)(param_1[5] + iVar6,param_3)" identifier = (call_expression "(*pcVar7)(param_1[5] + iVar6,param_3)" (parenthesized_expression "(*pcVar7)" ( (pointer_expression "*pcVar7" * identifier) )) (argument_list "(param_1[5] + iVar6,param_3)" ( (binary_expression "param_1[5] + iVar6" (subscript_expression "param_1[5]" identifier [ number_literal ]) + identifier) , identifier )))) ;) (if_statement "if (iVar4 == 0) {\n      return 0xc;\n    }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n      return 0xc;\n    }" { (return_statement "return 0xc;" return number_literal ;) })) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit "reg_errcode_t\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  undefined3 extraout_var;\n  int iVar1;\n  _Bool _Var6;\n  re_token_t *prVar2;\n  int iVar3;\n  int iVar4;\n  reg_errcode_t rVar5;\n  re_node_set *prVar7;\n  Idx *pIVar8;\n  int iVar9;\n  size_t sVar10;\n  int iVar11;\n  code *pcVar12;\n  code *pcVar13;\n  \n  pcVar13 = (code *)(PTR_LAB_000471f4 + 0x309c);\n  pcVar12 = (code *)(PTR_LAB_000471f4 + 0xb4);\n  do {\n    iVar9 = top_org_node << 3;\n    iVar3 = top_clone_node;\n    while( true ) {\n      while ((&dfa->nodes->field_0x4)[iVar9] == '\x04') {\n        iVar4 = dfa->nexts[top_org_node];\n        dfa->edests[iVar3].nelem = 0;\n        iVar11 = (*pcVar13)(dfa,iVar4,init_constraint);\n        if (iVar11 == -1) {\n          return _REG_ESPACE;\n        }\n        dfa->nexts[iVar3] = dfa->nexts[top_org_node];\n        iVar1 = (*pcVar12)(dfa->edests + iVar3,iVar11);\n        iVar9 = iVar4 << 3;\n        top_org_node = iVar4;\n        iVar3 = iVar11;\n        if (iVar1 == 0) {\n          return _REG_ESPACE;\n        }\n      }\n      prVar7 = dfa->edests;\n      if (prVar7[top_org_node].nelem == 0) {\n        dfa->nexts[iVar3] = dfa->nexts[top_org_node];\n        return _REG_NOERROR;\n      }\n      if (prVar7[top_org_node].nelem != 1) break;\n      iVar11 = *prVar7[top_org_node].elems;\n      prVar7[iVar3].nelem = 0;\n      if ((top_org_node == root_node) && (top_org_node != iVar3)) {\n        _Var6 = re_node_set_insert(dfa->edests + iVar3,iVar11);\n        if (CONCAT31(extraout_var,_Var6) == 0) {\n          return _REG_ESPACE;\n        }\n        return _REG_NOERROR;\n      }\n      init_constraint =\n           init_constraint | (uint)(*(int *)(&dfa->nodes->field_0x4 + iVar9) << 8) >> 0x16;\n      iVar4 = (*pcVar13)(dfa,iVar11,init_constraint);\n      if (iVar4 == -1) {\n        return _REG_ESPACE;\n      }\n      iVar3 = (*pcVar12)(dfa->edests + iVar3,iVar4);\n      if (iVar3 == 0) {\n        return _REG_ESPACE;\n      }\n      iVar9 = iVar11 << 3;\n      top_org_node = iVar11;\n      iVar3 = iVar4;\n    }\n    iVar11 = *prVar7[top_org_node].elems;\n    prVar7[iVar3].nelem = 0;\n    sVar10 = dfa->nodes_len;\n    iVar9 = sVar10 - 1;\n    prVar2 = dfa->nodes + iVar9;\n    if (((*(uint *)&prVar2->field_0x4 & 0x2000) != 0) && (0 < iVar9)) {\n      pIVar8 = dfa->org_indices + sVar10;\n      iVar4 = sVar10 * 8 - (int)prVar2;\n      while ((iVar11 != pIVar8[-1] ||\n             (init_constraint != (uint)(*(int *)&prVar2->field_0x4 << 8) >> 0x16))) {\n        prVar2 = (re_token_t *)((int)prVar2 + (int)dfa->nodes + iVar4 + -0x10);\n        iVar9 = iVar9 + -1;\n        if (((*(uint *)&prVar2->field_0x4 & 0x2000) == 0) || (pIVar8 = pIVar8 + -1, iVar9 == 0))\n        goto LAB_000234d0;\n      }\n      if (iVar9 != -1) {\n        iVar9 = (*pcVar12)(dfa->edests + iVar3);\n        if (iVar9 == 0) {\n          return _REG_ESPACE;\n        }\n        goto LAB_000233d0;\n      }\n    }\nLAB_000234d0:\n    iVar9 = (*pcVar13)(dfa,iVar11,init_constraint);\n    if (iVar9 == -1) {\n      return _REG_ESPACE;\n    }\n    iVar4 = (*pcVar12)(dfa->edests + iVar3,iVar9);\n    if (iVar4 == 0) {\n      return _REG_ESPACE;\n    }\n    rVar5 = duplicate_node_closure(dfa,iVar11,iVar9,root_node,init_constraint);\n    if (rVar5 != _REG_NOERROR) {\n      return rVar5;\n    }\nLAB_000233d0:\n    top_org_node = dfa->edests[top_org_node].elems[1];\n    top_clone_node = (*pcVar13)(dfa,top_org_node,init_constraint);\n    if (top_clone_node == -1) {\n      return _REG_ESPACE;\n    }\n    iVar3 = (*pcVar12)(dfa->edests + iVar3,top_clone_node);\n    if (iVar3 == 0) {\n      return _REG_ESPACE;\n    }\n  } while( true );\n}\n\n" (function_definition "reg_errcode_t\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  undefined3 extraout_var;\n  int iVar1;\n  _Bool _Var6;\n  re_token_t *prVar2;\n  int iVar3;\n  int iVar4;\n  reg_errcode_t rVar5;\n  re_node_set *prVar7;\n  Idx *pIVar8;\n  int iVar9;\n  size_t sVar10;\n  int iVar11;\n  code *pcVar12;\n  code *pcVar13;\n  \n  pcVar13 = (code *)(PTR_LAB_000471f4 + 0x309c);\n  pcVar12 = (code *)(PTR_LAB_000471f4 + 0xb4);\n  do {\n    iVar9 = top_org_node << 3;\n    iVar3 = top_clone_node;\n    while( true ) {\n      while ((&dfa->nodes->field_0x4)[iVar9] == '\x04') {\n        iVar4 = dfa->nexts[top_org_node];\n        dfa->edests[iVar3].nelem = 0;\n        iVar11 = (*pcVar13)(dfa,iVar4,init_constraint);\n        if (iVar11 == -1) {\n          return _REG_ESPACE;\n        }\n        dfa->nexts[iVar3] = dfa->nexts[top_org_node];\n        iVar1 = (*pcVar12)(dfa->edests + iVar3,iVar11);\n        iVar9 = iVar4 << 3;\n        top_org_node = iVar4;\n        iVar3 = iVar11;\n        if (iVar1 == 0) {\n          return _REG_ESPACE;\n        }\n      }\n      prVar7 = dfa->edests;\n      if (prVar7[top_org_node].nelem == 0) {\n        dfa->nexts[iVar3] = dfa->nexts[top_org_node];\n        return _REG_NOERROR;\n      }\n      if (prVar7[top_org_node].nelem != 1) break;\n      iVar11 = *prVar7[top_org_node].elems;\n      prVar7[iVar3].nelem = 0;\n      if ((top_org_node == root_node) && (top_org_node != iVar3)) {\n        _Var6 = re_node_set_insert(dfa->edests + iVar3,iVar11);\n        if (CONCAT31(extraout_var,_Var6) == 0) {\n          return _REG_ESPACE;\n        }\n        return _REG_NOERROR;\n      }\n      init_constraint =\n           init_constraint | (uint)(*(int *)(&dfa->nodes->field_0x4 + iVar9) << 8) >> 0x16;\n      iVar4 = (*pcVar13)(dfa,iVar11,init_constraint);\n      if (iVar4 == -1) {\n        return _REG_ESPACE;\n      }\n      iVar3 = (*pcVar12)(dfa->edests + iVar3,iVar4);\n      if (iVar3 == 0) {\n        return _REG_ESPACE;\n      }\n      iVar9 = iVar11 << 3;\n      top_org_node = iVar11;\n      iVar3 = iVar4;\n    }\n    iVar11 = *prVar7[top_org_node].elems;\n    prVar7[iVar3].nelem = 0;\n    sVar10 = dfa->nodes_len;\n    iVar9 = sVar10 - 1;\n    prVar2 = dfa->nodes + iVar9;\n    if (((*(uint *)&prVar2->field_0x4 & 0x2000) != 0) && (0 < iVar9)) {\n      pIVar8 = dfa->org_indices + sVar10;\n      iVar4 = sVar10 * 8 - (int)prVar2;\n      while ((iVar11 != pIVar8[-1] ||\n             (init_constraint != (uint)(*(int *)&prVar2->field_0x4 << 8) >> 0x16))) {\n        prVar2 = (re_token_t *)((int)prVar2 + (int)dfa->nodes + iVar4 + -0x10);\n        iVar9 = iVar9 + -1;\n        if (((*(uint *)&prVar2->field_0x4 & 0x2000) == 0) || (pIVar8 = pIVar8 + -1, iVar9 == 0))\n        goto LAB_000234d0;\n      }\n      if (iVar9 != -1) {\n        iVar9 = (*pcVar12)(dfa->edests + iVar3);\n        if (iVar9 == 0) {\n          return _REG_ESPACE;\n        }\n        goto LAB_000233d0;\n      }\n    }\nLAB_000234d0:\n    iVar9 = (*pcVar13)(dfa,iVar11,init_constraint);\n    if (iVar9 == -1) {\n      return _REG_ESPACE;\n    }\n    iVar4 = (*pcVar12)(dfa->edests + iVar3,iVar9);\n    if (iVar4 == 0) {\n      return _REG_ESPACE;\n    }\n    rVar5 = duplicate_node_closure(dfa,iVar11,iVar9,root_node,init_constraint);\n    if (rVar5 != _REG_NOERROR) {\n      return rVar5;\n    }\nLAB_000233d0:\n    top_org_node = dfa->edests[top_org_node].elems[1];\n    top_clone_node = (*pcVar13)(dfa,top_org_node,init_constraint);\n    if (top_clone_node == -1) {\n      return _REG_ESPACE;\n    }\n    iVar3 = (*pcVar12)(dfa->edests + iVar3,top_clone_node);\n    if (iVar3 == 0) {\n      return _REG_ESPACE;\n    }\n  } while( true );\n}" type_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  undefined3 extraout_var;\n  int iVar1;\n  _Bool _Var6;\n  re_token_t *prVar2;\n  int iVar3;\n  int iVar4;\n  reg_errcode_t rVar5;\n  re_node_set *prVar7;\n  Idx *pIVar8;\n  int iVar9;\n  size_t sVar10;\n  int iVar11;\n  code *pcVar12;\n  code *pcVar13;\n  \n  pcVar13 = (code *)(PTR_LAB_000471f4 + 0x309c);\n  pcVar12 = (code *)(PTR_LAB_000471f4 + 0xb4);\n  do {\n    iVar9 = top_org_node << 3;\n    iVar3 = top_clone_node;\n    while( true ) {\n      while ((&dfa->nodes->field_0x4)[iVar9] == '\x04') {\n        iVar4 = dfa->nexts[top_org_node];\n        dfa->edests[iVar3].nelem = 0;\n        iVar11 = (*pcVar13)(dfa,iVar4,init_constraint);\n        if (iVar11 == -1) {\n          return _REG_ESPACE;\n        }\n        dfa->nexts[iVar3] = dfa->nexts[top_org_node];\n        iVar1 = (*pcVar12)(dfa->edests + iVar3,iVar11);\n        iVar9 = iVar4 << 3;\n        top_org_node = iVar4;\n        iVar3 = iVar11;\n        if (iVar1 == 0) {\n          return _REG_ESPACE;\n        }\n      }\n      prVar7 = dfa->edests;\n      if (prVar7[top_org_node].nelem == 0) {\n        dfa->nexts[iVar3] = dfa->nexts[top_org_node];\n        return _REG_NOERROR;\n      }\n      if (prVar7[top_org_node].nelem != 1) break;\n      iVar11 = *prVar7[top_org_node].elems;\n      prVar7[iVar3].nelem = 0;\n      if ((top_org_node == root_node) && (top_org_node != iVar3)) {\n        _Var6 = re_node_set_insert(dfa->edests + iVar3,iVar11);\n        if (CONCAT31(extraout_var,_Var6) == 0) {\n          return _REG_ESPACE;\n        }\n        return _REG_NOERROR;\n      }\n      init_constraint =\n           init_constraint | (uint)(*(int *)(&dfa->nodes->field_0x4 + iVar9) << 8) >> 0x16;\n      iVar4 = (*pcVar13)(dfa,iVar11,init_constraint);\n      if (iVar4 == -1) {\n        return _REG_ESPACE;\n      }\n      iVar3 = (*pcVar12)(dfa->edests + iVar3,iVar4);\n      if (iVar3 == 0) {\n        return _REG_ESPACE;\n      }\n      iVar9 = iVar11 << 3;\n      top_org_node = iVar11;\n      iVar3 = iVar4;\n    }\n    iVar11 = *prVar7[top_org_node].elems;\n    prVar7[iVar3].nelem = 0;\n    sVar10 = dfa->nodes_len;\n    iVar9 = sVar10 - 1;\n    prVar2 = dfa->nodes + iVar9;\n    if (((*(uint *)&prVar2->field_0x4 & 0x2000) != 0) && (0 < iVar9)) {\n      pIVar8 = dfa->org_indices + sVar10;\n      iVar4 = sVar10 * 8 - (int)prVar2;\n      while ((iVar11 != pIVar8[-1] ||\n             (init_constraint != (uint)(*(int *)&prVar2->field_0x4 << 8) >> 0x16))) {\n        prVar2 = (re_token_t *)((int)prVar2 + (int)dfa->nodes + iVar4 + -0x10);\n        iVar9 = iVar9 + -1;\n        if (((*(uint *)&prVar2->field_0x4 & 0x2000) == 0) || (pIVar8 = pIVar8 + -1, iVar9 == 0))\n        goto LAB_000234d0;\n      }\n      if (iVar9 != -1) {\n        iVar9 = (*pcVar12)(dfa->edests + iVar3);\n        if (iVar9 == 0) {\n          return _REG_ESPACE;\n        }\n        goto LAB_000233d0;\n      }\n    }\nLAB_000234d0:\n    iVar9 = (*pcVar13)(dfa,iVar11,init_constraint);\n    if (iVar9 == -1) {\n      return _REG_ESPACE;\n    }\n    iVar4 = (*pcVar12)(dfa->edests + iVar3,iVar9);\n    if (iVar4 == 0) {\n      return _REG_ESPACE;\n    }\n    rVar5 = duplicate_node_closure(dfa,iVar11,iVar9,root_node,init_constraint);\n    if (rVar5 != _REG_NOERROR) {\n      return rVar5;\n    }\nLAB_000233d0:\n    top_org_node = dfa->edests[top_org_node].elems[1];\n    top_clone_node = (*pcVar13)(dfa,top_org_node,init_constraint);\n    if (top_clone_node == -1) {\n      return _REG_ESPACE;\n    }\n    iVar3 = (*pcVar12)(dfa->edests + iVar3,top_clone_node);\n    if (iVar3 == 0) {\n      return _REG_ESPACE;\n    }\n  } while( true );\n}" { (declaration "undefined3 extraout_var;" type_identifier identifier ;) (declaration "int iVar1;" primitive_type identifier ;) (declaration "_Bool _Var6;" type_identifier identifier ;) (declaration "re_token_t *prVar2;" type_identifier (pointer_declarator "*prVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "reg_errcode_t rVar5;" type_identifier identifier ;) (declaration "re_node_set *prVar7;" type_identifier (pointer_declarator "*prVar7" * identifier) ;) (declaration "Idx *pIVar8;" type_identifier (pointer_declarator "*pIVar8" * identifier) ;) (declaration "int iVar9;" primitive_type identifier ;) (declaration "size_t sVar10;" primitive_type identifier ;) (declaration "int iVar11;" primitive_type identifier ;) (declaration "code *pcVar12;" type_identifier (pointer_declarator "*pcVar12" * identifier) ;) (declaration "code *pcVar13;" type_identifier (pointer_declarator "*pcVar13" * identifier) ;) (expression_statement "pcVar13 = (code *)(PTR_LAB_000471f4 + 0x309c);" (assignment_expression "pcVar13 = (code *)(PTR_LAB_000471f4 + 0x309c)" identifier = (cast_expression "(code *)(PTR_LAB_000471f4 + 0x309c)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000471f4 + 0x309c)" ( (binary_expression "PTR_LAB_000471f4 + 0x309c" identifier + number_literal) )))) ;) (expression_statement "pcVar12 = (code *)(PTR_LAB_000471f4 + 0xb4);" (assignment_expression "pcVar12 = (code *)(PTR_LAB_000471f4 + 0xb4)" identifier = (cast_expression "(code *)(PTR_LAB_000471f4 + 0xb4)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000471f4 + 0xb4)" ( (binary_expression "PTR_LAB_000471f4 + 0xb4" identifier + number_literal) )))) ;) (do_statement "do {\n    iVar9 = top_org_node << 3;\n    iVar3 = top_clone_node;\n    while( true ) {\n      while ((&dfa->nodes->field_0x4)[iVar9] == '\x04') {\n        iVar4 = dfa->nexts[top_org_node];\n        dfa->edests[iVar3].nelem = 0;\n        iVar11 = (*pcVar13)(dfa,iVar4,init_constraint);\n        if (iVar11 == -1) {\n          return _REG_ESPACE;\n        }\n        dfa->nexts[iVar3] = dfa->nexts[top_org_node];\n        iVar1 = (*pcVar12)(dfa->edests + iVar3,iVar11);\n        iVar9 = iVar4 << 3;\n        top_org_node = iVar4;\n        iVar3 = iVar11;\n        if (iVar1 == 0) {\n          return _REG_ESPACE;\n        }\n      }\n      prVar7 = dfa->edests;\n      if (prVar7[top_org_node].nelem == 0) {\n        dfa->nexts[iVar3] = dfa->nexts[top_org_node];\n        return _REG_NOERROR;\n      }\n      if (prVar7[top_org_node].nelem != 1) break;\n      iVar11 = *prVar7[top_org_node].elems;\n      prVar7[iVar3].nelem = 0;\n      if ((top_org_node == root_node) && (top_org_node != iVar3)) {\n        _Var6 = re_node_set_insert(dfa->edests + iVar3,iVar11);\n        if (CONCAT31(extraout_var,_Var6) == 0) {\n          return _REG_ESPACE;\n        }\n        return _REG_NOERROR;\n      }\n      init_constraint =\n           init_constraint | (uint)(*(int *)(&dfa->nodes->field_0x4 + iVar9) << 8) >> 0x16;\n      iVar4 = (*pcVar13)(dfa,iVar11,init_constraint);\n      if (iVar4 == -1) {\n        return _REG_ESPACE;\n      }\n      iVar3 = (*pcVar12)(dfa->edests + iVar3,iVar4);\n      if (iVar3 == 0) {\n        return _REG_ESPACE;\n      }\n      iVar9 = iVar11 << 3;\n      top_org_node = iVar11;\n      iVar3 = iVar4;\n    }\n    iVar11 = *prVar7[top_org_node].elems;\n    prVar7[iVar3].nelem = 0;\n    sVar10 = dfa->nodes_len;\n    iVar9 = sVar10 - 1;\n    prVar2 = dfa->nodes + iVar9;\n    if (((*(uint *)&prVar2->field_0x4 & 0x2000) != 0) && (0 < iVar9)) {\n      pIVar8 = dfa->org_indices + sVar10;\n      iVar4 = sVar10 * 8 - (int)prVar2;\n      while ((iVar11 != pIVar8[-1] ||\n             (init_constraint != (uint)(*(int *)&prVar2->field_0x4 << 8) >> 0x16))) {\n        prVar2 = (re_token_t *)((int)prVar2 + (int)dfa->nodes + iVar4 + -0x10);\n        iVar9 = iVar9 + -1;\n        if (((*(uint *)&prVar2->field_0x4 & 0x2000) == 0) || (pIVar8 = pIVar8 + -1, iVar9 == 0))\n        goto LAB_000234d0;\n      }\n      if (iVar9 != -1) {\n        iVar9 = (*pcVar12)(dfa->edests + iVar3);\n        if (iVar9 == 0) {\n          return _REG_ESPACE;\n        }\n        goto LAB_000233d0;\n      }\n    }\nLAB_000234d0:\n    iVar9 = (*pcVar13)(dfa,iVar11,init_constraint);\n    if (iVar9 == -1) {\n      return _REG_ESPACE;\n    }\n    iVar4 = (*pcVar12)(dfa->edests + iVar3,iVar9);\n    if (iVar4 == 0) {\n      return _REG_ESPACE;\n    }\n    rVar5 = duplicate_node_closure(dfa,iVar11,iVar9,root_node,init_constraint);\n    if (rVar5 != _REG_NOERROR) {\n      return rVar5;\n    }\nLAB_000233d0:\n    top_org_node = dfa->edests[top_org_node].elems[1];\n    top_clone_node = (*pcVar13)(dfa,top_org_node,init_constraint);\n    if (top_clone_node == -1) {\n      return _REG_ESPACE;\n    }\n    iVar3 = (*pcVar12)(dfa->edests + iVar3,top_clone_node);\n    if (iVar3 == 0) {\n      return _REG_ESPACE;\n    }\n  } while( true );" do (compound_statement "{\n    iVar9 = top_org_node << 3;\n    iVar3 = top_clone_node;\n    while( true ) {\n      while ((&dfa->nodes->field_0x4)[iVar9] == '\x04') {\n        iVar4 = dfa->nexts[top_org_node];\n        dfa->edests[iVar3].nelem = 0;\n        iVar11 = (*pcVar13)(dfa,iVar4,init_constraint);\n        if (iVar11 == -1) {\n          return _REG_ESPACE;\n        }\n        dfa->nexts[iVar3] = dfa->nexts[top_org_node];\n        iVar1 = (*pcVar12)(dfa->edests + iVar3,iVar11);\n        iVar9 = iVar4 << 3;\n        top_org_node = iVar4;\n        iVar3 = iVar11;\n        if (iVar1 == 0) {\n          return _REG_ESPACE;\n        }\n      }\n      prVar7 = dfa->edests;\n      if (prVar7[top_org_node].nelem == 0) {\n        dfa->nexts[iVar3] = dfa->nexts[top_org_node];\n        return _REG_NOERROR;\n      }\n      if (prVar7[top_org_node].nelem != 1) break;\n      iVar11 = *prVar7[top_org_node].elems;\n      prVar7[iVar3].nelem = 0;\n      if ((top_org_node == root_node) && (top_org_node != iVar3)) {\n        _Var6 = re_node_set_insert(dfa->edests + iVar3,iVar11);\n        if (CONCAT31(extraout_var,_Var6) == 0) {\n          return _REG_ESPACE;\n        }\n        return _REG_NOERROR;\n      }\n      init_constraint =\n           init_constraint | (uint)(*(int *)(&dfa->nodes->field_0x4 + iVar9) << 8) >> 0x16;\n      iVar4 = (*pcVar13)(dfa,iVar11,init_constraint);\n      if (iVar4 == -1) {\n        return _REG_ESPACE;\n      }\n      iVar3 = (*pcVar12)(dfa->edests + iVar3,iVar4);\n      if (iVar3 == 0) {\n        return _REG_ESPACE;\n      }\n      iVar9 = iVar11 << 3;\n      top_org_node = iVar11;\n      iVar3 = iVar4;\n    }\n    iVar11 = *prVar7[top_org_node].elems;\n    prVar7[iVar3].nelem = 0;\n    sVar10 = dfa->nodes_len;\n    iVar9 = sVar10 - 1;\n    prVar2 = dfa->nodes + iVar9;\n    if (((*(uint *)&prVar2->field_0x4 & 0x2000) != 0) && (0 < iVar9)) {\n      pIVar8 = dfa->org_indices + sVar10;\n      iVar4 = sVar10 * 8 - (int)prVar2;\n      while ((iVar11 != pIVar8[-1] ||\n             (init_constraint != (uint)(*(int *)&prVar2->field_0x4 << 8) >> 0x16))) {\n        prVar2 = (re_token_t *)((int)prVar2 + (int)dfa->nodes + iVar4 + -0x10);\n        iVar9 = iVar9 + -1;\n        if (((*(uint *)&prVar2->field_0x4 & 0x2000) == 0) || (pIVar8 = pIVar8 + -1, iVar9 == 0))\n        goto LAB_000234d0;\n      }\n      if (iVar9 != -1) {\n        iVar9 = (*pcVar12)(dfa->edests + iVar3);\n        if (iVar9 == 0) {\n          return _REG_ESPACE;\n        }\n        goto LAB_000233d0;\n      }\n    }\nLAB_000234d0:\n    iVar9 = (*pcVar13)(dfa,iVar11,init_constraint);\n    if (iVar9 == -1) {\n      return _REG_ESPACE;\n    }\n    iVar4 = (*pcVar12)(dfa->edests + iVar3,iVar9);\n    if (iVar4 == 0) {\n      return _REG_ESPACE;\n    }\n    rVar5 = duplicate_node_closure(dfa,iVar11,iVar9,root_node,init_constraint);\n    if (rVar5 != _REG_NOERROR) {\n      return rVar5;\n    }\nLAB_000233d0:\n    top_org_node = dfa->edests[top_org_node].elems[1];\n    top_clone_node = (*pcVar13)(dfa,top_org_node,init_constraint);\n    if (top_clone_node == -1) {\n      return _REG_ESPACE;\n    }\n    iVar3 = (*pcVar12)(dfa->edests + iVar3,top_clone_node);\n    if (iVar3 == 0) {\n      return _REG_ESPACE;\n    }\n  }" { (expression_statement "iVar9 = top_org_node << 3;" (assignment_expression "iVar9 = top_org_node << 3" identifier = (binary_expression "top_org_node << 3" identifier << number_literal)) ;) (expression_statement "iVar3 = top_clone_node;" (assignment_expression "iVar3 = top_clone_node" identifier = identifier) ;) (while_statement "while( true ) {\n      while ((&dfa->nodes->field_0x4)[iVar9] == '\x04') {\n        iVar4 = dfa->nexts[top_org_node];\n        dfa->edests[iVar3].nelem = 0;\n        iVar11 = (*pcVar13)(dfa,iVar4,init_constraint);\n        if (iVar11 == -1) {\n          return _REG_ESPACE;\n        }\n        dfa->nexts[iVar3] = dfa->nexts[top_org_node];\n        iVar1 = (*pcVar12)(dfa->edests + iVar3,iVar11);\n        iVar9 = iVar4 << 3;\n        top_org_node = iVar4;\n        iVar3 = iVar11;\n        if (iVar1 == 0) {\n          return _REG_ESPACE;\n        }\n      }\n      prVar7 = dfa->edests;\n      if (prVar7[top_org_node].nelem == 0) {\n        dfa->nexts[iVar3] = dfa->nexts[top_org_node];\n        return _REG_NOERROR;\n      }\n      if (prVar7[top_org_node].nelem != 1) break;\n      iVar11 = *prVar7[top_org_node].elems;\n      prVar7[iVar3].nelem = 0;\n      if ((top_org_node == root_node) && (top_org_node != iVar3)) {\n        _Var6 = re_node_set_insert(dfa->edests + iVar3,iVar11);\n        if (CONCAT31(extraout_var,_Var6) == 0) {\n          return _REG_ESPACE;\n        }\n        return _REG_NOERROR;\n      }\n      init_constraint =\n           init_constraint | (uint)(*(int *)(&dfa->nodes->field_0x4 + iVar9) << 8) >> 0x16;\n      iVar4 = (*pcVar13)(dfa,iVar11,init_constraint);\n      if (iVar4 == -1) {\n        return _REG_ESPACE;\n      }\n      iVar3 = (*pcVar12)(dfa->edests + iVar3,iVar4);\n      if (iVar3 == 0) {\n        return _REG_ESPACE;\n      }\n      iVar9 = iVar11 << 3;\n      top_org_node = iVar11;\n      iVar3 = iVar4;\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      while ((&dfa->nodes->field_0x4)[iVar9] == '\x04') {\n        iVar4 = dfa->nexts[top_org_node];\n        dfa->edests[iVar3].nelem = 0;\n        iVar11 = (*pcVar13)(dfa,iVar4,init_constraint);\n        if (iVar11 == -1) {\n          return _REG_ESPACE;\n        }\n        dfa->nexts[iVar3] = dfa->nexts[top_org_node];\n        iVar1 = (*pcVar12)(dfa->edests + iVar3,iVar11);\n        iVar9 = iVar4 << 3;\n        top_org_node = iVar4;\n        iVar3 = iVar11;\n        if (iVar1 == 0) {\n          return _REG_ESPACE;\n        }\n      }\n      prVar7 = dfa->edests;\n      if (prVar7[top_org_node].nelem == 0) {\n        dfa->nexts[iVar3] = dfa->nexts[top_org_node];\n        return _REG_NOERROR;\n      }\n      if (prVar7[top_org_node].nelem != 1) break;\n      iVar11 = *prVar7[top_org_node].elems;\n      prVar7[iVar3].nelem = 0;\n      if ((top_org_node == root_node) && (top_org_node != iVar3)) {\n        _Var6 = re_node_set_insert(dfa->edests + iVar3,iVar11);\n        if (CONCAT31(extraout_var,_Var6) == 0) {\n          return _REG_ESPACE;\n        }\n        return _REG_NOERROR;\n      }\n      init_constraint =\n           init_constraint | (uint)(*(int *)(&dfa->nodes->field_0x4 + iVar9) << 8) >> 0x16;\n      iVar4 = (*pcVar13)(dfa,iVar11,init_constraint);\n      if (iVar4 == -1) {\n        return _REG_ESPACE;\n      }\n      iVar3 = (*pcVar12)(dfa->edests + iVar3,iVar4);\n      if (iVar3 == 0) {\n        return _REG_ESPACE;\n      }\n      iVar9 = iVar11 << 3;\n      top_org_node = iVar11;\n      iVar3 = iVar4;\n    }" { (while_statement "while ((&dfa->nodes->field_0x4)[iVar9] == '\x04') {\n        iVar4 = dfa->nexts[top_org_node];\n        dfa->edests[iVar3].nelem = 0;\n        iVar11 = (*pcVar13)(dfa,iVar4,init_constraint);\n        if (iVar11 == -1) {\n          return _REG_ESPACE;\n        }\n        dfa->nexts[iVar3] = dfa->nexts[top_org_node];\n        iVar1 = (*pcVar12)(dfa->edests + iVar3,iVar11);\n        iVar9 = iVar4 << 3;\n        top_org_node = iVar4;\n        iVar3 = iVar11;\n        if (iVar1 == 0) {\n          return _REG_ESPACE;\n        }\n      }" while (parenthesized_expression "((&dfa->nodes->field_0x4)[iVar9] == '\x04')" ( (binary_expression "(&dfa->nodes->field_0x4)[iVar9] == '\x04'" (subscript_expression "(&dfa->nodes->field_0x4)[iVar9]" (parenthesized_expression "(&dfa->nodes->field_0x4)" ( (pointer_expression "&dfa->nodes->field_0x4" & (field_expression "dfa->nodes->field_0x4" (field_expression "dfa->nodes" identifier -> field_identifier) -> field_identifier)) )) [ identifier ]) == (char_literal "'\x04'" ' escape_sequence ')) )) (compound_statement "{\n        iVar4 = dfa->nexts[top_org_node];\n        dfa->edests[iVar3].nelem = 0;\n        iVar11 = (*pcVar13)(dfa,iVar4,init_constraint);\n        if (iVar11 == -1) {\n          return _REG_ESPACE;\n        }\n        dfa->nexts[iVar3] = dfa->nexts[top_org_node];\n        iVar1 = (*pcVar12)(dfa->edests + iVar3,iVar11);\n        iVar9 = iVar4 << 3;\n        top_org_node = iVar4;\n        iVar3 = iVar11;\n        if (iVar1 == 0) {\n          return _REG_ESPACE;\n        }\n      }" { (expression_statement "iVar4 = dfa->nexts[top_org_node];" (assignment_expression "iVar4 = dfa->nexts[top_org_node]" identifier = (subscript_expression "dfa->nexts[top_org_node]" (field_expression "dfa->nexts" identifier -> field_identifier) [ identifier ])) ;) (expression_statement "dfa->edests[iVar3].nelem = 0;" (assignment_expression "dfa->edests[iVar3].nelem = 0" (field_expression "dfa->edests[iVar3].nelem" (subscript_expression "dfa->edests[iVar3]" (field_expression "dfa->edests" identifier -> field_identifier) [ identifier ]) . field_identifier) = number_literal) ;) (expression_statement "iVar11 = (*pcVar13)(dfa,iVar4,init_constraint);" (assignment_expression "iVar11 = (*pcVar13)(dfa,iVar4,init_constraint)" identifier = (call_expression "(*pcVar13)(dfa,iVar4,init_constraint)" (parenthesized_expression "(*pcVar13)" ( (pointer_expression "*pcVar13" * identifier) )) (argument_list "(dfa,iVar4,init_constraint)" ( identifier , identifier , identifier )))) ;) (if_statement "if (iVar11 == -1) {\n          return _REG_ESPACE;\n        }" if (parenthesized_expression "(iVar11 == -1)" ( (binary_expression "iVar11 == -1" identifier == number_literal) )) (compound_statement "{\n          return _REG_ESPACE;\n        }" { (return_statement "return _REG_ESPACE;" return identifier ;) })) (expression_statement "dfa->nexts[iVar3] = dfa->nexts[top_org_node];" (assignment_expression "dfa->nexts[iVar3] = dfa->nexts[top_org_node]" (subscript_expression "dfa->nexts[iVar3]" (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 "iVar1 = (*pcVar12)(dfa->edests + iVar3,iVar11);" (assignment_expression "iVar1 = (*pcVar12)(dfa->edests + iVar3,iVar11)" identifier = (call_expression "(*pcVar12)(dfa->edests + iVar3,iVar11)" (parenthesized_expression "(*pcVar12)" ( (pointer_expression "*pcVar12" * identifier) )) (argument_list "(dfa->edests + iVar3,iVar11)" ( (binary_expression "dfa->edests + iVar3" (field_expression "dfa->edests" identifier -> field_identifier) + identifier) , identifier )))) ;) (expression_statement "iVar9 = iVar4 << 3;" (assignment_expression "iVar9 = iVar4 << 3" identifier = (binary_expression "iVar4 << 3" identifier << number_literal)) ;) (expression_statement "top_org_node = iVar4;" (assignment_expression "top_org_node = iVar4" identifier = identifier) ;) (expression_statement "iVar3 = iVar11;" (assignment_expression "iVar3 = iVar11" identifier = identifier) ;) (if_statement "if (iVar1 == 0) {\n          return _REG_ESPACE;\n        }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n          return _REG_ESPACE;\n        }" { (return_statement "return _REG_ESPACE;" return identifier ;) })) })) (expression_statement "prVar7 = dfa->edests;" (assignment_expression "prVar7 = dfa->edests" identifier = (field_expression "dfa->edests" identifier -> field_identifier)) ;) (if_statement "if (prVar7[top_org_node].nelem == 0) {\n        dfa->nexts[iVar3] = dfa->nexts[top_org_node];\n        return _REG_NOERROR;\n      }" if (parenthesized_expression "(prVar7[top_org_node].nelem == 0)" ( (binary_expression "prVar7[top_org_node].nelem == 0" (field_expression "prVar7[top_org_node].nelem" (subscript_expression "prVar7[top_org_node]" identifier [ identifier ]) . field_identifier) == number_literal) )) (compound_statement "{\n        dfa->nexts[iVar3] = dfa->nexts[top_org_node];\n        return _REG_NOERROR;\n      }" { (expression_statement "dfa->nexts[iVar3] = dfa->nexts[top_org_node];" (assignment_expression "dfa->nexts[iVar3] = dfa->nexts[top_org_node]" (subscript_expression "dfa->nexts[iVar3]" (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 ;) })) (if_statement "if (prVar7[top_org_node].nelem != 1) break;" if (parenthesized_expression "(prVar7[top_org_node].nelem != 1)" ( (binary_expression "prVar7[top_org_node].nelem != 1" (field_expression "prVar7[top_org_node].nelem" (subscript_expression "prVar7[top_org_node]" identifier [ identifier ]) . field_identifier) != number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar11 = *prVar7[top_org_node].elems;" (assignment_expression "iVar11 = *prVar7[top_org_node].elems" identifier = (pointer_expression "*prVar7[top_org_node].elems" * (field_expression "prVar7[top_org_node].elems" (subscript_expression "prVar7[top_org_node]" identifier [ identifier ]) . field_identifier))) ;) (expression_statement "prVar7[iVar3].nelem = 0;" (assignment_expression "prVar7[iVar3].nelem = 0" (field_expression "prVar7[iVar3].nelem" (subscript_expression "prVar7[iVar3]" identifier [ identifier ]) . field_identifier) = number_literal) ;) (if_statement "if ((top_org_node == root_node) && (top_org_node != iVar3)) {\n        _Var6 = re_node_set_insert(dfa->edests + iVar3,iVar11);\n        if (CONCAT31(extraout_var,_Var6) == 0) {\n          return _REG_ESPACE;\n        }\n        return _REG_NOERROR;\n      }" if (parenthesized_expression "((top_org_node == root_node) && (top_org_node != iVar3))" ( (binary_expression "(top_org_node == root_node) && (top_org_node != iVar3)" (parenthesized_expression "(top_org_node == root_node)" ( (binary_expression "top_org_node == root_node" identifier == identifier) )) && (parenthesized_expression "(top_org_node != iVar3)" ( (binary_expression "top_org_node != iVar3" identifier != identifier) ))) )) (compound_statement "{\n        _Var6 = re_node_set_insert(dfa->edests + iVar3,iVar11);\n        if (CONCAT31(extraout_var,_Var6) == 0) {\n          return _REG_ESPACE;\n        }\n        return _REG_NOERROR;\n      }" { (expression_statement "_Var6 = re_node_set_insert(dfa->edests + iVar3,iVar11);" (assignment_expression "_Var6 = re_node_set_insert(dfa->edests + iVar3,iVar11)" identifier = (call_expression "re_node_set_insert(dfa->edests + iVar3,iVar11)" identifier (argument_list "(dfa->edests + iVar3,iVar11)" ( (binary_expression "dfa->edests + iVar3" (field_expression "dfa->edests" identifier -> field_identifier) + identifier) , identifier )))) ;) (if_statement "if (CONCAT31(extraout_var,_Var6) == 0) {\n          return _REG_ESPACE;\n        }" if (parenthesized_expression "(CONCAT31(extraout_var,_Var6) == 0)" ( (binary_expression "CONCAT31(extraout_var,_Var6) == 0" (call_expression "CONCAT31(extraout_var,_Var6)" identifier (argument_list "(extraout_var,_Var6)" ( identifier , identifier ))) == number_literal) )) (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 =\n           init_constraint | (uint)(*(int *)(&dfa->nodes->field_0x4 + iVar9) << 8) >> 0x16;" (assignment_expression "init_constraint =\n           init_constraint | (uint)(*(int *)(&dfa->nodes->field_0x4 + iVar9) << 8) >> 0x16" identifier = (binary_expression "init_constraint | (uint)(*(int *)(&dfa->nodes->field_0x4 + iVar9) << 8) >> 0x16" identifier | (binary_expression "(uint)(*(int *)(&dfa->nodes->field_0x4 + iVar9) << 8) >> 0x16" (call_expression "(uint)(*(int *)(&dfa->nodes->field_0x4 + iVar9) << 8)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(int *)(&dfa->nodes->field_0x4 + iVar9) << 8)" ( (binary_expression "*(int *)(&dfa->nodes->field_0x4 + iVar9) << 8" (pointer_expression "*(int *)(&dfa->nodes->field_0x4 + iVar9)" * (cast_expression "(int *)(&dfa->nodes->field_0x4 + iVar9)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&dfa->nodes->field_0x4 + iVar9)" ( (binary_expression "&dfa->nodes->field_0x4 + iVar9" (pointer_expression "&dfa->nodes->field_0x4" & (field_expression "dfa->nodes->field_0x4" (field_expression "dfa->nodes" identifier -> field_identifier) -> field_identifier)) + identifier) )))) << number_literal) ))) >> number_literal))) ;) (expression_statement "iVar4 = (*pcVar13)(dfa,iVar11,init_constraint);" (assignment_expression "iVar4 = (*pcVar13)(dfa,iVar11,init_constraint)" identifier = (call_expression "(*pcVar13)(dfa,iVar11,init_constraint)" (parenthesized_expression "(*pcVar13)" ( (pointer_expression "*pcVar13" * identifier) )) (argument_list "(dfa,iVar11,init_constraint)" ( identifier , identifier , identifier )))) ;) (if_statement "if (iVar4 == -1) {\n        return _REG_ESPACE;\n      }" if (parenthesized_expression "(iVar4 == -1)" ( (binary_expression "iVar4 == -1" identifier == number_literal) )) (compound_statement "{\n        return _REG_ESPACE;\n      }" { (return_statement "return _REG_ESPACE;" return identifier ;) })) (expression_statement "iVar3 = (*pcVar12)(dfa->edests + iVar3,iVar4);" (assignment_expression "iVar3 = (*pcVar12)(dfa->edests + iVar3,iVar4)" identifier = (call_expression "(*pcVar12)(dfa->edests + iVar3,iVar4)" (parenthesized_expression "(*pcVar12)" ( (pointer_expression "*pcVar12" * identifier) )) (argument_list "(dfa->edests + iVar3,iVar4)" ( (binary_expression "dfa->edests + iVar3" (field_expression "dfa->edests" identifier -> field_identifier) + identifier) , identifier )))) ;) (if_statement "if (iVar3 == 0) {\n        return _REG_ESPACE;\n      }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n        return _REG_ESPACE;\n      }" { (return_statement "return _REG_ESPACE;" return identifier ;) })) (expression_statement "iVar9 = iVar11 << 3;" (assignment_expression "iVar9 = iVar11 << 3" identifier = (binary_expression "iVar11 << 3" identifier << number_literal)) ;) (expression_statement "top_org_node = iVar11;" (assignment_expression "top_org_node = iVar11" identifier = identifier) ;) (expression_statement "iVar3 = iVar4;" (assignment_expression "iVar3 = iVar4" identifier = identifier) ;) })) (expression_statement "iVar11 = *prVar7[top_org_node].elems;" (assignment_expression "iVar11 = *prVar7[top_org_node].elems" identifier = (pointer_expression "*prVar7[top_org_node].elems" * (field_expression "prVar7[top_org_node].elems" (subscript_expression "prVar7[top_org_node]" identifier [ identifier ]) . field_identifier))) ;) (expression_statement "prVar7[iVar3].nelem = 0;" (assignment_expression "prVar7[iVar3].nelem = 0" (field_expression "prVar7[iVar3].nelem" (subscript_expression "prVar7[iVar3]" identifier [ identifier ]) . field_identifier) = number_literal) ;) (expression_statement "sVar10 = dfa->nodes_len;" (assignment_expression "sVar10 = dfa->nodes_len" identifier = (field_expression "dfa->nodes_len" identifier -> field_identifier)) ;) (expression_statement "iVar9 = sVar10 - 1;" (assignment_expression "iVar9 = sVar10 - 1" identifier = (binary_expression "sVar10 - 1" identifier - number_literal)) ;) (expression_statement "prVar2 = dfa->nodes + iVar9;" (assignment_expression "prVar2 = dfa->nodes + iVar9" identifier = (binary_expression "dfa->nodes + iVar9" (field_expression "dfa->nodes" identifier -> field_identifier) + identifier)) ;) (if_statement "if (((*(uint *)&prVar2->field_0x4 & 0x2000) != 0) && (0 < iVar9)) {\n      pIVar8 = dfa->org_indices + sVar10;\n      iVar4 = sVar10 * 8 - (int)prVar2;\n      while ((iVar11 != pIVar8[-1] ||\n             (init_constraint != (uint)(*(int *)&prVar2->field_0x4 << 8) >> 0x16))) {\n        prVar2 = (re_token_t *)((int)prVar2 + (int)dfa->nodes + iVar4 + -0x10);\n        iVar9 = iVar9 + -1;\n        if (((*(uint *)&prVar2->field_0x4 & 0x2000) == 0) || (pIVar8 = pIVar8 + -1, iVar9 == 0))\n        goto LAB_000234d0;\n      }\n      if (iVar9 != -1) {\n        iVar9 = (*pcVar12)(dfa->edests + iVar3);\n        if (iVar9 == 0) {\n          return _REG_ESPACE;\n        }\n        goto LAB_000233d0;\n      }\n    }" if (parenthesized_expression "(((*(uint *)&prVar2->field_0x4 & 0x2000) != 0) && (0 < iVar9))" ( (binary_expression "((*(uint *)&prVar2->field_0x4 & 0x2000) != 0) && (0 < iVar9)" (parenthesized_expression "((*(uint *)&prVar2->field_0x4 & 0x2000) != 0)" ( (binary_expression "(*(uint *)&prVar2->field_0x4 & 0x2000) != 0" (parenthesized_expression "(*(uint *)&prVar2->field_0x4 & 0x2000)" ( (binary_expression "*(uint *)&prVar2->field_0x4 & 0x2000" (pointer_expression "*(uint *)&prVar2->field_0x4" * (cast_expression "(uint *)&prVar2->field_0x4" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&prVar2->field_0x4" & (field_expression "prVar2->field_0x4" identifier -> field_identifier)))) & number_literal) )) != number_literal) )) && (parenthesized_expression "(0 < iVar9)" ( (binary_expression "0 < iVar9" number_literal < identifier) ))) )) (compound_statement "{\n      pIVar8 = dfa->org_indices + sVar10;\n      iVar4 = sVar10 * 8 - (int)prVar2;\n      while ((iVar11 != pIVar8[-1] ||\n             (init_constraint != (uint)(*(int *)&prVar2->field_0x4 << 8) >> 0x16))) {\n        prVar2 = (re_token_t *)((int)prVar2 + (int)dfa->nodes + iVar4 + -0x10);\n        iVar9 = iVar9 + -1;\n        if (((*(uint *)&prVar2->field_0x4 & 0x2000) == 0) || (pIVar8 = pIVar8 + -1, iVar9 == 0))\n        goto LAB_000234d0;\n      }\n      if (iVar9 != -1) {\n        iVar9 = (*pcVar12)(dfa->edests + iVar3);\n        if (iVar9 == 0) {\n          return _REG_ESPACE;\n        }\n        goto LAB_000233d0;\n      }\n    }" { (expression_statement "pIVar8 = dfa->org_indices + sVar10;" (assignment_expression "pIVar8 = dfa->org_indices + sVar10" identifier = (binary_expression "dfa->org_indices + sVar10" (field_expression "dfa->org_indices" identifier -> field_identifier) + identifier)) ;) (expression_statement "iVar4 = sVar10 * 8 - (int)prVar2;" (assignment_expression "iVar4 = sVar10 * 8 - (int)prVar2" identifier = (binary_expression "sVar10 * 8 - (int)prVar2" (binary_expression "sVar10 * 8" identifier * number_literal) - (cast_expression "(int)prVar2" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (while_statement "while ((iVar11 != pIVar8[-1] ||\n             (init_constraint != (uint)(*(int *)&prVar2->field_0x4 << 8) >> 0x16))) {\n        prVar2 = (re_token_t *)((int)prVar2 + (int)dfa->nodes + iVar4 + -0x10);\n        iVar9 = iVar9 + -1;\n        if (((*(uint *)&prVar2->field_0x4 & 0x2000) == 0) || (pIVar8 = pIVar8 + -1, iVar9 == 0))\n        goto LAB_000234d0;\n      }" while (parenthesized_expression "((iVar11 != pIVar8[-1] ||\n             (init_constraint != (uint)(*(int *)&prVar2->field_0x4 << 8) >> 0x16)))" ( (parenthesized_expression "(iVar11 != pIVar8[-1] ||\n             (init_constraint != (uint)(*(int *)&prVar2->field_0x4 << 8) >> 0x16))" ( (binary_expression "iVar11 != pIVar8[-1] ||\n             (init_constraint != (uint)(*(int *)&prVar2->field_0x4 << 8) >> 0x16)" (binary_expression "iVar11 != pIVar8[-1]" identifier != (subscript_expression "pIVar8[-1]" identifier [ number_literal ])) || (parenthesized_expression "(init_constraint != (uint)(*(int *)&prVar2->field_0x4 << 8) >> 0x16)" ( (binary_expression "init_constraint != (uint)(*(int *)&prVar2->field_0x4 << 8) >> 0x16" identifier != (binary_expression "(uint)(*(int *)&prVar2->field_0x4 << 8) >> 0x16" (call_expression "(uint)(*(int *)&prVar2->field_0x4 << 8)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(int *)&prVar2->field_0x4 << 8)" ( (binary_expression "*(int *)&prVar2->field_0x4 << 8" (pointer_expression "*(int *)&prVar2->field_0x4" * (cast_expression "(int *)&prVar2->field_0x4" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&prVar2->field_0x4" & (field_expression "prVar2->field_0x4" identifier -> field_identifier)))) << number_literal) ))) >> number_literal)) ))) )) )) (compound_statement "{\n        prVar2 = (re_token_t *)((int)prVar2 + (int)dfa->nodes + iVar4 + -0x10);\n        iVar9 = iVar9 + -1;\n        if (((*(uint *)&prVar2->field_0x4 & 0x2000) == 0) || (pIVar8 = pIVar8 + -1, iVar9 == 0))\n        goto LAB_000234d0;\n      }" { (expression_statement "prVar2 = (re_token_t *)((int)prVar2 + (int)dfa->nodes + iVar4 + -0x10);" (assignment_expression "prVar2 = (re_token_t *)((int)prVar2 + (int)dfa->nodes + iVar4 + -0x10)" identifier = (cast_expression "(re_token_t *)((int)prVar2 + (int)dfa->nodes + iVar4 + -0x10)" ( (type_descriptor "re_token_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)prVar2 + (int)dfa->nodes + iVar4 + -0x10)" ( (binary_expression "(int)prVar2 + (int)dfa->nodes + iVar4 + -0x10" (binary_expression "(int)prVar2 + (int)dfa->nodes + iVar4" (binary_expression "(int)prVar2 + (int)dfa->nodes" (cast_expression "(int)prVar2" ( (type_descriptor "int" primitive_type) ) identifier) + (cast_expression "(int)dfa->nodes" ( (type_descriptor "int" primitive_type) ) (field_expression "dfa->nodes" identifier -> field_identifier))) + identifier) + number_literal) )))) ;) (expression_statement "iVar9 = iVar9 + -1;" (assignment_expression "iVar9 = iVar9 + -1" identifier = (binary_expression "iVar9 + -1" identifier + number_literal)) ;) (if_statement "if (((*(uint *)&prVar2->field_0x4 & 0x2000) == 0) || (pIVar8 = pIVar8 + -1, iVar9 == 0))\n        goto LAB_000234d0;" if (parenthesized_expression "(((*(uint *)&prVar2->field_0x4 & 0x2000) == 0) || (pIVar8 = pIVar8 + -1, iVar9 == 0))" ( (binary_expression "((*(uint *)&prVar2->field_0x4 & 0x2000) == 0) || (pIVar8 = pIVar8 + -1, iVar9 == 0)" (parenthesized_expression "((*(uint *)&prVar2->field_0x4 & 0x2000) == 0)" ( (binary_expression "(*(uint *)&prVar2->field_0x4 & 0x2000) == 0" (parenthesized_expression "(*(uint *)&prVar2->field_0x4 & 0x2000)" ( (binary_expression "*(uint *)&prVar2->field_0x4 & 0x2000" (pointer_expression "*(uint *)&prVar2->field_0x4" * (cast_expression "(uint *)&prVar2->field_0x4" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&prVar2->field_0x4" & (field_expression "prVar2->field_0x4" identifier -> field_identifier)))) & number_literal) )) == number_literal) )) || (parenthesized_expression "(pIVar8 = pIVar8 + -1, iVar9 == 0)" ( (comma_expression "pIVar8 = pIVar8 + -1, iVar9 == 0" (assignment_expression "pIVar8 = pIVar8 + -1" identifier = (binary_expression "pIVar8 + -1" identifier + number_literal)) , (binary_expression "iVar9 == 0" identifier == number_literal)) ))) )) (goto_statement "goto LAB_000234d0;" goto statement_identifier ;)) })) (if_statement "if (iVar9 != -1) {\n        iVar9 = (*pcVar12)(dfa->edests + iVar3);\n        if (iVar9 == 0) {\n          return _REG_ESPACE;\n        }\n        goto LAB_000233d0;\n      }" if (parenthesized_expression "(iVar9 != -1)" ( (binary_expression "iVar9 != -1" identifier != number_literal) )) (compound_statement "{\n        iVar9 = (*pcVar12)(dfa->edests + iVar3);\n        if (iVar9 == 0) {\n          return _REG_ESPACE;\n        }\n        goto LAB_000233d0;\n      }" { (expression_statement "iVar9 = (*pcVar12)(dfa->edests + iVar3);" (assignment_expression "iVar9 = (*pcVar12)(dfa->edests + iVar3)" identifier = (call_expression "(*pcVar12)(dfa->edests + iVar3)" (parenthesized_expression "(*pcVar12)" ( (pointer_expression "*pcVar12" * identifier) )) (argument_list "(dfa->edests + iVar3)" ( (binary_expression "dfa->edests + iVar3" (field_expression "dfa->edests" identifier -> field_identifier) + identifier) )))) ;) (if_statement "if (iVar9 == 0) {\n          return _REG_ESPACE;\n        }" if (parenthesized_expression "(iVar9 == 0)" ( (binary_expression "iVar9 == 0" identifier == number_literal) )) (compound_statement "{\n          return _REG_ESPACE;\n        }" { (return_statement "return _REG_ESPACE;" return identifier ;) })) (goto_statement "goto LAB_000233d0;" goto statement_identifier ;) })) })) (labeled_statement "LAB_000234d0:\n    iVar9 = (*pcVar13)(dfa,iVar11,init_constraint);" statement_identifier : (expression_statement "iVar9 = (*pcVar13)(dfa,iVar11,init_constraint);" (assignment_expression "iVar9 = (*pcVar13)(dfa,iVar11,init_constraint)" identifier = (call_expression "(*pcVar13)(dfa,iVar11,init_constraint)" (parenthesized_expression "(*pcVar13)" ( (pointer_expression "*pcVar13" * identifier) )) (argument_list "(dfa,iVar11,init_constraint)" ( identifier , identifier , identifier )))) ;)) (if_statement "if (iVar9 == -1) {\n      return _REG_ESPACE;\n    }" if (parenthesized_expression "(iVar9 == -1)" ( (binary_expression "iVar9 == -1" identifier == number_literal) )) (compound_statement "{\n      return _REG_ESPACE;\n    }" { (return_statement "return _REG_ESPACE;" return identifier ;) })) (expression_statement "iVar4 = (*pcVar12)(dfa->edests + iVar3,iVar9);" (assignment_expression "iVar4 = (*pcVar12)(dfa->edests + iVar3,iVar9)" identifier = (call_expression "(*pcVar12)(dfa->edests + iVar3,iVar9)" (parenthesized_expression "(*pcVar12)" ( (pointer_expression "*pcVar12" * identifier) )) (argument_list "(dfa->edests + iVar3,iVar9)" ( (binary_expression "dfa->edests + iVar3" (field_expression "dfa->edests" identifier -> field_identifier) + identifier) , identifier )))) ;) (if_statement "if (iVar4 == 0) {\n      return _REG_ESPACE;\n    }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n      return _REG_ESPACE;\n    }" { (return_statement "return _REG_ESPACE;" return identifier ;) })) (expression_statement "rVar5 = duplicate_node_closure(dfa,iVar11,iVar9,root_node,init_constraint);" (assignment_expression "rVar5 = duplicate_node_closure(dfa,iVar11,iVar9,root_node,init_constraint)" identifier = (call_expression "duplicate_node_closure(dfa,iVar11,iVar9,root_node,init_constraint)" identifier (argument_list "(dfa,iVar11,iVar9,root_node,init_constraint)" ( identifier , identifier , identifier , identifier , identifier )))) ;) (if_statement "if (rVar5 != _REG_NOERROR) {\n      return rVar5;\n    }" if (parenthesized_expression "(rVar5 != _REG_NOERROR)" ( (binary_expression "rVar5 != _REG_NOERROR" identifier != identifier) )) (compound_statement "{\n      return rVar5;\n    }" { (return_statement "return rVar5;" return identifier ;) })) (labeled_statement "LAB_000233d0:\n    top_org_node = dfa->edests[top_org_node].elems[1];" statement_identifier : (expression_statement "top_org_node = dfa->edests[top_org_node].elems[1];" (assignment_expression "top_org_node = 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 "top_clone_node = (*pcVar13)(dfa,top_org_node,init_constraint);" (assignment_expression "top_clone_node = (*pcVar13)(dfa,top_org_node,init_constraint)" identifier = (call_expression "(*pcVar13)(dfa,top_org_node,init_constraint)" (parenthesized_expression "(*pcVar13)" ( (pointer_expression "*pcVar13" * identifier) )) (argument_list "(dfa,top_org_node,init_constraint)" ( identifier , identifier , identifier )))) ;) (if_statement "if (top_clone_node == -1) {\n      return _REG_ESPACE;\n    }" if (parenthesized_expression "(top_clone_node == -1)" ( (binary_expression "top_clone_node == -1" identifier == number_literal) )) (compound_statement "{\n      return _REG_ESPACE;\n    }" { (return_statement "return _REG_ESPACE;" return identifier ;) })) (expression_statement "iVar3 = (*pcVar12)(dfa->edests + iVar3,top_clone_node);" (assignment_expression "iVar3 = (*pcVar12)(dfa->edests + iVar3,top_clone_node)" identifier = (call_expression "(*pcVar12)(dfa->edests + iVar3,top_clone_node)" (parenthesized_expression "(*pcVar12)" ( (pointer_expression "*pcVar12" * identifier) )) (argument_list "(dfa->edests + iVar3,top_clone_node)" ( (binary_expression "dfa->edests + iVar3" (field_expression "dfa->edests" identifier -> field_identifier) + identifier) , identifier )))) ;) (if_statement "if (iVar3 == 0) {\n      return _REG_ESPACE;\n    }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      return _REG_ESPACE;\n    }" { (return_statement "return _REG_ESPACE;" return identifier ;) })) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit "int FUN_00023180(int *param_1,int param_2,int param_3,int param_4,uint param_5)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  code *pcVar7;\n  code *pcVar8;\n  \n  pcVar8 = (code *)(PTR_DAT_000471f4 + 0x309c);\n  pcVar7 = (code *)(PTR_DAT_000471f4 + 0xb4);\n  do {\n    iVar4 = param_2 << 3;\n    while( true ) {\n      while (*(char *)(*param_1 + iVar4 + 4) == '\x04') {\n        iVar4 = param_2 * 4;\n        param_2 = *(int *)(param_1[3] + iVar4);\n        *(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0;\n        iVar1 = (*pcVar8)(param_1,param_2,param_5);\n        if (iVar1 == -1) {\n          return 0xc;\n        }\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar4);\n        iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1);\n        iVar4 = param_2 << 3;\n        param_3 = iVar1;\n        if (iVar2 == 0) {\n          return 0xc;\n        }\n      }\n      iVar1 = param_1[5];\n      iVar2 = iVar1 + param_2 * 0xc;\n      if (*(int *)(iVar2 + 4) == 0) {\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n        return 0;\n      }\n      if (*(int *)(iVar2 + 4) != 1) break;\n      iVar5 = **(int **)(iVar2 + 8);\n      iVar2 = param_3 * 0xc;\n      *(undefined4 *)(iVar1 + iVar2 + 4) = 0;\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | (uint)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16;\n      param_3 = (*pcVar8)(param_1,iVar5,param_5);\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      iVar4 = (*pcVar7)(param_1[5] + iVar2,param_3);\n      if (iVar4 == 0) {\n        return 0xc;\n      }\n      iVar4 = iVar5 << 3;\n      param_2 = iVar5;\n    }\n    iVar5 = **(int **)(iVar2 + 8);\n    iVar6 = param_3 * 0xc;\n    *(undefined4 *)(iVar1 + iVar6 + 4) = 0;\n    iVar2 = param_1[2];\n    iVar1 = iVar2 + -1;\n    iVar4 = *param_1 + iVar1 * 8;\n    if (((*(uint *)(iVar4 + 4) & 0x2000) != 0) && (0 < iVar1)) {\n      iVar3 = param_1[4] + iVar2 * 4;\n      iVar2 = (*param_1 + iVar2 * 8) - iVar4;\n      while ((iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)\n             )) {\n        iVar4 = iVar4 + iVar2 + -0x10;\n        iVar1 = iVar1 + -1;\n        if (((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))\n        goto LAB_000234d0;\n      }\n      if (iVar1 != -1) {\n        iVar4 = (*pcVar7)(param_1[5] + iVar6);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        goto LAB_000233d0;\n      }\n    }\nLAB_000234d0:\n    iVar4 = (*pcVar8)(param_1,iVar5,param_5);\n    if (iVar4 == -1) {\n      return 0xc;\n    }\n    iVar1 = (*pcVar7)(param_1[5] + iVar6,iVar4);\n    if (iVar1 == 0) {\n      return 0xc;\n    }\n    iVar4 = FUN_00023180(param_1,iVar5,iVar4,param_4,param_5);\n    if (iVar4 != 0) {\n      return iVar4;\n    }\nLAB_000233d0:\n    param_2 = *(int *)(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4);\n    param_3 = (*pcVar8)(param_1,param_2,param_5);\n    if (param_3 == -1) {\n      return 0xc;\n    }\n    iVar4 = (*pcVar7)(param_1[5] + iVar6,param_3);\n    if (iVar4 == 0) {\n      return 0xc;\n    }\n  } while( true );\n}\n\n" (function_definition "int FUN_00023180(int *param_1,int param_2,int param_3,int param_4,uint param_5)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  code *pcVar7;\n  code *pcVar8;\n  \n  pcVar8 = (code *)(PTR_DAT_000471f4 + 0x309c);\n  pcVar7 = (code *)(PTR_DAT_000471f4 + 0xb4);\n  do {\n    iVar4 = param_2 << 3;\n    while( true ) {\n      while (*(char *)(*param_1 + iVar4 + 4) == '\x04') {\n        iVar4 = param_2 * 4;\n        param_2 = *(int *)(param_1[3] + iVar4);\n        *(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0;\n        iVar1 = (*pcVar8)(param_1,param_2,param_5);\n        if (iVar1 == -1) {\n          return 0xc;\n        }\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar4);\n        iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1);\n        iVar4 = param_2 << 3;\n        param_3 = iVar1;\n        if (iVar2 == 0) {\n          return 0xc;\n        }\n      }\n      iVar1 = param_1[5];\n      iVar2 = iVar1 + param_2 * 0xc;\n      if (*(int *)(iVar2 + 4) == 0) {\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n        return 0;\n      }\n      if (*(int *)(iVar2 + 4) != 1) break;\n      iVar5 = **(int **)(iVar2 + 8);\n      iVar2 = param_3 * 0xc;\n      *(undefined4 *)(iVar1 + iVar2 + 4) = 0;\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | (uint)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16;\n      param_3 = (*pcVar8)(param_1,iVar5,param_5);\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      iVar4 = (*pcVar7)(param_1[5] + iVar2,param_3);\n      if (iVar4 == 0) {\n        return 0xc;\n      }\n      iVar4 = iVar5 << 3;\n      param_2 = iVar5;\n    }\n    iVar5 = **(int **)(iVar2 + 8);\n    iVar6 = param_3 * 0xc;\n    *(undefined4 *)(iVar1 + iVar6 + 4) = 0;\n    iVar2 = param_1[2];\n    iVar1 = iVar2 + -1;\n    iVar4 = *param_1 + iVar1 * 8;\n    if (((*(uint *)(iVar4 + 4) & 0x2000) != 0) && (0 < iVar1)) {\n      iVar3 = param_1[4] + iVar2 * 4;\n      iVar2 = (*param_1 + iVar2 * 8) - iVar4;\n      while ((iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)\n             )) {\n        iVar4 = iVar4 + iVar2 + -0x10;\n        iVar1 = iVar1 + -1;\n        if (((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))\n        goto LAB_000234d0;\n      }\n      if (iVar1 != -1) {\n        iVar4 = (*pcVar7)(param_1[5] + iVar6);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        goto LAB_000233d0;\n      }\n    }\nLAB_000234d0:\n    iVar4 = (*pcVar8)(param_1,iVar5,param_5);\n    if (iVar4 == -1) {\n      return 0xc;\n    }\n    iVar1 = (*pcVar7)(param_1[5] + iVar6,iVar4);\n    if (iVar1 == 0) {\n      return 0xc;\n    }\n    iVar4 = FUN_00023180(param_1,iVar5,iVar4,param_4,param_5);\n    if (iVar4 != 0) {\n      return iVar4;\n    }\nLAB_000233d0:\n    param_2 = *(int *)(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4);\n    param_3 = (*pcVar8)(param_1,param_2,param_5);\n    if (param_3 == -1) {\n      return 0xc;\n    }\n    iVar4 = (*pcVar7)(param_1[5] + iVar6,param_3);\n    if (iVar4 == 0) {\n      return 0xc;\n    }\n  } while( true );\n}" primitive_type (function_declarator "FUN_00023180(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  int iVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  code *pcVar7;\n  code *pcVar8;\n  \n  pcVar8 = (code *)(PTR_DAT_000471f4 + 0x309c);\n  pcVar7 = (code *)(PTR_DAT_000471f4 + 0xb4);\n  do {\n    iVar4 = param_2 << 3;\n    while( true ) {\n      while (*(char *)(*param_1 + iVar4 + 4) == '\x04') {\n        iVar4 = param_2 * 4;\n        param_2 = *(int *)(param_1[3] + iVar4);\n        *(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0;\n        iVar1 = (*pcVar8)(param_1,param_2,param_5);\n        if (iVar1 == -1) {\n          return 0xc;\n        }\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar4);\n        iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1);\n        iVar4 = param_2 << 3;\n        param_3 = iVar1;\n        if (iVar2 == 0) {\n          return 0xc;\n        }\n      }\n      iVar1 = param_1[5];\n      iVar2 = iVar1 + param_2 * 0xc;\n      if (*(int *)(iVar2 + 4) == 0) {\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n        return 0;\n      }\n      if (*(int *)(iVar2 + 4) != 1) break;\n      iVar5 = **(int **)(iVar2 + 8);\n      iVar2 = param_3 * 0xc;\n      *(undefined4 *)(iVar1 + iVar2 + 4) = 0;\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | (uint)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16;\n      param_3 = (*pcVar8)(param_1,iVar5,param_5);\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      iVar4 = (*pcVar7)(param_1[5] + iVar2,param_3);\n      if (iVar4 == 0) {\n        return 0xc;\n      }\n      iVar4 = iVar5 << 3;\n      param_2 = iVar5;\n    }\n    iVar5 = **(int **)(iVar2 + 8);\n    iVar6 = param_3 * 0xc;\n    *(undefined4 *)(iVar1 + iVar6 + 4) = 0;\n    iVar2 = param_1[2];\n    iVar1 = iVar2 + -1;\n    iVar4 = *param_1 + iVar1 * 8;\n    if (((*(uint *)(iVar4 + 4) & 0x2000) != 0) && (0 < iVar1)) {\n      iVar3 = param_1[4] + iVar2 * 4;\n      iVar2 = (*param_1 + iVar2 * 8) - iVar4;\n      while ((iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)\n             )) {\n        iVar4 = iVar4 + iVar2 + -0x10;\n        iVar1 = iVar1 + -1;\n        if (((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))\n        goto LAB_000234d0;\n      }\n      if (iVar1 != -1) {\n        iVar4 = (*pcVar7)(param_1[5] + iVar6);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        goto LAB_000233d0;\n      }\n    }\nLAB_000234d0:\n    iVar4 = (*pcVar8)(param_1,iVar5,param_5);\n    if (iVar4 == -1) {\n      return 0xc;\n    }\n    iVar1 = (*pcVar7)(param_1[5] + iVar6,iVar4);\n    if (iVar1 == 0) {\n      return 0xc;\n    }\n    iVar4 = FUN_00023180(param_1,iVar5,iVar4,param_4,param_5);\n    if (iVar4 != 0) {\n      return iVar4;\n    }\nLAB_000233d0:\n    param_2 = *(int *)(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4);\n    param_3 = (*pcVar8)(param_1,param_2,param_5);\n    if (param_3 == -1) {\n      return 0xc;\n    }\n    iVar4 = (*pcVar7)(param_1[5] + iVar6,param_3);\n    if (iVar4 == 0) {\n      return 0xc;\n    }\n  } while( true );\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" 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 "code *pcVar7;" type_identifier (pointer_declarator "*pcVar7" * identifier) ;) (declaration "code *pcVar8;" type_identifier (pointer_declarator "*pcVar8" * identifier) ;) (expression_statement "pcVar8 = (code *)(PTR_DAT_000471f4 + 0x309c);" (assignment_expression "pcVar8 = (code *)(PTR_DAT_000471f4 + 0x309c)" identifier = (cast_expression "(code *)(PTR_DAT_000471f4 + 0x309c)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_000471f4 + 0x309c)" ( (binary_expression "PTR_DAT_000471f4 + 0x309c" identifier + number_literal) )))) ;) (expression_statement "pcVar7 = (code *)(PTR_DAT_000471f4 + 0xb4);" (assignment_expression "pcVar7 = (code *)(PTR_DAT_000471f4 + 0xb4)" identifier = (cast_expression "(code *)(PTR_DAT_000471f4 + 0xb4)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_000471f4 + 0xb4)" ( (binary_expression "PTR_DAT_000471f4 + 0xb4" identifier + number_literal) )))) ;) (do_statement "do {\n    iVar4 = param_2 << 3;\n    while( true ) {\n      while (*(char *)(*param_1 + iVar4 + 4) == '\x04') {\n        iVar4 = param_2 * 4;\n        param_2 = *(int *)(param_1[3] + iVar4);\n        *(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0;\n        iVar1 = (*pcVar8)(param_1,param_2,param_5);\n        if (iVar1 == -1) {\n          return 0xc;\n        }\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar4);\n        iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1);\n        iVar4 = param_2 << 3;\n        param_3 = iVar1;\n        if (iVar2 == 0) {\n          return 0xc;\n        }\n      }\n      iVar1 = param_1[5];\n      iVar2 = iVar1 + param_2 * 0xc;\n      if (*(int *)(iVar2 + 4) == 0) {\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n        return 0;\n      }\n      if (*(int *)(iVar2 + 4) != 1) break;\n      iVar5 = **(int **)(iVar2 + 8);\n      iVar2 = param_3 * 0xc;\n      *(undefined4 *)(iVar1 + iVar2 + 4) = 0;\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | (uint)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16;\n      param_3 = (*pcVar8)(param_1,iVar5,param_5);\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      iVar4 = (*pcVar7)(param_1[5] + iVar2,param_3);\n      if (iVar4 == 0) {\n        return 0xc;\n      }\n      iVar4 = iVar5 << 3;\n      param_2 = iVar5;\n    }\n    iVar5 = **(int **)(iVar2 + 8);\n    iVar6 = param_3 * 0xc;\n    *(undefined4 *)(iVar1 + iVar6 + 4) = 0;\n    iVar2 = param_1[2];\n    iVar1 = iVar2 + -1;\n    iVar4 = *param_1 + iVar1 * 8;\n    if (((*(uint *)(iVar4 + 4) & 0x2000) != 0) && (0 < iVar1)) {\n      iVar3 = param_1[4] + iVar2 * 4;\n      iVar2 = (*param_1 + iVar2 * 8) - iVar4;\n      while ((iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)\n             )) {\n        iVar4 = iVar4 + iVar2 + -0x10;\n        iVar1 = iVar1 + -1;\n        if (((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))\n        goto LAB_000234d0;\n      }\n      if (iVar1 != -1) {\n        iVar4 = (*pcVar7)(param_1[5] + iVar6);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        goto LAB_000233d0;\n      }\n    }\nLAB_000234d0:\n    iVar4 = (*pcVar8)(param_1,iVar5,param_5);\n    if (iVar4 == -1) {\n      return 0xc;\n    }\n    iVar1 = (*pcVar7)(param_1[5] + iVar6,iVar4);\n    if (iVar1 == 0) {\n      return 0xc;\n    }\n    iVar4 = FUN_00023180(param_1,iVar5,iVar4,param_4,param_5);\n    if (iVar4 != 0) {\n      return iVar4;\n    }\nLAB_000233d0:\n    param_2 = *(int *)(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4);\n    param_3 = (*pcVar8)(param_1,param_2,param_5);\n    if (param_3 == -1) {\n      return 0xc;\n    }\n    iVar4 = (*pcVar7)(param_1[5] + iVar6,param_3);\n    if (iVar4 == 0) {\n      return 0xc;\n    }\n  } while( true );" do (compound_statement "{\n    iVar4 = param_2 << 3;\n    while( true ) {\n      while (*(char *)(*param_1 + iVar4 + 4) == '\x04') {\n        iVar4 = param_2 * 4;\n        param_2 = *(int *)(param_1[3] + iVar4);\n        *(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0;\n        iVar1 = (*pcVar8)(param_1,param_2,param_5);\n        if (iVar1 == -1) {\n          return 0xc;\n        }\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar4);\n        iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1);\n        iVar4 = param_2 << 3;\n        param_3 = iVar1;\n        if (iVar2 == 0) {\n          return 0xc;\n        }\n      }\n      iVar1 = param_1[5];\n      iVar2 = iVar1 + param_2 * 0xc;\n      if (*(int *)(iVar2 + 4) == 0) {\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n        return 0;\n      }\n      if (*(int *)(iVar2 + 4) != 1) break;\n      iVar5 = **(int **)(iVar2 + 8);\n      iVar2 = param_3 * 0xc;\n      *(undefined4 *)(iVar1 + iVar2 + 4) = 0;\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | (uint)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16;\n      param_3 = (*pcVar8)(param_1,iVar5,param_5);\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      iVar4 = (*pcVar7)(param_1[5] + iVar2,param_3);\n      if (iVar4 == 0) {\n        return 0xc;\n      }\n      iVar4 = iVar5 << 3;\n      param_2 = iVar5;\n    }\n    iVar5 = **(int **)(iVar2 + 8);\n    iVar6 = param_3 * 0xc;\n    *(undefined4 *)(iVar1 + iVar6 + 4) = 0;\n    iVar2 = param_1[2];\n    iVar1 = iVar2 + -1;\n    iVar4 = *param_1 + iVar1 * 8;\n    if (((*(uint *)(iVar4 + 4) & 0x2000) != 0) && (0 < iVar1)) {\n      iVar3 = param_1[4] + iVar2 * 4;\n      iVar2 = (*param_1 + iVar2 * 8) - iVar4;\n      while ((iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)\n             )) {\n        iVar4 = iVar4 + iVar2 + -0x10;\n        iVar1 = iVar1 + -1;\n        if (((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))\n        goto LAB_000234d0;\n      }\n      if (iVar1 != -1) {\n        iVar4 = (*pcVar7)(param_1[5] + iVar6);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        goto LAB_000233d0;\n      }\n    }\nLAB_000234d0:\n    iVar4 = (*pcVar8)(param_1,iVar5,param_5);\n    if (iVar4 == -1) {\n      return 0xc;\n    }\n    iVar1 = (*pcVar7)(param_1[5] + iVar6,iVar4);\n    if (iVar1 == 0) {\n      return 0xc;\n    }\n    iVar4 = FUN_00023180(param_1,iVar5,iVar4,param_4,param_5);\n    if (iVar4 != 0) {\n      return iVar4;\n    }\nLAB_000233d0:\n    param_2 = *(int *)(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4);\n    param_3 = (*pcVar8)(param_1,param_2,param_5);\n    if (param_3 == -1) {\n      return 0xc;\n    }\n    iVar4 = (*pcVar7)(param_1[5] + iVar6,param_3);\n    if (iVar4 == 0) {\n      return 0xc;\n    }\n  }" { (expression_statement "iVar4 = param_2 << 3;" (assignment_expression "iVar4 = param_2 << 3" identifier = (binary_expression "param_2 << 3" identifier << number_literal)) ;) (while_statement "while( true ) {\n      while (*(char *)(*param_1 + iVar4 + 4) == '\x04') {\n        iVar4 = param_2 * 4;\n        param_2 = *(int *)(param_1[3] + iVar4);\n        *(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0;\n        iVar1 = (*pcVar8)(param_1,param_2,param_5);\n        if (iVar1 == -1) {\n          return 0xc;\n        }\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar4);\n        iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1);\n        iVar4 = param_2 << 3;\n        param_3 = iVar1;\n        if (iVar2 == 0) {\n          return 0xc;\n        }\n      }\n      iVar1 = param_1[5];\n      iVar2 = iVar1 + param_2 * 0xc;\n      if (*(int *)(iVar2 + 4) == 0) {\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n        return 0;\n      }\n      if (*(int *)(iVar2 + 4) != 1) break;\n      iVar5 = **(int **)(iVar2 + 8);\n      iVar2 = param_3 * 0xc;\n      *(undefined4 *)(iVar1 + iVar2 + 4) = 0;\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | (uint)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16;\n      param_3 = (*pcVar8)(param_1,iVar5,param_5);\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      iVar4 = (*pcVar7)(param_1[5] + iVar2,param_3);\n      if (iVar4 == 0) {\n        return 0xc;\n      }\n      iVar4 = iVar5 << 3;\n      param_2 = iVar5;\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      while (*(char *)(*param_1 + iVar4 + 4) == '\x04') {\n        iVar4 = param_2 * 4;\n        param_2 = *(int *)(param_1[3] + iVar4);\n        *(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0;\n        iVar1 = (*pcVar8)(param_1,param_2,param_5);\n        if (iVar1 == -1) {\n          return 0xc;\n        }\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar4);\n        iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1);\n        iVar4 = param_2 << 3;\n        param_3 = iVar1;\n        if (iVar2 == 0) {\n          return 0xc;\n        }\n      }\n      iVar1 = param_1[5];\n      iVar2 = iVar1 + param_2 * 0xc;\n      if (*(int *)(iVar2 + 4) == 0) {\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n        return 0;\n      }\n      if (*(int *)(iVar2 + 4) != 1) break;\n      iVar5 = **(int **)(iVar2 + 8);\n      iVar2 = param_3 * 0xc;\n      *(undefined4 *)(iVar1 + iVar2 + 4) = 0;\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | (uint)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16;\n      param_3 = (*pcVar8)(param_1,iVar5,param_5);\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      iVar4 = (*pcVar7)(param_1[5] + iVar2,param_3);\n      if (iVar4 == 0) {\n        return 0xc;\n      }\n      iVar4 = iVar5 << 3;\n      param_2 = iVar5;\n    }" { (while_statement "while (*(char *)(*param_1 + iVar4 + 4) == '\x04') {\n        iVar4 = param_2 * 4;\n        param_2 = *(int *)(param_1[3] + iVar4);\n        *(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0;\n        iVar1 = (*pcVar8)(param_1,param_2,param_5);\n        if (iVar1 == -1) {\n          return 0xc;\n        }\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar4);\n        iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1);\n        iVar4 = param_2 << 3;\n        param_3 = iVar1;\n        if (iVar2 == 0) {\n          return 0xc;\n        }\n      }" while (parenthesized_expression "(*(char *)(*param_1 + iVar4 + 4) == '\x04')" ( (binary_expression "*(char *)(*param_1 + iVar4 + 4) == '\x04'" (pointer_expression "*(char *)(*param_1 + iVar4 + 4)" * (cast_expression "(char *)(*param_1 + iVar4 + 4)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + iVar4 + 4)" ( (binary_expression "*param_1 + iVar4 + 4" (binary_expression "*param_1 + iVar4" (pointer_expression "*param_1" * identifier) + identifier) + number_literal) )))) == (char_literal "'\x04'" ' escape_sequence ')) )) (compound_statement "{\n        iVar4 = param_2 * 4;\n        param_2 = *(int *)(param_1[3] + iVar4);\n        *(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0;\n        iVar1 = (*pcVar8)(param_1,param_2,param_5);\n        if (iVar1 == -1) {\n          return 0xc;\n        }\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar4);\n        iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1);\n        iVar4 = param_2 << 3;\n        param_3 = iVar1;\n        if (iVar2 == 0) {\n          return 0xc;\n        }\n      }" { (expression_statement "iVar4 = param_2 * 4;" (assignment_expression "iVar4 = param_2 * 4" identifier = (binary_expression "param_2 * 4" identifier * number_literal)) ;) (expression_statement "param_2 = *(int *)(param_1[3] + iVar4);" (assignment_expression "param_2 = *(int *)(param_1[3] + iVar4)" identifier = (pointer_expression "*(int *)(param_1[3] + iVar4)" * (cast_expression "(int *)(param_1[3] + iVar4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[3] + iVar4)" ( (binary_expression "param_1[3] + iVar4" (subscript_expression "param_1[3]" identifier [ number_literal ]) + identifier) ))))) ;) (expression_statement "*(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0;" (assignment_expression "*(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0" (pointer_expression "*(undefined4 *)(param_1[5] + param_3 * 0xc + 4)" * (cast_expression "(undefined4 *)(param_1[5] + param_3 * 0xc + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[5] + param_3 * 0xc + 4)" ( (binary_expression "param_1[5] + param_3 * 0xc + 4" (binary_expression "param_1[5] + param_3 * 0xc" (subscript_expression "param_1[5]" identifier [ number_literal ]) + (binary_expression "param_3 * 0xc" identifier * number_literal)) + number_literal) )))) = number_literal) ;) (expression_statement "iVar1 = (*pcVar8)(param_1,param_2,param_5);" (assignment_expression "iVar1 = (*pcVar8)(param_1,param_2,param_5)" identifier = (call_expression "(*pcVar8)(param_1,param_2,param_5)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(param_1,param_2,param_5)" ( identifier , identifier , identifier )))) ;) (if_statement "if (iVar1 == -1) {\n          return 0xc;\n        }" if (parenthesized_expression "(iVar1 == -1)" ( (binary_expression "iVar1 == -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] + iVar4);" (assignment_expression "*(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar4)" (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] + iVar4)" * (cast_expression "(undefined4 *)(param_1[3] + iVar4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[3] + iVar4)" ( (binary_expression "param_1[3] + iVar4" (subscript_expression "param_1[3]" identifier [ number_literal ]) + identifier) ))))) ;) (expression_statement "iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1);" (assignment_expression "iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1)" identifier = (call_expression "(*pcVar7)(param_1[5] + param_3 * 0xc,iVar1)" (parenthesized_expression "(*pcVar7)" ( (pointer_expression "*pcVar7" * identifier) )) (argument_list "(param_1[5] + param_3 * 0xc,iVar1)" ( (binary_expression "param_1[5] + param_3 * 0xc" (subscript_expression "param_1[5]" identifier [ number_literal ]) + (binary_expression "param_3 * 0xc" identifier * number_literal)) , identifier )))) ;) (expression_statement "iVar4 = param_2 << 3;" (assignment_expression "iVar4 = param_2 << 3" identifier = (binary_expression "param_2 << 3" identifier << number_literal)) ;) (expression_statement "param_3 = iVar1;" (assignment_expression "param_3 = iVar1" identifier = identifier) ;) (if_statement "if (iVar2 == 0) {\n          return 0xc;\n        }" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (compound_statement "{\n          return 0xc;\n        }" { (return_statement "return 0xc;" return number_literal ;) })) })) (expression_statement "iVar1 = param_1[5];" (assignment_expression "iVar1 = param_1[5]" identifier = (subscript_expression "param_1[5]" identifier [ number_literal ])) ;) (expression_statement "iVar2 = iVar1 + param_2 * 0xc;" (assignment_expression "iVar2 = iVar1 + param_2 * 0xc" identifier = (binary_expression "iVar1 + param_2 * 0xc" identifier + (binary_expression "param_2 * 0xc" identifier * number_literal))) ;) (if_statement "if (*(int *)(iVar2 + 4) == 0) {\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n        return 0;\n      }" if (parenthesized_expression "(*(int *)(iVar2 + 4) == 0)" ( (binary_expression "*(int *)(iVar2 + 4) == 0" (pointer_expression "*(int *)(iVar2 + 4)" * (cast_expression "(int *)(iVar2 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 4)" ( (binary_expression "iVar2 + 4" identifier + number_literal) )))) == 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 ;) })) (if_statement "if (*(int *)(iVar2 + 4) != 1) break;" if (parenthesized_expression "(*(int *)(iVar2 + 4) != 1)" ( (binary_expression "*(int *)(iVar2 + 4) != 1" (pointer_expression "*(int *)(iVar2 + 4)" * (cast_expression "(int *)(iVar2 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 4)" ( (binary_expression "iVar2 + 4" identifier + number_literal) )))) != number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar5 = **(int **)(iVar2 + 8);" (assignment_expression "iVar5 = **(int **)(iVar2 + 8)" identifier = (pointer_expression "**(int **)(iVar2 + 8)" * (pointer_expression "*(int **)(iVar2 + 8)" * (cast_expression "(int **)(iVar2 + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar2 + 8)" ( (binary_expression "iVar2 + 8" identifier + number_literal) )))))) ;) (expression_statement "iVar2 = param_3 * 0xc;" (assignment_expression "iVar2 = param_3 * 0xc" identifier = (binary_expression "param_3 * 0xc" identifier * number_literal)) ;) (expression_statement "*(undefined4 *)(iVar1 + iVar2 + 4) = 0;" (assignment_expression "*(undefined4 *)(iVar1 + iVar2 + 4) = 0" (pointer_expression "*(undefined4 *)(iVar1 + iVar2 + 4)" * (cast_expression "(undefined4 *)(iVar1 + iVar2 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + iVar2 + 4)" ( (binary_expression "iVar1 + iVar2 + 4" (binary_expression "iVar1 + iVar2" identifier + identifier) + number_literal) )))) = number_literal) ;) (if_statement "if ((param_2 == param_4) && (param_2 != param_3)) {\n        iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5);\n        if (iVar4 == 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        iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        return 0;\n      }" { (expression_statement "iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5);" (assignment_expression "iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5)" identifier = (call_expression "FUN_000200b4(param_1[5] + iVar2,iVar5)" identifier (argument_list "(param_1[5] + iVar2,iVar5)" ( (binary_expression "param_1[5] + iVar2" (subscript_expression "param_1[5]" identifier [ number_literal ]) + identifier) , identifier )))) ;) (if_statement "if (iVar4 == 0) {\n          return 0xc;\n        }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (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)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16;" (assignment_expression "param_5 = param_5 | (uint)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16" identifier = (binary_expression "param_5 | (uint)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16" identifier | (binary_expression "(uint)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16" (call_expression "(uint)(*(int *)(*param_1 + iVar4 + 4) << 8)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(int *)(*param_1 + iVar4 + 4) << 8)" ( (binary_expression "*(int *)(*param_1 + iVar4 + 4) << 8" (pointer_expression "*(int *)(*param_1 + iVar4 + 4)" * (cast_expression "(int *)(*param_1 + iVar4 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + iVar4 + 4)" ( (binary_expression "*param_1 + iVar4 + 4" (binary_expression "*param_1 + iVar4" (pointer_expression "*param_1" * identifier) + identifier) + number_literal) )))) << number_literal) ))) >> number_literal))) ;) (expression_statement "param_3 = (*pcVar8)(param_1,iVar5,param_5);" (assignment_expression "param_3 = (*pcVar8)(param_1,iVar5,param_5)" identifier = (call_expression "(*pcVar8)(param_1,iVar5,param_5)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(param_1,iVar5,param_5)" ( identifier , identifier , identifier )))) ;) (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 "iVar4 = (*pcVar7)(param_1[5] + iVar2,param_3);" (assignment_expression "iVar4 = (*pcVar7)(param_1[5] + iVar2,param_3)" identifier = (call_expression "(*pcVar7)(param_1[5] + iVar2,param_3)" (parenthesized_expression "(*pcVar7)" ( (pointer_expression "*pcVar7" * identifier) )) (argument_list "(param_1[5] + iVar2,param_3)" ( (binary_expression "param_1[5] + iVar2" (subscript_expression "param_1[5]" identifier [ number_literal ]) + identifier) , identifier )))) ;) (if_statement "if (iVar4 == 0) {\n        return 0xc;\n      }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0xc;\n      }" { (return_statement "return 0xc;" return number_literal ;) })) (expression_statement "iVar4 = iVar5 << 3;" (assignment_expression "iVar4 = iVar5 << 3" identifier = (binary_expression "iVar5 << 3" identifier << number_literal)) ;) (expression_statement "param_2 = iVar5;" (assignment_expression "param_2 = iVar5" identifier = identifier) ;) })) (expression_statement "iVar5 = **(int **)(iVar2 + 8);" (assignment_expression "iVar5 = **(int **)(iVar2 + 8)" identifier = (pointer_expression "**(int **)(iVar2 + 8)" * (pointer_expression "*(int **)(iVar2 + 8)" * (cast_expression "(int **)(iVar2 + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar2 + 8)" ( (binary_expression "iVar2 + 8" identifier + 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 "*(undefined4 *)(iVar1 + iVar6 + 4) = 0;" (assignment_expression "*(undefined4 *)(iVar1 + iVar6 + 4) = 0" (pointer_expression "*(undefined4 *)(iVar1 + iVar6 + 4)" * (cast_expression "(undefined4 *)(iVar1 + iVar6 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + iVar6 + 4)" ( (binary_expression "iVar1 + iVar6 + 4" (binary_expression "iVar1 + iVar6" identifier + identifier) + number_literal) )))) = number_literal) ;) (expression_statement "iVar2 = param_1[2];" (assignment_expression "iVar2 = param_1[2]" identifier = (subscript_expression "param_1[2]" identifier [ number_literal ])) ;) (expression_statement "iVar1 = iVar2 + -1;" (assignment_expression "iVar1 = iVar2 + -1" identifier = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) (expression_statement "iVar4 = *param_1 + iVar1 * 8;" (assignment_expression "iVar4 = *param_1 + iVar1 * 8" identifier = (binary_expression "*param_1 + iVar1 * 8" (pointer_expression "*param_1" * identifier) + (binary_expression "iVar1 * 8" identifier * number_literal))) ;) (if_statement "if (((*(uint *)(iVar4 + 4) & 0x2000) != 0) && (0 < iVar1)) {\n      iVar3 = param_1[4] + iVar2 * 4;\n      iVar2 = (*param_1 + iVar2 * 8) - iVar4;\n      while ((iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)\n             )) {\n        iVar4 = iVar4 + iVar2 + -0x10;\n        iVar1 = iVar1 + -1;\n        if (((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))\n        goto LAB_000234d0;\n      }\n      if (iVar1 != -1) {\n        iVar4 = (*pcVar7)(param_1[5] + iVar6);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        goto LAB_000233d0;\n      }\n    }" if (parenthesized_expression "(((*(uint *)(iVar4 + 4) & 0x2000) != 0) && (0 < iVar1))" ( (binary_expression "((*(uint *)(iVar4 + 4) & 0x2000) != 0) && (0 < iVar1)" (parenthesized_expression "((*(uint *)(iVar4 + 4) & 0x2000) != 0)" ( (binary_expression "(*(uint *)(iVar4 + 4) & 0x2000) != 0" (parenthesized_expression "(*(uint *)(iVar4 + 4) & 0x2000)" ( (binary_expression "*(uint *)(iVar4 + 4) & 0x2000" (pointer_expression "*(uint *)(iVar4 + 4)" * (cast_expression "(uint *)(iVar4 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 4)" ( (binary_expression "iVar4 + 4" identifier + number_literal) )))) & number_literal) )) != number_literal) )) && (parenthesized_expression "(0 < iVar1)" ( (binary_expression "0 < iVar1" number_literal < identifier) ))) )) (compound_statement "{\n      iVar3 = param_1[4] + iVar2 * 4;\n      iVar2 = (*param_1 + iVar2 * 8) - iVar4;\n      while ((iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)\n             )) {\n        iVar4 = iVar4 + iVar2 + -0x10;\n        iVar1 = iVar1 + -1;\n        if (((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))\n        goto LAB_000234d0;\n      }\n      if (iVar1 != -1) {\n        iVar4 = (*pcVar7)(param_1[5] + iVar6);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        goto LAB_000233d0;\n      }\n    }" { (expression_statement "iVar3 = param_1[4] + iVar2 * 4;" (assignment_expression "iVar3 = param_1[4] + iVar2 * 4" identifier = (binary_expression "param_1[4] + iVar2 * 4" (subscript_expression "param_1[4]" identifier [ number_literal ]) + (binary_expression "iVar2 * 4" identifier * number_literal))) ;) (expression_statement "iVar2 = (*param_1 + iVar2 * 8) - iVar4;" (assignment_expression "iVar2 = (*param_1 + iVar2 * 8) - iVar4" identifier = (binary_expression "(*param_1 + iVar2 * 8) - iVar4" (parenthesized_expression "(*param_1 + iVar2 * 8)" ( (binary_expression "*param_1 + iVar2 * 8" (pointer_expression "*param_1" * identifier) + (binary_expression "iVar2 * 8" identifier * number_literal)) )) - identifier)) ;) (while_statement "while ((iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)\n             )) {\n        iVar4 = iVar4 + iVar2 + -0x10;\n        iVar1 = iVar1 + -1;\n        if (((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))\n        goto LAB_000234d0;\n      }" while (parenthesized_expression "((iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)\n             ))" ( (parenthesized_expression "(iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)\n             )" ( (binary_expression "iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)" (binary_expression "iVar5 != *(int *)(iVar3 + -4)" identifier != (pointer_expression "*(int *)(iVar3 + -4)" * (cast_expression "(int *)(iVar3 + -4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + -4)" ( (binary_expression "iVar3 + -4" identifier + number_literal) ))))) || (parenthesized_expression "(param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)" ( (binary_expression "param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16" identifier != (binary_expression "(uint)(*(int *)(iVar4 + 4) << 8) >> 0x16" (call_expression "(uint)(*(int *)(iVar4 + 4) << 8)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(int *)(iVar4 + 4) << 8)" ( (binary_expression "*(int *)(iVar4 + 4) << 8" (pointer_expression "*(int *)(iVar4 + 4)" * (cast_expression "(int *)(iVar4 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 4)" ( (binary_expression "iVar4 + 4" identifier + number_literal) )))) << number_literal) ))) >> number_literal)) ))) )) )) (compound_statement "{\n        iVar4 = iVar4 + iVar2 + -0x10;\n        iVar1 = iVar1 + -1;\n        if (((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))\n        goto LAB_000234d0;\n      }" { (expression_statement "iVar4 = iVar4 + iVar2 + -0x10;" (assignment_expression "iVar4 = iVar4 + iVar2 + -0x10" identifier = (binary_expression "iVar4 + iVar2 + -0x10" (binary_expression "iVar4 + iVar2" identifier + identifier) + number_literal)) ;) (expression_statement "iVar1 = iVar1 + -1;" (assignment_expression "iVar1 = iVar1 + -1" identifier = (binary_expression "iVar1 + -1" identifier + number_literal)) ;) (if_statement "if (((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))\n        goto LAB_000234d0;" if (parenthesized_expression "(((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))" ( (binary_expression "((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0)" (parenthesized_expression "((*(uint *)(iVar4 + 4) & 0x2000) == 0)" ( (binary_expression "(*(uint *)(iVar4 + 4) & 0x2000) == 0" (parenthesized_expression "(*(uint *)(iVar4 + 4) & 0x2000)" ( (binary_expression "*(uint *)(iVar4 + 4) & 0x2000" (pointer_expression "*(uint *)(iVar4 + 4)" * (cast_expression "(uint *)(iVar4 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 4)" ( (binary_expression "iVar4 + 4" identifier + number_literal) )))) & number_literal) )) == number_literal) )) || (parenthesized_expression "(iVar3 = iVar3 + -4, iVar1 == 0)" ( (comma_expression "iVar3 = iVar3 + -4, iVar1 == 0" (assignment_expression "iVar3 = iVar3 + -4" identifier = (binary_expression "iVar3 + -4" identifier + number_literal)) , (binary_expression "iVar1 == 0" identifier == number_literal)) ))) )) (goto_statement "goto LAB_000234d0;" goto statement_identifier ;)) })) (if_statement "if (iVar1 != -1) {\n        iVar4 = (*pcVar7)(param_1[5] + iVar6);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        goto LAB_000233d0;\n      }" if (parenthesized_expression "(iVar1 != -1)" ( (binary_expression "iVar1 != -1" identifier != number_literal) )) (compound_statement "{\n        iVar4 = (*pcVar7)(param_1[5] + iVar6);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        goto LAB_000233d0;\n      }" { (expression_statement "iVar4 = (*pcVar7)(param_1[5] + iVar6);" (assignment_expression "iVar4 = (*pcVar7)(param_1[5] + iVar6)" identifier = (call_expression "(*pcVar7)(param_1[5] + iVar6)" (parenthesized_expression "(*pcVar7)" ( (pointer_expression "*pcVar7" * identifier) )) (argument_list "(param_1[5] + iVar6)" ( (binary_expression "param_1[5] + iVar6" (subscript_expression "param_1[5]" identifier [ number_literal ]) + identifier) )))) ;) (if_statement "if (iVar4 == 0) {\n          return 0xc;\n        }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n          return 0xc;\n        }" { (return_statement "return 0xc;" return number_literal ;) })) (goto_statement "goto LAB_000233d0;" goto statement_identifier ;) })) })) (labeled_statement "LAB_000234d0:\n    iVar4 = (*pcVar8)(param_1,iVar5,param_5);" statement_identifier : (expression_statement "iVar4 = (*pcVar8)(param_1,iVar5,param_5);" (assignment_expression "iVar4 = (*pcVar8)(param_1,iVar5,param_5)" identifier = (call_expression "(*pcVar8)(param_1,iVar5,param_5)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(param_1,iVar5,param_5)" ( identifier , identifier , identifier )))) ;)) (if_statement "if (iVar4 == -1) {\n      return 0xc;\n    }" if (parenthesized_expression "(iVar4 == -1)" ( (binary_expression "iVar4 == -1" identifier == number_literal) )) (compound_statement "{\n      return 0xc;\n    }" { (return_statement "return 0xc;" return number_literal ;) })) (expression_statement "iVar1 = (*pcVar7)(param_1[5] + iVar6,iVar4);" (assignment_expression "iVar1 = (*pcVar7)(param_1[5] + iVar6,iVar4)" identifier = (call_expression "(*pcVar7)(param_1[5] + iVar6,iVar4)" (parenthesized_expression "(*pcVar7)" ( (pointer_expression "*pcVar7" * identifier) )) (argument_list "(param_1[5] + iVar6,iVar4)" ( (binary_expression "param_1[5] + iVar6" (subscript_expression "param_1[5]" identifier [ number_literal ]) + identifier) , identifier )))) ;) (if_statement "if (iVar1 == 0) {\n      return 0xc;\n    }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n      return 0xc;\n    }" { (return_statement "return 0xc;" return number_literal ;) })) (expression_statement "iVar4 = FUN_00023180(param_1,iVar5,iVar4,param_4,param_5);" (assignment_expression "iVar4 = FUN_00023180(param_1,iVar5,iVar4,param_4,param_5)" identifier = (call_expression "FUN_00023180(param_1,iVar5,iVar4,param_4,param_5)" identifier (argument_list "(param_1,iVar5,iVar4,param_4,param_5)" ( identifier , identifier , identifier , identifier , identifier )))) ;) (if_statement "if (iVar4 != 0) {\n      return iVar4;\n    }" if (parenthesized_expression "(iVar4 != 0)" ( (binary_expression "iVar4 != 0" identifier != number_literal) )) (compound_statement "{\n      return iVar4;\n    }" { (return_statement "return iVar4;" return identifier ;) })) (labeled_statement "LAB_000233d0:\n    param_2 = *(int *)(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4);" statement_identifier : (expression_statement "param_2 = *(int *)(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4);" (assignment_expression "param_2 = *(int *)(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4)" identifier = (pointer_expression "*(int *)(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4)" * (cast_expression "(int *)(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4)" ( (binary_expression "*(int *)(param_1[5] + param_2 * 0xc + 8) + 4" (pointer_expression "*(int *)(param_1[5] + param_2 * 0xc + 8)" * (cast_expression "(int *)(param_1[5] + param_2 * 0xc + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[5] + param_2 * 0xc + 8)" ( (binary_expression "param_1[5] + param_2 * 0xc + 8" (binary_expression "param_1[5] + param_2 * 0xc" (subscript_expression "param_1[5]" identifier [ number_literal ]) + (binary_expression "param_2 * 0xc" identifier * number_literal)) + number_literal) )))) + number_literal) ))))) ;)) (expression_statement "param_3 = (*pcVar8)(param_1,param_2,param_5);" (assignment_expression "param_3 = (*pcVar8)(param_1,param_2,param_5)" identifier = (call_expression "(*pcVar8)(param_1,param_2,param_5)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(param_1,param_2,param_5)" ( identifier , identifier , identifier )))) ;) (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 "iVar4 = (*pcVar7)(param_1[5] + iVar6,param_3);" (assignment_expression "iVar4 = (*pcVar7)(param_1[5] + iVar6,param_3)" identifier = (call_expression "(*pcVar7)(param_1[5] + iVar6,param_3)" (parenthesized_expression "(*pcVar7)" ( (pointer_expression "*pcVar7" * identifier) )) (argument_list "(param_1[5] + iVar6,param_3)" ( (binary_expression "param_1[5] + iVar6" (subscript_expression "param_1[5]" identifier [ number_literal ]) + identifier) , identifier )))) ;) (if_statement "if (iVar4 == 0) {\n      return 0xc;\n    }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n      return 0xc;\n    }" { (return_statement "return 0xc;" return number_literal ;) })) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit (function_definition TYPE (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 (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT << LIT)) ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (while_statement while (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * IDENT) + IDENT) + LIT) )))) == (char_literal ' escape_sequence ')) )) (compound_statement { (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 ]) + IDENT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) + LIT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , IDENT , IDENT )))) ;) (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 (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT << LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) })) (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) )))) == 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 ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (break_statement break ;)) (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 IDENT = (binary_expression IDENT * LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + IDENT) + LIT) )))) = LIT) ;) (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 ( (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT) , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT | (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * IDENT) + IDENT) + LIT) )))) << LIT) ))) >> LIT))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT) , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT << LIT)) ;) (expression_statement (assignment_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 IDENT = (binary_expression IDENT * LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + IDENT) + LIT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_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 (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + (binary_expression IDENT * LIT)) )) - IDENT)) ;) (while_statement while (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression IDENT != (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) || (parenthesized_expression ( (binary_expression IDENT != (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (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 = (binary_expression (binary_expression IDENT + IDENT) + LIT)) ;) (expression_statement (assignment_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 ( (comma_expression (assignment_expression IDENT = (binary_expression IDENT + LIT)) , (binary_expression IDENT == LIT)) ))) )) (goto_statement goto statement_identifier ;)) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (goto_statement goto statement_identifier ;) })) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , IDENT , IDENT )))) ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT) , IDENT )))) ;) (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 ( IDENT , IDENT , IDENT , 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 ]) + (binary_expression IDENT * LIT)) + LIT) )))) + LIT) ))))) ;)) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT) , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) }) while (parenthesized_expression ( BOOL )) ;) })))
(function_definition "int FUN_00023180(int *param_1,int param_2,int param_3,int param_4,uint param_5)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  code *pcVar7;\n  code *pcVar8;\n  \n  pcVar8 = (code *)(PTR_DAT_000471f4 + 0x309c);\n  pcVar7 = (code *)(PTR_DAT_000471f4 + 0xb4);\n  do {\n    iVar4 = param_2 << 3;\n    while( true ) {\n      while (*(char *)(*param_1 + iVar4 + 4) == '\x04') {\n        iVar4 = param_2 * 4;\n        param_2 = *(int *)(param_1[3] + iVar4);\n        *(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0;\n        iVar1 = (*pcVar8)(param_1,param_2,param_5);\n        if (iVar1 == -1) {\n          return 0xc;\n        }\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar4);\n        iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1);\n        iVar4 = param_2 << 3;\n        param_3 = iVar1;\n        if (iVar2 == 0) {\n          return 0xc;\n        }\n      }\n      iVar1 = param_1[5];\n      iVar2 = iVar1 + param_2 * 0xc;\n      if (*(int *)(iVar2 + 4) == 0) {\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n        return 0;\n      }\n      if (*(int *)(iVar2 + 4) != 1) break;\n      iVar5 = **(int **)(iVar2 + 8);\n      iVar2 = param_3 * 0xc;\n      *(undefined4 *)(iVar1 + iVar2 + 4) = 0;\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | (uint)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16;\n      param_3 = (*pcVar8)(param_1,iVar5,param_5);\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      iVar4 = (*pcVar7)(param_1[5] + iVar2,param_3);\n      if (iVar4 == 0) {\n        return 0xc;\n      }\n      iVar4 = iVar5 << 3;\n      param_2 = iVar5;\n    }\n    iVar5 = **(int **)(iVar2 + 8);\n    iVar6 = param_3 * 0xc;\n    *(undefined4 *)(iVar1 + iVar6 + 4) = 0;\n    iVar2 = param_1[2];\n    iVar1 = iVar2 + -1;\n    iVar4 = *param_1 + iVar1 * 8;\n    if (((*(uint *)(iVar4 + 4) & 0x2000) != 0) && (0 < iVar1)) {\n      iVar3 = param_1[4] + iVar2 * 4;\n      iVar2 = (*param_1 + iVar2 * 8) - iVar4;\n      while ((iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)\n             )) {\n        iVar4 = iVar4 + iVar2 + -0x10;\n        iVar1 = iVar1 + -1;\n        if (((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))\n        goto LAB_000234d0;\n      }\n      if (iVar1 != -1) {\n        iVar4 = (*pcVar7)(param_1[5] + iVar6);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        goto LAB_000233d0;\n      }\n    }\nLAB_000234d0:\n    iVar4 = (*pcVar8)(param_1,iVar5,param_5);\n    if (iVar4 == -1) {\n      return 0xc;\n    }\n    iVar1 = (*pcVar7)(param_1[5] + iVar6,iVar4);\n    if (iVar1 == 0) {\n      return 0xc;\n    }\n    iVar4 = FUN_00023180(param_1,iVar5,iVar4,param_4,param_5);\n    if (iVar4 != 0) {\n      return iVar4;\n    }\nLAB_000233d0:\n    param_2 = *(int *)(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4);\n    param_3 = (*pcVar8)(param_1,param_2,param_5);\n    if (param_3 == -1) {\n      return 0xc;\n    }\n    iVar4 = (*pcVar7)(param_1[5] + iVar6,param_3);\n    if (iVar4 == 0) {\n      return 0xc;\n    }\n  } while( true );\n}" (primitive_type "int") (function_declarator "FUN_00023180(int *param_1,int param_2,int param_3,int param_4,uint param_5)" (identifier "FUN_00023180") (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  int iVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  code *pcVar7;\n  code *pcVar8;\n  \n  pcVar8 = (code *)(PTR_DAT_000471f4 + 0x309c);\n  pcVar7 = (code *)(PTR_DAT_000471f4 + 0xb4);\n  do {\n    iVar4 = param_2 << 3;\n    while( true ) {\n      while (*(char *)(*param_1 + iVar4 + 4) == '\x04') {\n        iVar4 = param_2 * 4;\n        param_2 = *(int *)(param_1[3] + iVar4);\n        *(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0;\n        iVar1 = (*pcVar8)(param_1,param_2,param_5);\n        if (iVar1 == -1) {\n          return 0xc;\n        }\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar4);\n        iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1);\n        iVar4 = param_2 << 3;\n        param_3 = iVar1;\n        if (iVar2 == 0) {\n          return 0xc;\n        }\n      }\n      iVar1 = param_1[5];\n      iVar2 = iVar1 + param_2 * 0xc;\n      if (*(int *)(iVar2 + 4) == 0) {\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n        return 0;\n      }\n      if (*(int *)(iVar2 + 4) != 1) break;\n      iVar5 = **(int **)(iVar2 + 8);\n      iVar2 = param_3 * 0xc;\n      *(undefined4 *)(iVar1 + iVar2 + 4) = 0;\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | (uint)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16;\n      param_3 = (*pcVar8)(param_1,iVar5,param_5);\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      iVar4 = (*pcVar7)(param_1[5] + iVar2,param_3);\n      if (iVar4 == 0) {\n        return 0xc;\n      }\n      iVar4 = iVar5 << 3;\n      param_2 = iVar5;\n    }\n    iVar5 = **(int **)(iVar2 + 8);\n    iVar6 = param_3 * 0xc;\n    *(undefined4 *)(iVar1 + iVar6 + 4) = 0;\n    iVar2 = param_1[2];\n    iVar1 = iVar2 + -1;\n    iVar4 = *param_1 + iVar1 * 8;\n    if (((*(uint *)(iVar4 + 4) & 0x2000) != 0) && (0 < iVar1)) {\n      iVar3 = param_1[4] + iVar2 * 4;\n      iVar2 = (*param_1 + iVar2 * 8) - iVar4;\n      while ((iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)\n             )) {\n        iVar4 = iVar4 + iVar2 + -0x10;\n        iVar1 = iVar1 + -1;\n        if (((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))\n        goto LAB_000234d0;\n      }\n      if (iVar1 != -1) {\n        iVar4 = (*pcVar7)(param_1[5] + iVar6);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        goto LAB_000233d0;\n      }\n    }\nLAB_000234d0:\n    iVar4 = (*pcVar8)(param_1,iVar5,param_5);\n    if (iVar4 == -1) {\n      return 0xc;\n    }\n    iVar1 = (*pcVar7)(param_1[5] + iVar6,iVar4);\n    if (iVar1 == 0) {\n      return 0xc;\n    }\n    iVar4 = FUN_00023180(param_1,iVar5,iVar4,param_4,param_5);\n    if (iVar4 != 0) {\n      return iVar4;\n    }\nLAB_000233d0:\n    param_2 = *(int *)(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4);\n    param_3 = (*pcVar8)(param_1,param_2,param_5);\n    if (param_3 == -1) {\n      return 0xc;\n    }\n    iVar4 = (*pcVar7)(param_1[5] + iVar6,param_3);\n    if (iVar4 == 0) {\n      return 0xc;\n    }\n  } while( true );\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (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 "code *pcVar7;" (type_identifier "code") (pointer_declarator "*pcVar7" (* "*") (identifier "pcVar7")) (; ";")) (declaration "code *pcVar8;" (type_identifier "code") (pointer_declarator "*pcVar8" (* "*") (identifier "pcVar8")) (; ";")) (expression_statement "pcVar8 = (code *)(PTR_DAT_000471f4 + 0x309c);" (assignment_expression "pcVar8 = (code *)(PTR_DAT_000471f4 + 0x309c)" (identifier "pcVar8") (= "=") (cast_expression "(code *)(PTR_DAT_000471f4 + 0x309c)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_DAT_000471f4 + 0x309c)" (( "(") (binary_expression "PTR_DAT_000471f4 + 0x309c" (identifier "PTR_DAT_000471f4") (+ "+") (number_literal "0x309c")) () ")")))) (; ";")) (expression_statement "pcVar7 = (code *)(PTR_DAT_000471f4 + 0xb4);" (assignment_expression "pcVar7 = (code *)(PTR_DAT_000471f4 + 0xb4)" (identifier "pcVar7") (= "=") (cast_expression "(code *)(PTR_DAT_000471f4 + 0xb4)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_DAT_000471f4 + 0xb4)" (( "(") (binary_expression "PTR_DAT_000471f4 + 0xb4" (identifier "PTR_DAT_000471f4") (+ "+") (number_literal "0xb4")) () ")")))) (; ";")) (do_statement "do {\n    iVar4 = param_2 << 3;\n    while( true ) {\n      while (*(char *)(*param_1 + iVar4 + 4) == '\x04') {\n        iVar4 = param_2 * 4;\n        param_2 = *(int *)(param_1[3] + iVar4);\n        *(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0;\n        iVar1 = (*pcVar8)(param_1,param_2,param_5);\n        if (iVar1 == -1) {\n          return 0xc;\n        }\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar4);\n        iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1);\n        iVar4 = param_2 << 3;\n        param_3 = iVar1;\n        if (iVar2 == 0) {\n          return 0xc;\n        }\n      }\n      iVar1 = param_1[5];\n      iVar2 = iVar1 + param_2 * 0xc;\n      if (*(int *)(iVar2 + 4) == 0) {\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n        return 0;\n      }\n      if (*(int *)(iVar2 + 4) != 1) break;\n      iVar5 = **(int **)(iVar2 + 8);\n      iVar2 = param_3 * 0xc;\n      *(undefined4 *)(iVar1 + iVar2 + 4) = 0;\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | (uint)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16;\n      param_3 = (*pcVar8)(param_1,iVar5,param_5);\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      iVar4 = (*pcVar7)(param_1[5] + iVar2,param_3);\n      if (iVar4 == 0) {\n        return 0xc;\n      }\n      iVar4 = iVar5 << 3;\n      param_2 = iVar5;\n    }\n    iVar5 = **(int **)(iVar2 + 8);\n    iVar6 = param_3 * 0xc;\n    *(undefined4 *)(iVar1 + iVar6 + 4) = 0;\n    iVar2 = param_1[2];\n    iVar1 = iVar2 + -1;\n    iVar4 = *param_1 + iVar1 * 8;\n    if (((*(uint *)(iVar4 + 4) & 0x2000) != 0) && (0 < iVar1)) {\n      iVar3 = param_1[4] + iVar2 * 4;\n      iVar2 = (*param_1 + iVar2 * 8) - iVar4;\n      while ((iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)\n             )) {\n        iVar4 = iVar4 + iVar2 + -0x10;\n        iVar1 = iVar1 + -1;\n        if (((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))\n        goto LAB_000234d0;\n      }\n      if (iVar1 != -1) {\n        iVar4 = (*pcVar7)(param_1[5] + iVar6);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        goto LAB_000233d0;\n      }\n    }\nLAB_000234d0:\n    iVar4 = (*pcVar8)(param_1,iVar5,param_5);\n    if (iVar4 == -1) {\n      return 0xc;\n    }\n    iVar1 = (*pcVar7)(param_1[5] + iVar6,iVar4);\n    if (iVar1 == 0) {\n      return 0xc;\n    }\n    iVar4 = FUN_00023180(param_1,iVar5,iVar4,param_4,param_5);\n    if (iVar4 != 0) {\n      return iVar4;\n    }\nLAB_000233d0:\n    param_2 = *(int *)(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4);\n    param_3 = (*pcVar8)(param_1,param_2,param_5);\n    if (param_3 == -1) {\n      return 0xc;\n    }\n    iVar4 = (*pcVar7)(param_1[5] + iVar6,param_3);\n    if (iVar4 == 0) {\n      return 0xc;\n    }\n  } while( true );" (do "do") (compound_statement "{\n    iVar4 = param_2 << 3;\n    while( true ) {\n      while (*(char *)(*param_1 + iVar4 + 4) == '\x04') {\n        iVar4 = param_2 * 4;\n        param_2 = *(int *)(param_1[3] + iVar4);\n        *(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0;\n        iVar1 = (*pcVar8)(param_1,param_2,param_5);\n        if (iVar1 == -1) {\n          return 0xc;\n        }\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar4);\n        iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1);\n        iVar4 = param_2 << 3;\n        param_3 = iVar1;\n        if (iVar2 == 0) {\n          return 0xc;\n        }\n      }\n      iVar1 = param_1[5];\n      iVar2 = iVar1 + param_2 * 0xc;\n      if (*(int *)(iVar2 + 4) == 0) {\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n        return 0;\n      }\n      if (*(int *)(iVar2 + 4) != 1) break;\n      iVar5 = **(int **)(iVar2 + 8);\n      iVar2 = param_3 * 0xc;\n      *(undefined4 *)(iVar1 + iVar2 + 4) = 0;\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | (uint)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16;\n      param_3 = (*pcVar8)(param_1,iVar5,param_5);\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      iVar4 = (*pcVar7)(param_1[5] + iVar2,param_3);\n      if (iVar4 == 0) {\n        return 0xc;\n      }\n      iVar4 = iVar5 << 3;\n      param_2 = iVar5;\n    }\n    iVar5 = **(int **)(iVar2 + 8);\n    iVar6 = param_3 * 0xc;\n    *(undefined4 *)(iVar1 + iVar6 + 4) = 0;\n    iVar2 = param_1[2];\n    iVar1 = iVar2 + -1;\n    iVar4 = *param_1 + iVar1 * 8;\n    if (((*(uint *)(iVar4 + 4) & 0x2000) != 0) && (0 < iVar1)) {\n      iVar3 = param_1[4] + iVar2 * 4;\n      iVar2 = (*param_1 + iVar2 * 8) - iVar4;\n      while ((iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)\n             )) {\n        iVar4 = iVar4 + iVar2 + -0x10;\n        iVar1 = iVar1 + -1;\n        if (((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))\n        goto LAB_000234d0;\n      }\n      if (iVar1 != -1) {\n        iVar4 = (*pcVar7)(param_1[5] + iVar6);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        goto LAB_000233d0;\n      }\n    }\nLAB_000234d0:\n    iVar4 = (*pcVar8)(param_1,iVar5,param_5);\n    if (iVar4 == -1) {\n      return 0xc;\n    }\n    iVar1 = (*pcVar7)(param_1[5] + iVar6,iVar4);\n    if (iVar1 == 0) {\n      return 0xc;\n    }\n    iVar4 = FUN_00023180(param_1,iVar5,iVar4,param_4,param_5);\n    if (iVar4 != 0) {\n      return iVar4;\n    }\nLAB_000233d0:\n    param_2 = *(int *)(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4);\n    param_3 = (*pcVar8)(param_1,param_2,param_5);\n    if (param_3 == -1) {\n      return 0xc;\n    }\n    iVar4 = (*pcVar7)(param_1[5] + iVar6,param_3);\n    if (iVar4 == 0) {\n      return 0xc;\n    }\n  }" ({ "{") (expression_statement "iVar4 = param_2 << 3;" (assignment_expression "iVar4 = param_2 << 3" (identifier "iVar4") (= "=") (binary_expression "param_2 << 3" (identifier "param_2") (<< "<<") (number_literal "3"))) (; ";")) (while_statement "while( true ) {\n      while (*(char *)(*param_1 + iVar4 + 4) == '\x04') {\n        iVar4 = param_2 * 4;\n        param_2 = *(int *)(param_1[3] + iVar4);\n        *(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0;\n        iVar1 = (*pcVar8)(param_1,param_2,param_5);\n        if (iVar1 == -1) {\n          return 0xc;\n        }\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar4);\n        iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1);\n        iVar4 = param_2 << 3;\n        param_3 = iVar1;\n        if (iVar2 == 0) {\n          return 0xc;\n        }\n      }\n      iVar1 = param_1[5];\n      iVar2 = iVar1 + param_2 * 0xc;\n      if (*(int *)(iVar2 + 4) == 0) {\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n        return 0;\n      }\n      if (*(int *)(iVar2 + 4) != 1) break;\n      iVar5 = **(int **)(iVar2 + 8);\n      iVar2 = param_3 * 0xc;\n      *(undefined4 *)(iVar1 + iVar2 + 4) = 0;\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | (uint)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16;\n      param_3 = (*pcVar8)(param_1,iVar5,param_5);\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      iVar4 = (*pcVar7)(param_1[5] + iVar2,param_3);\n      if (iVar4 == 0) {\n        return 0xc;\n      }\n      iVar4 = iVar5 << 3;\n      param_2 = iVar5;\n    }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n      while (*(char *)(*param_1 + iVar4 + 4) == '\x04') {\n        iVar4 = param_2 * 4;\n        param_2 = *(int *)(param_1[3] + iVar4);\n        *(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0;\n        iVar1 = (*pcVar8)(param_1,param_2,param_5);\n        if (iVar1 == -1) {\n          return 0xc;\n        }\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar4);\n        iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1);\n        iVar4 = param_2 << 3;\n        param_3 = iVar1;\n        if (iVar2 == 0) {\n          return 0xc;\n        }\n      }\n      iVar1 = param_1[5];\n      iVar2 = iVar1 + param_2 * 0xc;\n      if (*(int *)(iVar2 + 4) == 0) {\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n        return 0;\n      }\n      if (*(int *)(iVar2 + 4) != 1) break;\n      iVar5 = **(int **)(iVar2 + 8);\n      iVar2 = param_3 * 0xc;\n      *(undefined4 *)(iVar1 + iVar2 + 4) = 0;\n      if ((param_2 == param_4) && (param_2 != param_3)) {\n        iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        return 0;\n      }\n      param_5 = param_5 | (uint)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16;\n      param_3 = (*pcVar8)(param_1,iVar5,param_5);\n      if (param_3 == -1) {\n        return 0xc;\n      }\n      iVar4 = (*pcVar7)(param_1[5] + iVar2,param_3);\n      if (iVar4 == 0) {\n        return 0xc;\n      }\n      iVar4 = iVar5 << 3;\n      param_2 = iVar5;\n    }" ({ "{") (while_statement "while (*(char *)(*param_1 + iVar4 + 4) == '\x04') {\n        iVar4 = param_2 * 4;\n        param_2 = *(int *)(param_1[3] + iVar4);\n        *(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0;\n        iVar1 = (*pcVar8)(param_1,param_2,param_5);\n        if (iVar1 == -1) {\n          return 0xc;\n        }\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar4);\n        iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1);\n        iVar4 = param_2 << 3;\n        param_3 = iVar1;\n        if (iVar2 == 0) {\n          return 0xc;\n        }\n      }" (while "while") (parenthesized_expression "(*(char *)(*param_1 + iVar4 + 4) == '\x04')" (( "(") (binary_expression "*(char *)(*param_1 + iVar4 + 4) == '\x04'" (pointer_expression "*(char *)(*param_1 + iVar4 + 4)" (* "*") (cast_expression "(char *)(*param_1 + iVar4 + 4)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + iVar4 + 4)" (( "(") (binary_expression "*param_1 + iVar4 + 4" (binary_expression "*param_1 + iVar4" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (identifier "iVar4")) (+ "+") (number_literal "4")) () ")")))) (== "==") (char_literal "'\x04'" (' "'") (escape_sequence "\x04") (' "'"))) () ")")) (compound_statement "{\n        iVar4 = param_2 * 4;\n        param_2 = *(int *)(param_1[3] + iVar4);\n        *(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0;\n        iVar1 = (*pcVar8)(param_1,param_2,param_5);\n        if (iVar1 == -1) {\n          return 0xc;\n        }\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar4);\n        iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1);\n        iVar4 = param_2 << 3;\n        param_3 = iVar1;\n        if (iVar2 == 0) {\n          return 0xc;\n        }\n      }" ({ "{") (expression_statement "iVar4 = param_2 * 4;" (assignment_expression "iVar4 = param_2 * 4" (identifier "iVar4") (= "=") (binary_expression "param_2 * 4" (identifier "param_2") (* "*") (number_literal "4"))) (; ";")) (expression_statement "param_2 = *(int *)(param_1[3] + iVar4);" (assignment_expression "param_2 = *(int *)(param_1[3] + iVar4)" (identifier "param_2") (= "=") (pointer_expression "*(int *)(param_1[3] + iVar4)" (* "*") (cast_expression "(int *)(param_1[3] + iVar4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[3] + iVar4)" (( "(") (binary_expression "param_1[3] + iVar4" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (+ "+") (identifier "iVar4")) () ")"))))) (; ";")) (expression_statement "*(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0;" (assignment_expression "*(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0" (pointer_expression "*(undefined4 *)(param_1[5] + param_3 * 0xc + 4)" (* "*") (cast_expression "(undefined4 *)(param_1[5] + param_3 * 0xc + 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[5] + param_3 * 0xc + 4)" (( "(") (binary_expression "param_1[5] + param_3 * 0xc + 4" (binary_expression "param_1[5] + param_3 * 0xc" (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")) (+ "+") (binary_expression "param_3 * 0xc" (identifier "param_3") (* "*") (number_literal "0xc"))) (+ "+") (number_literal "4")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar1 = (*pcVar8)(param_1,param_2,param_5);" (assignment_expression "iVar1 = (*pcVar8)(param_1,param_2,param_5)" (identifier "iVar1") (= "=") (call_expression "(*pcVar8)(param_1,param_2,param_5)" (parenthesized_expression "(*pcVar8)" (( "(") (pointer_expression "*pcVar8" (* "*") (identifier "pcVar8")) () ")")) (argument_list "(param_1,param_2,param_5)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (identifier "param_5") () ")")))) (; ";")) (if_statement "if (iVar1 == -1) {\n          return 0xc;\n        }" (if "if") (parenthesized_expression "(iVar1 == -1)" (( "(") (binary_expression "iVar1 == -1" (identifier "iVar1") (== "==") (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] + iVar4);" (assignment_expression "*(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar4)" (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] + iVar4)" (* "*") (cast_expression "(undefined4 *)(param_1[3] + iVar4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[3] + iVar4)" (( "(") (binary_expression "param_1[3] + iVar4" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (+ "+") (identifier "iVar4")) () ")"))))) (; ";")) (expression_statement "iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1);" (assignment_expression "iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1)" (identifier "iVar2") (= "=") (call_expression "(*pcVar7)(param_1[5] + param_3 * 0xc,iVar1)" (parenthesized_expression "(*pcVar7)" (( "(") (pointer_expression "*pcVar7" (* "*") (identifier "pcVar7")) () ")")) (argument_list "(param_1[5] + param_3 * 0xc,iVar1)" (( "(") (binary_expression "param_1[5] + param_3 * 0xc" (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")) (+ "+") (binary_expression "param_3 * 0xc" (identifier "param_3") (* "*") (number_literal "0xc"))) (, ",") (identifier "iVar1") () ")")))) (; ";")) (expression_statement "iVar4 = param_2 << 3;" (assignment_expression "iVar4 = param_2 << 3" (identifier "iVar4") (= "=") (binary_expression "param_2 << 3" (identifier "param_2") (<< "<<") (number_literal "3"))) (; ";")) (expression_statement "param_3 = iVar1;" (assignment_expression "param_3 = iVar1" (identifier "param_3") (= "=") (identifier "iVar1")) (; ";")) (if_statement "if (iVar2 == 0) {\n          return 0xc;\n        }" (if "if") (parenthesized_expression "(iVar2 == 0)" (( "(") (binary_expression "iVar2 == 0" (identifier "iVar2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          return 0xc;\n        }" ({ "{") (return_statement "return 0xc;" (return "return") (number_literal "0xc") (; ";")) (} "}"))) (} "}"))) (expression_statement "iVar1 = param_1[5];" (assignment_expression "iVar1 = param_1[5]" (identifier "iVar1") (= "=") (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]"))) (; ";")) (expression_statement "iVar2 = iVar1 + param_2 * 0xc;" (assignment_expression "iVar2 = iVar1 + param_2 * 0xc" (identifier "iVar2") (= "=") (binary_expression "iVar1 + param_2 * 0xc" (identifier "iVar1") (+ "+") (binary_expression "param_2 * 0xc" (identifier "param_2") (* "*") (number_literal "0xc")))) (; ";")) (if_statement "if (*(int *)(iVar2 + 4) == 0) {\n        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);\n        return 0;\n      }" (if "if") (parenthesized_expression "(*(int *)(iVar2 + 4) == 0)" (( "(") (binary_expression "*(int *)(iVar2 + 4) == 0" (pointer_expression "*(int *)(iVar2 + 4)" (* "*") (cast_expression "(int *)(iVar2 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 4)" (( "(") (binary_expression "iVar2 + 4" (identifier "iVar2") (+ "+") (number_literal "4")) () ")")))) (== "==") (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") (; ";")) (} "}"))) (if_statement "if (*(int *)(iVar2 + 4) != 1) break;" (if "if") (parenthesized_expression "(*(int *)(iVar2 + 4) != 1)" (( "(") (binary_expression "*(int *)(iVar2 + 4) != 1" (pointer_expression "*(int *)(iVar2 + 4)" (* "*") (cast_expression "(int *)(iVar2 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 4)" (( "(") (binary_expression "iVar2 + 4" (identifier "iVar2") (+ "+") (number_literal "4")) () ")")))) (!= "!=") (number_literal "1")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "iVar5 = **(int **)(iVar2 + 8);" (assignment_expression "iVar5 = **(int **)(iVar2 + 8)" (identifier "iVar5") (= "=") (pointer_expression "**(int **)(iVar2 + 8)" (* "*") (pointer_expression "*(int **)(iVar2 + 8)" (* "*") (cast_expression "(int **)(iVar2 + 8)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar2 + 8)" (( "(") (binary_expression "iVar2 + 8" (identifier "iVar2") (+ "+") (number_literal "8")) () ")")))))) (; ";")) (expression_statement "iVar2 = param_3 * 0xc;" (assignment_expression "iVar2 = param_3 * 0xc" (identifier "iVar2") (= "=") (binary_expression "param_3 * 0xc" (identifier "param_3") (* "*") (number_literal "0xc"))) (; ";")) (expression_statement "*(undefined4 *)(iVar1 + iVar2 + 4) = 0;" (assignment_expression "*(undefined4 *)(iVar1 + iVar2 + 4) = 0" (pointer_expression "*(undefined4 *)(iVar1 + iVar2 + 4)" (* "*") (cast_expression "(undefined4 *)(iVar1 + iVar2 + 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 + iVar2 + 4)" (( "(") (binary_expression "iVar1 + iVar2 + 4" (binary_expression "iVar1 + iVar2" (identifier "iVar1") (+ "+") (identifier "iVar2")) (+ "+") (number_literal "4")) () ")")))) (= "=") (number_literal "0")) (; ";")) (if_statement "if ((param_2 == param_4) && (param_2 != param_3)) {\n        iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5);\n        if (iVar4 == 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        iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        return 0;\n      }" ({ "{") (expression_statement "iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5);" (assignment_expression "iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5)" (identifier "iVar4") (= "=") (call_expression "FUN_000200b4(param_1[5] + iVar2,iVar5)" (identifier "FUN_000200b4") (argument_list "(param_1[5] + iVar2,iVar5)" (( "(") (binary_expression "param_1[5] + iVar2" (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")) (+ "+") (identifier "iVar2")) (, ",") (identifier "iVar5") () ")")))) (; ";")) (if_statement "if (iVar4 == 0) {\n          return 0xc;\n        }" (if "if") (parenthesized_expression "(iVar4 == 0)" (( "(") (binary_expression "iVar4 == 0" (identifier "iVar4") (== "==") (number_literal "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)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16;" (assignment_expression "param_5 = param_5 | (uint)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16" (identifier "param_5") (= "=") (binary_expression "param_5 | (uint)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16" (identifier "param_5") (| "|") (binary_expression "(uint)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16" (call_expression "(uint)(*(int *)(*param_1 + iVar4 + 4) << 8)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(*(int *)(*param_1 + iVar4 + 4) << 8)" (( "(") (binary_expression "*(int *)(*param_1 + iVar4 + 4) << 8" (pointer_expression "*(int *)(*param_1 + iVar4 + 4)" (* "*") (cast_expression "(int *)(*param_1 + iVar4 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + iVar4 + 4)" (( "(") (binary_expression "*param_1 + iVar4 + 4" (binary_expression "*param_1 + iVar4" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (identifier "iVar4")) (+ "+") (number_literal "4")) () ")")))) (<< "<<") (number_literal "8")) () ")"))) (>> ">>") (number_literal "0x16")))) (; ";")) (expression_statement "param_3 = (*pcVar8)(param_1,iVar5,param_5);" (assignment_expression "param_3 = (*pcVar8)(param_1,iVar5,param_5)" (identifier "param_3") (= "=") (call_expression "(*pcVar8)(param_1,iVar5,param_5)" (parenthesized_expression "(*pcVar8)" (( "(") (pointer_expression "*pcVar8" (* "*") (identifier "pcVar8")) () ")")) (argument_list "(param_1,iVar5,param_5)" (( "(") (identifier "param_1") (, ",") (identifier "iVar5") (, ",") (identifier "param_5") () ")")))) (; ";")) (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 "iVar4 = (*pcVar7)(param_1[5] + iVar2,param_3);" (assignment_expression "iVar4 = (*pcVar7)(param_1[5] + iVar2,param_3)" (identifier "iVar4") (= "=") (call_expression "(*pcVar7)(param_1[5] + iVar2,param_3)" (parenthesized_expression "(*pcVar7)" (( "(") (pointer_expression "*pcVar7" (* "*") (identifier "pcVar7")) () ")")) (argument_list "(param_1[5] + iVar2,param_3)" (( "(") (binary_expression "param_1[5] + iVar2" (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")) (+ "+") (identifier "iVar2")) (, ",") (identifier "param_3") () ")")))) (; ";")) (if_statement "if (iVar4 == 0) {\n        return 0xc;\n      }" (if "if") (parenthesized_expression "(iVar4 == 0)" (( "(") (binary_expression "iVar4 == 0" (identifier "iVar4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return 0xc;\n      }" ({ "{") (return_statement "return 0xc;" (return "return") (number_literal "0xc") (; ";")) (} "}"))) (expression_statement "iVar4 = iVar5 << 3;" (assignment_expression "iVar4 = iVar5 << 3" (identifier "iVar4") (= "=") (binary_expression "iVar5 << 3" (identifier "iVar5") (<< "<<") (number_literal "3"))) (; ";")) (expression_statement "param_2 = iVar5;" (assignment_expression "param_2 = iVar5" (identifier "param_2") (= "=") (identifier "iVar5")) (; ";")) (} "}"))) (expression_statement "iVar5 = **(int **)(iVar2 + 8);" (assignment_expression "iVar5 = **(int **)(iVar2 + 8)" (identifier "iVar5") (= "=") (pointer_expression "**(int **)(iVar2 + 8)" (* "*") (pointer_expression "*(int **)(iVar2 + 8)" (* "*") (cast_expression "(int **)(iVar2 + 8)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar2 + 8)" (( "(") (binary_expression "iVar2 + 8" (identifier "iVar2") (+ "+") (number_literal "8")) () ")")))))) (; ";")) (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 "*(undefined4 *)(iVar1 + iVar6 + 4) = 0;" (assignment_expression "*(undefined4 *)(iVar1 + iVar6 + 4) = 0" (pointer_expression "*(undefined4 *)(iVar1 + iVar6 + 4)" (* "*") (cast_expression "(undefined4 *)(iVar1 + iVar6 + 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 + iVar6 + 4)" (( "(") (binary_expression "iVar1 + iVar6 + 4" (binary_expression "iVar1 + iVar6" (identifier "iVar1") (+ "+") (identifier "iVar6")) (+ "+") (number_literal "4")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar2 = param_1[2];" (assignment_expression "iVar2 = param_1[2]" (identifier "iVar2") (= "=") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "iVar1 = iVar2 + -1;" (assignment_expression "iVar1 = iVar2 + -1" (identifier "iVar1") (= "=") (binary_expression "iVar2 + -1" (identifier "iVar2") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "iVar4 = *param_1 + iVar1 * 8;" (assignment_expression "iVar4 = *param_1 + iVar1 * 8" (identifier "iVar4") (= "=") (binary_expression "*param_1 + iVar1 * 8" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (binary_expression "iVar1 * 8" (identifier "iVar1") (* "*") (number_literal "8")))) (; ";")) (if_statement "if (((*(uint *)(iVar4 + 4) & 0x2000) != 0) && (0 < iVar1)) {\n      iVar3 = param_1[4] + iVar2 * 4;\n      iVar2 = (*param_1 + iVar2 * 8) - iVar4;\n      while ((iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)\n             )) {\n        iVar4 = iVar4 + iVar2 + -0x10;\n        iVar1 = iVar1 + -1;\n        if (((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))\n        goto LAB_000234d0;\n      }\n      if (iVar1 != -1) {\n        iVar4 = (*pcVar7)(param_1[5] + iVar6);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        goto LAB_000233d0;\n      }\n    }" (if "if") (parenthesized_expression "(((*(uint *)(iVar4 + 4) & 0x2000) != 0) && (0 < iVar1))" (( "(") (binary_expression "((*(uint *)(iVar4 + 4) & 0x2000) != 0) && (0 < iVar1)" (parenthesized_expression "((*(uint *)(iVar4 + 4) & 0x2000) != 0)" (( "(") (binary_expression "(*(uint *)(iVar4 + 4) & 0x2000) != 0" (parenthesized_expression "(*(uint *)(iVar4 + 4) & 0x2000)" (( "(") (binary_expression "*(uint *)(iVar4 + 4) & 0x2000" (pointer_expression "*(uint *)(iVar4 + 4)" (* "*") (cast_expression "(uint *)(iVar4 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 4)" (( "(") (binary_expression "iVar4 + 4" (identifier "iVar4") (+ "+") (number_literal "4")) () ")")))) (& "&") (number_literal "0x2000")) () ")")) (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(0 < iVar1)" (( "(") (binary_expression "0 < iVar1" (number_literal "0") (< "<") (identifier "iVar1")) () ")"))) () ")")) (compound_statement "{\n      iVar3 = param_1[4] + iVar2 * 4;\n      iVar2 = (*param_1 + iVar2 * 8) - iVar4;\n      while ((iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)\n             )) {\n        iVar4 = iVar4 + iVar2 + -0x10;\n        iVar1 = iVar1 + -1;\n        if (((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))\n        goto LAB_000234d0;\n      }\n      if (iVar1 != -1) {\n        iVar4 = (*pcVar7)(param_1[5] + iVar6);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        goto LAB_000233d0;\n      }\n    }" ({ "{") (expression_statement "iVar3 = param_1[4] + iVar2 * 4;" (assignment_expression "iVar3 = param_1[4] + iVar2 * 4" (identifier "iVar3") (= "=") (binary_expression "param_1[4] + iVar2 * 4" (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (+ "+") (binary_expression "iVar2 * 4" (identifier "iVar2") (* "*") (number_literal "4")))) (; ";")) (expression_statement "iVar2 = (*param_1 + iVar2 * 8) - iVar4;" (assignment_expression "iVar2 = (*param_1 + iVar2 * 8) - iVar4" (identifier "iVar2") (= "=") (binary_expression "(*param_1 + iVar2 * 8) - iVar4" (parenthesized_expression "(*param_1 + iVar2 * 8)" (( "(") (binary_expression "*param_1 + iVar2 * 8" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (binary_expression "iVar2 * 8" (identifier "iVar2") (* "*") (number_literal "8"))) () ")")) (- "-") (identifier "iVar4"))) (; ";")) (while_statement "while ((iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)\n             )) {\n        iVar4 = iVar4 + iVar2 + -0x10;\n        iVar1 = iVar1 + -1;\n        if (((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))\n        goto LAB_000234d0;\n      }" (while "while") (parenthesized_expression "((iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)\n             ))" (( "(") (parenthesized_expression "(iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)\n             )" (( "(") (binary_expression "iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)" (binary_expression "iVar5 != *(int *)(iVar3 + -4)" (identifier "iVar5") (!= "!=") (pointer_expression "*(int *)(iVar3 + -4)" (* "*") (cast_expression "(int *)(iVar3 + -4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + -4)" (( "(") (binary_expression "iVar3 + -4" (identifier "iVar3") (+ "+") (number_literal "-4")) () ")"))))) (|| "||") (parenthesized_expression "(param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)" (( "(") (binary_expression "param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16" (identifier "param_5") (!= "!=") (binary_expression "(uint)(*(int *)(iVar4 + 4) << 8) >> 0x16" (call_expression "(uint)(*(int *)(iVar4 + 4) << 8)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(*(int *)(iVar4 + 4) << 8)" (( "(") (binary_expression "*(int *)(iVar4 + 4) << 8" (pointer_expression "*(int *)(iVar4 + 4)" (* "*") (cast_expression "(int *)(iVar4 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 4)" (( "(") (binary_expression "iVar4 + 4" (identifier "iVar4") (+ "+") (number_literal "4")) () ")")))) (<< "<<") (number_literal "8")) () ")"))) (>> ">>") (number_literal "0x16"))) () ")"))) () ")")) () ")")) (compound_statement "{\n        iVar4 = iVar4 + iVar2 + -0x10;\n        iVar1 = iVar1 + -1;\n        if (((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))\n        goto LAB_000234d0;\n      }" ({ "{") (expression_statement "iVar4 = iVar4 + iVar2 + -0x10;" (assignment_expression "iVar4 = iVar4 + iVar2 + -0x10" (identifier "iVar4") (= "=") (binary_expression "iVar4 + iVar2 + -0x10" (binary_expression "iVar4 + iVar2" (identifier "iVar4") (+ "+") (identifier "iVar2")) (+ "+") (number_literal "-0x10"))) (; ";")) (expression_statement "iVar1 = iVar1 + -1;" (assignment_expression "iVar1 = iVar1 + -1" (identifier "iVar1") (= "=") (binary_expression "iVar1 + -1" (identifier "iVar1") (+ "+") (number_literal "-1"))) (; ";")) (if_statement "if (((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))\n        goto LAB_000234d0;" (if "if") (parenthesized_expression "(((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))" (( "(") (binary_expression "((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0)" (parenthesized_expression "((*(uint *)(iVar4 + 4) & 0x2000) == 0)" (( "(") (binary_expression "(*(uint *)(iVar4 + 4) & 0x2000) == 0" (parenthesized_expression "(*(uint *)(iVar4 + 4) & 0x2000)" (( "(") (binary_expression "*(uint *)(iVar4 + 4) & 0x2000" (pointer_expression "*(uint *)(iVar4 + 4)" (* "*") (cast_expression "(uint *)(iVar4 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 4)" (( "(") (binary_expression "iVar4 + 4" (identifier "iVar4") (+ "+") (number_literal "4")) () ")")))) (& "&") (number_literal "0x2000")) () ")")) (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(iVar3 = iVar3 + -4, iVar1 == 0)" (( "(") (comma_expression "iVar3 = iVar3 + -4, iVar1 == 0" (assignment_expression "iVar3 = iVar3 + -4" (identifier "iVar3") (= "=") (binary_expression "iVar3 + -4" (identifier "iVar3") (+ "+") (number_literal "-4"))) (, ",") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0"))) () ")"))) () ")")) (goto_statement "goto LAB_000234d0;" (goto "goto") (statement_identifier "LAB_000234d0") (; ";"))) (} "}"))) (if_statement "if (iVar1 != -1) {\n        iVar4 = (*pcVar7)(param_1[5] + iVar6);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        goto LAB_000233d0;\n      }" (if "if") (parenthesized_expression "(iVar1 != -1)" (( "(") (binary_expression "iVar1 != -1" (identifier "iVar1") (!= "!=") (number_literal "-1")) () ")")) (compound_statement "{\n        iVar4 = (*pcVar7)(param_1[5] + iVar6);\n        if (iVar4 == 0) {\n          return 0xc;\n        }\n        goto LAB_000233d0;\n      }" ({ "{") (expression_statement "iVar4 = (*pcVar7)(param_1[5] + iVar6);" (assignment_expression "iVar4 = (*pcVar7)(param_1[5] + iVar6)" (identifier "iVar4") (= "=") (call_expression "(*pcVar7)(param_1[5] + iVar6)" (parenthesized_expression "(*pcVar7)" (( "(") (pointer_expression "*pcVar7" (* "*") (identifier "pcVar7")) () ")")) (argument_list "(param_1[5] + iVar6)" (( "(") (binary_expression "param_1[5] + iVar6" (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")) (+ "+") (identifier "iVar6")) () ")")))) (; ";")) (if_statement "if (iVar4 == 0) {\n          return 0xc;\n        }" (if "if") (parenthesized_expression "(iVar4 == 0)" (( "(") (binary_expression "iVar4 == 0" (identifier "iVar4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          return 0xc;\n        }" ({ "{") (return_statement "return 0xc;" (return "return") (number_literal "0xc") (; ";")) (} "}"))) (goto_statement "goto LAB_000233d0;" (goto "goto") (statement_identifier "LAB_000233d0") (; ";")) (} "}"))) (} "}"))) (labeled_statement "LAB_000234d0:\n    iVar4 = (*pcVar8)(param_1,iVar5,param_5);" (statement_identifier "LAB_000234d0") (: ":") (expression_statement "iVar4 = (*pcVar8)(param_1,iVar5,param_5);" (assignment_expression "iVar4 = (*pcVar8)(param_1,iVar5,param_5)" (identifier "iVar4") (= "=") (call_expression "(*pcVar8)(param_1,iVar5,param_5)" (parenthesized_expression "(*pcVar8)" (( "(") (pointer_expression "*pcVar8" (* "*") (identifier "pcVar8")) () ")")) (argument_list "(param_1,iVar5,param_5)" (( "(") (identifier "param_1") (, ",") (identifier "iVar5") (, ",") (identifier "param_5") () ")")))) (; ";"))) (if_statement "if (iVar4 == -1) {\n      return 0xc;\n    }" (if "if") (parenthesized_expression "(iVar4 == -1)" (( "(") (binary_expression "iVar4 == -1" (identifier "iVar4") (== "==") (number_literal "-1")) () ")")) (compound_statement "{\n      return 0xc;\n    }" ({ "{") (return_statement "return 0xc;" (return "return") (number_literal "0xc") (; ";")) (} "}"))) (expression_statement "iVar1 = (*pcVar7)(param_1[5] + iVar6,iVar4);" (assignment_expression "iVar1 = (*pcVar7)(param_1[5] + iVar6,iVar4)" (identifier "iVar1") (= "=") (call_expression "(*pcVar7)(param_1[5] + iVar6,iVar4)" (parenthesized_expression "(*pcVar7)" (( "(") (pointer_expression "*pcVar7" (* "*") (identifier "pcVar7")) () ")")) (argument_list "(param_1[5] + iVar6,iVar4)" (( "(") (binary_expression "param_1[5] + iVar6" (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")) (+ "+") (identifier "iVar6")) (, ",") (identifier "iVar4") () ")")))) (; ";")) (if_statement "if (iVar1 == 0) {\n      return 0xc;\n    }" (if "if") (parenthesized_expression "(iVar1 == 0)" (( "(") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return 0xc;\n    }" ({ "{") (return_statement "return 0xc;" (return "return") (number_literal "0xc") (; ";")) (} "}"))) (expression_statement "iVar4 = FUN_00023180(param_1,iVar5,iVar4,param_4,param_5);" (assignment_expression "iVar4 = FUN_00023180(param_1,iVar5,iVar4,param_4,param_5)" (identifier "iVar4") (= "=") (call_expression "FUN_00023180(param_1,iVar5,iVar4,param_4,param_5)" (identifier "FUN_00023180") (argument_list "(param_1,iVar5,iVar4,param_4,param_5)" (( "(") (identifier "param_1") (, ",") (identifier "iVar5") (, ",") (identifier "iVar4") (, ",") (identifier "param_4") (, ",") (identifier "param_5") () ")")))) (; ";")) (if_statement "if (iVar4 != 0) {\n      return iVar4;\n    }" (if "if") (parenthesized_expression "(iVar4 != 0)" (( "(") (binary_expression "iVar4 != 0" (identifier "iVar4") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      return iVar4;\n    }" ({ "{") (return_statement "return iVar4;" (return "return") (identifier "iVar4") (; ";")) (} "}"))) (labeled_statement "LAB_000233d0:\n    param_2 = *(int *)(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4);" (statement_identifier "LAB_000233d0") (: ":") (expression_statement "param_2 = *(int *)(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4);" (assignment_expression "param_2 = *(int *)(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4)" (identifier "param_2") (= "=") (pointer_expression "*(int *)(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4)" (* "*") (cast_expression "(int *)(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4)" (( "(") (binary_expression "*(int *)(param_1[5] + param_2 * 0xc + 8) + 4" (pointer_expression "*(int *)(param_1[5] + param_2 * 0xc + 8)" (* "*") (cast_expression "(int *)(param_1[5] + param_2 * 0xc + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[5] + param_2 * 0xc + 8)" (( "(") (binary_expression "param_1[5] + param_2 * 0xc + 8" (binary_expression "param_1[5] + param_2 * 0xc" (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")) (+ "+") (binary_expression "param_2 * 0xc" (identifier "param_2") (* "*") (number_literal "0xc"))) (+ "+") (number_literal "8")) () ")")))) (+ "+") (number_literal "4")) () ")"))))) (; ";"))) (expression_statement "param_3 = (*pcVar8)(param_1,param_2,param_5);" (assignment_expression "param_3 = (*pcVar8)(param_1,param_2,param_5)" (identifier "param_3") (= "=") (call_expression "(*pcVar8)(param_1,param_2,param_5)" (parenthesized_expression "(*pcVar8)" (( "(") (pointer_expression "*pcVar8" (* "*") (identifier "pcVar8")) () ")")) (argument_list "(param_1,param_2,param_5)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (identifier "param_5") () ")")))) (; ";")) (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 "iVar4 = (*pcVar7)(param_1[5] + iVar6,param_3);" (assignment_expression "iVar4 = (*pcVar7)(param_1[5] + iVar6,param_3)" (identifier "iVar4") (= "=") (call_expression "(*pcVar7)(param_1[5] + iVar6,param_3)" (parenthesized_expression "(*pcVar7)" (( "(") (pointer_expression "*pcVar7" (* "*") (identifier "pcVar7")) () ")")) (argument_list "(param_1[5] + iVar6,param_3)" (( "(") (binary_expression "param_1[5] + iVar6" (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")) (+ "+") (identifier "iVar6")) (, ",") (identifier "param_3") () ")")))) (; ";")) (if_statement "if (iVar4 == 0) {\n      return 0xc;\n    }" (if "if") (parenthesized_expression "(iVar4 == 0)" (( "(") (binary_expression "iVar4 == 0" (identifier "iVar4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return 0xc;\n    }" ({ "{") (return_statement "return 0xc;" (return "return") (number_literal "0xc") (; ";")) (} "}"))) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";")) (} "}")))

type_1
function_1
          (type_2 *dfa,type_3 var_2,type_3 var_16,type_3 var_7,type_4 var_10)

{
  type_5 extraout_var;
  int var_6;
  type_6 _Var6;
  type_7 *prVar2;
  int var_4;
  int var_5;
  type_1 var_14;
  type_8 *prVar7;
  type_3 *var_13;
  int var_11;
  size_t var_12;
  int var_3;
  type_9 *pcVar12;
  type_9 *pcVar13;
  
  pcVar13 = (type_9 *)(var_1 + 0x309c);
  pcVar12 = (type_9 *)(var_1 + 0xb4);
  do {
    var_11 = var_2 << 3;
    var_4 = var_16;
    while( true ) {
      while ((&dfa->nodes->field_0x4)[var_11] == '\x04') {
        var_5 = dfa->nexts[var_2];
        dfa->edests[var_4].nelem = 0;
        var_3 = (*pcVar13)(dfa,var_5,var_10);
        if (var_3 == -1) {
          return _REG_ESPACE;
        }
        dfa->nexts[var_4] = dfa->nexts[var_2];
        var_6 = (*pcVar12)(dfa->edests + var_4,var_3);
        var_11 = var_5 << 3;
        var_2 = var_5;
        var_4 = var_3;
        if (var_6 == 0) {
          return _REG_ESPACE;
        }
      }
      prVar7 = dfa->edests;
      if (prVar7[var_2].nelem == 0) {
        dfa->nexts[var_4] = dfa->nexts[var_2];
        return var_15;
      }
      if (prVar7[var_2].nelem != 1) break;
      var_3 = *prVar7[var_2].elems;
      prVar7[var_4].nelem = 0;
      if ((var_2 == var_7) && (var_2 != var_4)) {
        _Var6 = var_8(dfa->edests + var_4,var_3);
        if (var_9(extraout_var,_Var6) == 0) {
          return _REG_ESPACE;
        }
        return var_15;
      }
      var_10 =
           var_10 | (type_4)(*(int *)(&dfa->nodes->field_0x4 + var_11) << 8) >> 0x16;
      var_5 = (*pcVar13)(dfa,var_3,var_10);
      if (var_5 == -1) {
        return _REG_ESPACE;
      }
      var_4 = (*pcVar12)(dfa->edests + var_4,var_5);
      if (var_4 == 0) {
        return _REG_ESPACE;
      }
      var_11 = var_3 << 3;
      var_2 = var_3;
      var_4 = var_5;
    }
    var_3 = *prVar7[var_2].elems;
    prVar7[var_4].nelem = 0;
    var_12 = dfa->nodes_len;
    var_11 = var_12 - 1;
    prVar2 = dfa->nodes + var_11;
    if (((*(type_4 *)&prVar2->field_0x4 & 0x2000) != 0) && (0 < var_11)) {
      var_13 = dfa->org_indices + var_12;
      var_5 = var_12 * 8 - (int)prVar2;
      while ((var_3 != var_13[-1] ||
             (var_10 != (type_4)(*(int *)&prVar2->field_0x4 << 8) >> 0x16))) {
        prVar2 = (type_7 *)((int)prVar2 + (int)dfa->nodes + var_5 + -0x10);
        var_11 = var_11 + -1;
        if (((*(type_4 *)&prVar2->field_0x4 & 0x2000) == 0) || (var_13 = var_13 + -1, var_11 == 0))
        goto LAB_000234d0;
      }
      if (var_11 != -1) {
        var_11 = (*pcVar12)(dfa->edests + var_4);
        if (var_11 == 0) {
          return _REG_ESPACE;
        }
        goto LAB_000233d0;
      }
    }
LAB_000234d0:
    var_11 = (*pcVar13)(dfa,var_3,var_10);
    if (var_11 == -1) {
      return _REG_ESPACE;
    }
    var_5 = (*pcVar12)(dfa->edests + var_4,var_11);
    if (var_5 == 0) {
      return _REG_ESPACE;
    }
    var_14 = function_1(dfa,var_3,var_11,var_7,var_10);
    if (var_14 != var_15) {
      return var_14;
    }
LAB_000233d0:
    var_2 = dfa->edests[var_2].elems[1];
    var_16 = (*pcVar13)(dfa,var_2,var_10);
    if (var_16 == -1) {
      return _REG_ESPACE;
    }
    var_4 = (*pcVar12)(dfa->edests + var_4,var_16);
    if (var_4 == 0) {
      return _REG_ESPACE;
    }
  } while( true );
}


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

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

{
  int iVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  code *pcVar7;
  code *pcVar8;
  
  pcVar8 = (code *)(PTR_DAT_000471f4 + 0x309c);
  pcVar7 = (code *)(PTR_DAT_000471f4 + 0xb4);
  do {
    iVar4 = param_2 << 3;
    while( true ) {
      while (*(char *)(*param_1 + iVar4 + 4) == '\x04') {
        iVar4 = param_2 * 4;
        param_2 = *(int *)(param_1[3] + iVar4);
        *(undefined4 *)(param_1[5] + param_3 * 0xc + 4) = 0;
        iVar1 = (*pcVar8)(param_1,param_2,param_5);
        if (iVar1 == -1) {
          return 0xc;
        }
        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + iVar4);
        iVar2 = (*pcVar7)(param_1[5] + param_3 * 0xc,iVar1);
        iVar4 = param_2 << 3;
        param_3 = iVar1;
        if (iVar2 == 0) {
          return 0xc;
        }
      }
      iVar1 = param_1[5];
      iVar2 = iVar1 + param_2 * 0xc;
      if (*(int *)(iVar2 + 4) == 0) {
        *(undefined4 *)(param_1[3] + param_3 * 4) = *(undefined4 *)(param_1[3] + param_2 * 4);
        return 0;
      }
      if (*(int *)(iVar2 + 4) != 1) break;
      iVar5 = **(int **)(iVar2 + 8);
      iVar2 = param_3 * 0xc;
      *(undefined4 *)(iVar1 + iVar2 + 4) = 0;
      if ((param_2 == param_4) && (param_2 != param_3)) {
        iVar4 = FUN_000200b4(param_1[5] + iVar2,iVar5);
        if (iVar4 == 0) {
          return 0xc;
        }
        return 0;
      }
      param_5 = param_5 | (uint)(*(int *)(*param_1 + iVar4 + 4) << 8) >> 0x16;
      param_3 = (*pcVar8)(param_1,iVar5,param_5);
      if (param_3 == -1) {
        return 0xc;
      }
      iVar4 = (*pcVar7)(param_1[5] + iVar2,param_3);
      if (iVar4 == 0) {
        return 0xc;
      }
      iVar4 = iVar5 << 3;
      param_2 = iVar5;
    }
    iVar5 = **(int **)(iVar2 + 8);
    iVar6 = param_3 * 0xc;
    *(undefined4 *)(iVar1 + iVar6 + 4) = 0;
    iVar2 = param_1[2];
    iVar1 = iVar2 + -1;
    iVar4 = *param_1 + iVar1 * 8;
    if (((*(uint *)(iVar4 + 4) & 0x2000) != 0) && (0 < iVar1)) {
      iVar3 = param_1[4] + iVar2 * 4;
      iVar2 = (*param_1 + iVar2 * 8) - iVar4;
      while ((iVar5 != *(int *)(iVar3 + -4) || (param_5 != (uint)(*(int *)(iVar4 + 4) << 8) >> 0x16)
             )) {
        iVar4 = iVar4 + iVar2 + -0x10;
        iVar1 = iVar1 + -1;
        if (((*(uint *)(iVar4 + 4) & 0x2000) == 0) || (iVar3 = iVar3 + -4, iVar1 == 0))
        goto LAB_000234d0;
      }
      if (iVar1 != -1) {
        iVar4 = (*pcVar7)(param_1[5] + iVar6);
        if (iVar4 == 0) {
          return 0xc;
        }
        goto LAB_000233d0;
      }
    }
LAB_000234d0:
    iVar4 = (*pcVar8)(param_1,iVar5,param_5);
    if (iVar4 == -1) {
      return 0xc;
    }
    iVar1 = (*pcVar7)(param_1[5] + iVar6,iVar4);
    if (iVar1 == 0) {
      return 0xc;
    }
    iVar4 = MASKED(param_1,iVar5,iVar4,param_4,param_5);
    if (iVar4 != 0) {
      return iVar4;
    }
LAB_000233d0:
    param_2 = *(int *)(*(int *)(param_1[5] + param_2 * 0xc + 8) + 4);
    param_3 = (*pcVar8)(param_1,param_2,param_5);
    if (param_3 == -1) {
      return 0xc;
    }
    iVar4 = (*pcVar7)(param_1[5] + iVar6,param_3);
    if (iVar4 == 0) {
      return 0xc;
    }
  } while( true );
}

