
re_dfastate_t * re_acquire_state(reg_errcode_t *err,re_dfa_t *dfa,re_node_set *nodes)

{
  char cVar1;
  byte bVar2;
  byte bVar3;
  int *piVar4;
  uint uVar5;
  reg_errcode_t rVar6;
  int iVar7;
  int *piVar8;
  re_dfastate_t **pprVar9;
  re_token_t *prVar10;
  int iVar11;
  uint uVar12;
  re_dfastate_t *prVar13;
  uint hash;
  
  uVar12 = nodes->nelem;
  if (uVar12 == 0) {
    *err = _REG_NOERROR;
  }
  else {
    hash = uVar12;
    if (0 < (int)uVar12) {
      piVar4 = nodes->elems;
      piVar8 = piVar4 + uVar12;
      do {
        iVar7 = *piVar4;
        piVar4 = piVar4 + 1;
        hash = hash + iVar7;
      } while (piVar8 != piVar4);
    }
    iVar11 = dfa->state_table[hash & dfa->state_hash_mask].num;
    iVar7 = 0;
    if (0 < iVar11) {
      pprVar9 = dfa->state_table[hash & dfa->state_hash_mask].array;
LAB_00022394:
      do {
        prVar13 = *pprVar9;
        if (prVar13->hash == hash) {
          uVar5 = (prVar13->nodes).nelem;
          if (uVar12 != uVar5) {
            iVar7 = iVar7 + 1;
            pprVar9 = pprVar9 + 1;
            if (iVar7 == iVar11) break;
            goto LAB_00022394;
          }
          do {
            uVar5 = uVar5 - 1;
            if ((int)uVar5 < 0) {
              return prVar13;
            }
          } while ((prVar13->nodes).elems[uVar5] == nodes->elems[uVar5]);
        }
        iVar7 = iVar7 + 1;
        pprVar9 = pprVar9 + 1;
      } while (iVar7 != iVar11);
    }
    prVar13 = (re_dfastate_t *)(*(code *)PTR_calloc_0004529c)(0x38,1);
    if (prVar13 != (re_dfastate_t *)0x0) {
      rVar6 = re_node_set_init_copy(&prVar13->nodes,nodes);
      if (rVar6 == _REG_NOERROR) {
        iVar7 = nodes->nelem;
        prVar13->entrance_nodes = &prVar13->nodes;
        if (0 < iVar7) {
          piVar4 = nodes->elems;
          prVar10 = dfa->nodes;
          piVar8 = piVar4 + iVar7;
          do {
            while( true ) {
              iVar7 = *piVar4;
              cVar1 = prVar10[iVar7].field_0x4;
              if (cVar1 == '\x01') break;
              uVar12 = *(uint *)&prVar10[iVar7].field_0x4;
              bVar2 = prVar13->field_0x34;
              bVar3 = (byte)(((*(int *)&prVar13->field_0x34 << 5 | uVar12 << 0x14) >> 0x1f) << 2);
              prVar13->field_0x34 = bVar2 & 0xfb | bVar3;
              if (cVar1 == '\x02') {
                prVar13->field_0x34 = bVar2 & 0xf3 | bVar3 | 8;
              }
              else if (cVar1 == '\x04') {
                prVar13->field_0x34 = bVar2 & 0xf9 | bVar3 | 2;
              }
              else {
                if (cVar1 == '\f') goto LAB_000224b8;
                if ((uVar12 & 0xffc000) != 0) {
                  bVar2 = prVar13->field_0x34;
                  goto LAB_000224bc;
                }
              }
LAB_00022470:
              piVar4 = piVar4 + 1;
              if (piVar8 == piVar4) goto LAB_000224d0;
            }
            if ((*(uint *)&prVar10[iVar7].field_0x4 & 0xffc000) == 0) goto LAB_00022470;
            prVar13->field_0x34 =
                 prVar13->field_0x34 & 0xfb |
                 (byte)(((*(int *)&prVar13->field_0x34 << 5 |
                         *(uint *)&prVar10[iVar7].field_0x4 << 0x14) >> 0x1f) << 2);
LAB_000224b8:
            bVar2 = prVar13->field_0x34;
LAB_000224bc:
            piVar4 = piVar4 + 1;
            prVar13->field_0x34 = bVar2 & 0xfe | 1;
          } while (piVar8 != piVar4);
        }
LAB_000224d0:
        rVar6 = register_state(dfa,prVar13,hash);
        if (rVar6 == _REG_NOERROR) {
          return prVar13;
        }
        free_state(prVar13);
      }
      else {
        (*(code *)PTR_free_000453bc)(prVar13);
      }
    }
    *err = _REG_ESPACE;
  }
  return (re_dfastate_t *)0x0;
}



uint * FUN_000222fc(undefined4 *param_1,int *param_2,int param_3)

{
  char cVar1;
  byte bVar2;
  byte bVar3;
  int *piVar4;
  uint uVar5;
  int iVar6;
  int *piVar7;
  undefined4 *puVar8;
  int iVar9;
  uint uVar10;
  uint *puVar11;
  uint uVar12;
  
  uVar10 = *(uint *)(param_3 + 4);
  if (uVar10 == 0) {
    *param_1 = 0;
  }
  else {
    uVar12 = uVar10;
    if (0 < (int)uVar10) {
      piVar4 = *(int **)(param_3 + 8);
      piVar7 = piVar4 + uVar10;
      do {
        iVar6 = *piVar4;
        piVar4 = piVar4 + 1;
        uVar12 = uVar12 + iVar6;
      } while (piVar7 != piVar4);
    }
    piVar4 = (int *)(param_2[8] + (uVar12 & param_2[0x11]) * 0xc);
    iVar9 = *piVar4;
    iVar6 = 0;
    if (0 < iVar9) {
      puVar8 = (undefined4 *)piVar4[2];
LAB_00022394:
      do {
        puVar11 = (uint *)*puVar8;
        if (*puVar11 == uVar12) {
          uVar5 = puVar11[2];
          if (uVar10 != uVar5) {
            iVar6 = iVar6 + 1;
            puVar8 = puVar8 + 1;
            if (iVar6 == iVar9) break;
            goto LAB_00022394;
          }
          do {
            uVar5 = uVar5 - 1;
            if ((int)uVar5 < 0) {
              return puVar11;
            }
          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));
        }
        iVar6 = iVar6 + 1;
        puVar8 = puVar8 + 1;
      } while (iVar6 != iVar9);
    }
    puVar11 = (uint *)(*(code *)PTR_calloc_0004529c)(0x38,1);
    if (puVar11 != (uint *)0x0) {
      iVar6 = FUN_00021c20(puVar11 + 1,param_3);
      if (iVar6 == 0) {
        iVar6 = *(int *)(param_3 + 4);
        puVar11[10] = (uint)(puVar11 + 1);
        if (0 < iVar6) {
          piVar4 = *(int **)(param_3 + 8);
          iVar9 = *param_2;
          piVar7 = piVar4 + iVar6;
          do {
            while( true ) {
              iVar6 = iVar9 + *piVar4 * 8;
              cVar1 = *(char *)(iVar6 + 4);
              if (cVar1 == '\x01') break;
              uVar10 = *(uint *)(iVar6 + 4);
              bVar2 = *(byte *)(puVar11 + 0xd);
              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);
              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;
              if (cVar1 == '\x02') {
                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;
              }
              else if (cVar1 == '\x04') {
                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;
              }
              else {
                if (cVar1 == '\f') goto LAB_000224b8;
                if ((uVar10 & 0xffc000) != 0) {
                  bVar2 = *(byte *)(puVar11 + 0xd);
                  goto LAB_000224bc;
                }
              }
LAB_00022470:
              piVar4 = piVar4 + 1;
              if (piVar7 == piVar4) goto LAB_000224d0;
            }
            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;
            *(byte *)(puVar11 + 0xd) =
                 *(byte *)(puVar11 + 0xd) & 0xfb |
                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);
LAB_000224b8:
            bVar2 = *(byte *)(puVar11 + 0xd);
LAB_000224bc:
            piVar4 = piVar4 + 1;
            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;
          } while (piVar7 != piVar4);
        }
LAB_000224d0:
        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);
        if (iVar6 == 0) {
          return puVar11;
        }
        FUN_0001fecc(puVar11);
      }
      else {
        (*(code *)PTR_free_000453bc)(puVar11);
      }
    }
    *param_1 = 0xc;
  }
  return (uint *)0x0;
}


lui gp,0x3
addiu gp,gp,-0x51fc
addu gp,gp,t9
addiu sp,sp,-0x38
lw t4,0x4(a2)
sw gp,0x10(sp)
sw ra,0x34(sp)
sw s5,0x30(sp)
sw s4,0x2c(sp)
sw s3,0x28(sp)
sw s2,0x24(sp)
sw s1,0x20(sp)
beq t4,zero,0x000225b0
_sw s0,0x1c(sp)
blez t4,0x00022358
_or s1,t4,zero
lw v0,0x8(a2)
sll a3,t4,0x2
addu a3,a3,v0
lw v1,0x0(v0)
addiu v0,v0,0x4
bne a3,v0,0x00022348
_addu s1,s1,v1
lw v0,0x44(a1)
lw a3,0x20(a1)
and v1,s1,v0
sll v0,v1,0x1
addu v0,v0,v1
sll v0,v0,0x2
addu v0,a3,v0
lw t3,0x0(v0)
blez t3,0x000223bc
_or t2,zero,zero
b 0x00022394
_lw t1,0x8(v0)
addiu t2,t2,0x1
beq t2,t3,0x000223bc
_addiu t1,t1,0x4
lw s0,0x0(t1)
lw v0,0x0(s0)
bne v0,s1,0x00022388
_nop
lw v0,0x8(s0)
beq t4,v0,0x00022534
_addiu v0,v0,-0x1
addiu t2,t2,0x1
bne t2,t3,0x00022394
_addiu t1,t1,0x4
lw t9,-0x7e64(gp)
or s2,a1,zero
or s3,a0,zero
li a1,0x1
li a0,0x38
jalr t9
_or s4,a2,zero
lw gp,0x10(sp)
beq v0,zero,0x000225a0
_or s0,v0,zero
lw t9,-0x7f0c(gp)
addiu s5,v0,0x4
or a1,s4,zero
addiu t9,t9,0x1c20
bal 0x00021c20
_or a0,s5,zero
bne v0,zero,0x000225bc
_lw gp,0x10(sp)
lw t0,0x4(s4)
blez t0,0x000224cc
_sw s5,0x28(s0)
lw v1,0x8(s4)
sll t0,t0,0x2
lui t2,0xff
lw t1,0x0(s2)
li a2,0x1
addu t0,t0,v1
li t3,0x2
li t4,0x4
li t5,0xc
b 0x00022478
_ori t2,t2,0xc000
lw a3,0x4(v0)
lw a0,0x34(s0)
lbu v0,0x34(s0)
ext t6,a3,0xb,0x1
ext a0,a0,0x1a,0x1
or a0,a0,t6
ins v0,a0,0x2,0x1
beq a1,t3,0x00022564
_sb v0,0x34(s0)
bne a1,t4,0x00022570
_ins v0,a2,0x1,0x1
sb v0,0x34(s0)
addiu v1,v1,0x4
beq t0,v1,0x000224d0
_lw t9,-0x7f0c(gp)
lw v0,0x0(v1)
sll v0,v0,0x3
addu v0,t1,v0
lbu a1,0x4(v0)
bne a1,a2,0x0002243c
_nop
lw a0,0x4(v0)
and v0,a0,t2
beq v0,zero,0x0002246c
_ext a0,a0,0xb,0x1
lw v0,0x34(s0)
lbu a1,0x34(s0)
ext v0,v0,0x1a,0x1
or v0,v0,a0
ins a1,v0,0x2,0x1
sb a1,0x34(s0)
lbu v0,0x34(s0)
addiu v1,v1,0x4
ins v0,a2,0x0,0x1
bne t0,v1,0x00022478
_sb v0,0x34(s0)
lw t9,-0x7f0c(gp)
or a2,s1,zero
or a1,s0,zero
addiu t9,t9,-0x181c
bal 0x0001e7e4
_or a0,s2,zero
bne v0,zero,0x00022590
_lw gp,0x10(sp)
lw ra,0x34(sp)
or v0,s0,zero
lw s5,0x30(sp)
lw s4,0x2c(sp)
lw s3,0x28(sp)
lw s2,0x24(sp)
lw s1,0x20(sp)
lw s0,0x1c(sp)
jr ra
_addiu sp,sp,0x38
lw a3,0xc(s0)
lw v1,0x8(a2)
addu a3,a3,t0
addu v1,v1,t0
lw a3,0x0(a3)
lw v1,0x0(v1)
bne a3,v1,0x00022388
_addiu v0,v0,-0x1
bgez v0,0x00022514
_sll t0,v0,0x2
lw ra,0x34(sp)
or v0,s0,zero
lw s5,0x30(sp)
lw s4,0x2c(sp)
lw s3,0x28(sp)
lw s2,0x24(sp)
lw s1,0x20(sp)
lw s0,0x1c(sp)
jr ra
_addiu sp,sp,0x38
ins v0,a2,0x3,0x1
b 0x0002246c
_sb v0,0x34(s0)
beq a1,t5,0x000224b8
_nop
and a3,a3,t2
beq a3,zero,0x00022470
_addiu v1,v1,0x4
addiu v1,v1,-0x4
b 0x000224bc
_lbu v0,0x34(s0)
lw t9,-0x7f0c(gp)
addiu t9,t9,-0x134
bal 0x0001fecc
_or a0,s0,zero
li v0,0xc
or s0,zero,zero
b 0x000224ec
_sw v0,0x0(s3)
sw zero,0x0(a0)
b 0x000224ec
_or s0,zero,zero
lw t9,-0x7d44(gp)
jalr t9
_or a0,s0,zero
b 0x000225a4
_li v0,0xc
(translation_unit "uint * FUN_000222fc(undefined4 *param_1,int *param_2,int param_3)\n\n{\n  char cVar1;\n  byte bVar2;\n  byte bVar3;\n  int *piVar4;\n  uint uVar5;\n  int iVar6;\n  int *piVar7;\n  undefined4 *puVar8;\n  int iVar9;\n  uint uVar10;\n  uint *puVar11;\n  uint uVar12;\n  \n  uVar10 = *(uint *)(param_3 + 4);\n  if (uVar10 == 0) {\n    *param_1 = 0;\n  }\n  else {\n    uVar12 = uVar10;\n    if (0 < (int)uVar10) {\n      piVar4 = *(int **)(param_3 + 8);\n      piVar7 = piVar4 + uVar10;\n      do {\n        iVar6 = *piVar4;\n        piVar4 = piVar4 + 1;\n        uVar12 = uVar12 + iVar6;\n      } while (piVar7 != piVar4);\n    }\n    piVar4 = (int *)(param_2[8] + (uVar12 & param_2[0x11]) * 0xc);\n    iVar9 = *piVar4;\n    iVar6 = 0;\n    if (0 < iVar9) {\n      puVar8 = (undefined4 *)piVar4[2];\nLAB_00022394:\n      do {\n        puVar11 = (uint *)*puVar8;\n        if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }\n        iVar6 = iVar6 + 1;\n        puVar8 = puVar8 + 1;\n      } while (iVar6 != iVar9);\n    }\n    puVar11 = (uint *)(*(code *)PTR_calloc_0004529c)(0x38,1);\n    if (puVar11 != (uint *)0x0) {\n      iVar6 = FUN_00021c20(puVar11 + 1,param_3);\n      if (iVar6 == 0) {\n        iVar6 = *(int *)(param_3 + 4);\n        puVar11[10] = (uint)(puVar11 + 1);\n        if (0 < iVar6) {\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }\nLAB_000224d0:\n        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);\n        if (iVar6 == 0) {\n          return puVar11;\n        }\n        FUN_0001fecc(puVar11);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(puVar11);\n      }\n    }\n    *param_1 = 0xc;\n  }\n  return (uint *)0x0;\n}\n\n" (function_definition "uint * FUN_000222fc(undefined4 *param_1,int *param_2,int param_3)\n\n{\n  char cVar1;\n  byte bVar2;\n  byte bVar3;\n  int *piVar4;\n  uint uVar5;\n  int iVar6;\n  int *piVar7;\n  undefined4 *puVar8;\n  int iVar9;\n  uint uVar10;\n  uint *puVar11;\n  uint uVar12;\n  \n  uVar10 = *(uint *)(param_3 + 4);\n  if (uVar10 == 0) {\n    *param_1 = 0;\n  }\n  else {\n    uVar12 = uVar10;\n    if (0 < (int)uVar10) {\n      piVar4 = *(int **)(param_3 + 8);\n      piVar7 = piVar4 + uVar10;\n      do {\n        iVar6 = *piVar4;\n        piVar4 = piVar4 + 1;\n        uVar12 = uVar12 + iVar6;\n      } while (piVar7 != piVar4);\n    }\n    piVar4 = (int *)(param_2[8] + (uVar12 & param_2[0x11]) * 0xc);\n    iVar9 = *piVar4;\n    iVar6 = 0;\n    if (0 < iVar9) {\n      puVar8 = (undefined4 *)piVar4[2];\nLAB_00022394:\n      do {\n        puVar11 = (uint *)*puVar8;\n        if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }\n        iVar6 = iVar6 + 1;\n        puVar8 = puVar8 + 1;\n      } while (iVar6 != iVar9);\n    }\n    puVar11 = (uint *)(*(code *)PTR_calloc_0004529c)(0x38,1);\n    if (puVar11 != (uint *)0x0) {\n      iVar6 = FUN_00021c20(puVar11 + 1,param_3);\n      if (iVar6 == 0) {\n        iVar6 = *(int *)(param_3 + 4);\n        puVar11[10] = (uint)(puVar11 + 1);\n        if (0 < iVar6) {\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }\nLAB_000224d0:\n        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);\n        if (iVar6 == 0) {\n          return puVar11;\n        }\n        FUN_0001fecc(puVar11);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(puVar11);\n      }\n    }\n    *param_1 = 0xc;\n  }\n  return (uint *)0x0;\n}" type_identifier (pointer_declarator "* FUN_000222fc(undefined4 *param_1,int *param_2,int param_3)" * (function_declarator "FUN_000222fc(undefined4 *param_1,int *param_2,int param_3)" identifier (parameter_list "(undefined4 *param_1,int *param_2,int param_3)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) )))) (compound_statement "{\n  char cVar1;\n  byte bVar2;\n  byte bVar3;\n  int *piVar4;\n  uint uVar5;\n  int iVar6;\n  int *piVar7;\n  undefined4 *puVar8;\n  int iVar9;\n  uint uVar10;\n  uint *puVar11;\n  uint uVar12;\n  \n  uVar10 = *(uint *)(param_3 + 4);\n  if (uVar10 == 0) {\n    *param_1 = 0;\n  }\n  else {\n    uVar12 = uVar10;\n    if (0 < (int)uVar10) {\n      piVar4 = *(int **)(param_3 + 8);\n      piVar7 = piVar4 + uVar10;\n      do {\n        iVar6 = *piVar4;\n        piVar4 = piVar4 + 1;\n        uVar12 = uVar12 + iVar6;\n      } while (piVar7 != piVar4);\n    }\n    piVar4 = (int *)(param_2[8] + (uVar12 & param_2[0x11]) * 0xc);\n    iVar9 = *piVar4;\n    iVar6 = 0;\n    if (0 < iVar9) {\n      puVar8 = (undefined4 *)piVar4[2];\nLAB_00022394:\n      do {\n        puVar11 = (uint *)*puVar8;\n        if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }\n        iVar6 = iVar6 + 1;\n        puVar8 = puVar8 + 1;\n      } while (iVar6 != iVar9);\n    }\n    puVar11 = (uint *)(*(code *)PTR_calloc_0004529c)(0x38,1);\n    if (puVar11 != (uint *)0x0) {\n      iVar6 = FUN_00021c20(puVar11 + 1,param_3);\n      if (iVar6 == 0) {\n        iVar6 = *(int *)(param_3 + 4);\n        puVar11[10] = (uint)(puVar11 + 1);\n        if (0 < iVar6) {\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }\nLAB_000224d0:\n        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);\n        if (iVar6 == 0) {\n          return puVar11;\n        }\n        FUN_0001fecc(puVar11);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(puVar11);\n      }\n    }\n    *param_1 = 0xc;\n  }\n  return (uint *)0x0;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "int *piVar4;" primitive_type (pointer_declarator "*piVar4" * identifier) ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int *piVar7;" primitive_type (pointer_declarator "*piVar7" * identifier) ;) (declaration "undefined4 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "int iVar9;" primitive_type identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uint *puVar11;" type_identifier (pointer_declarator "*puVar11" * identifier) ;) (declaration "uint uVar12;" type_identifier identifier ;) (expression_statement "uVar10 = *(uint *)(param_3 + 4);" (assignment_expression "uVar10 = *(uint *)(param_3 + 4)" identifier = (pointer_expression "*(uint *)(param_3 + 4)" * (cast_expression "(uint *)(param_3 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) ))))) ;) (if_statement "if (uVar10 == 0) {\n    *param_1 = 0;\n  }\n  else {\n    uVar12 = uVar10;\n    if (0 < (int)uVar10) {\n      piVar4 = *(int **)(param_3 + 8);\n      piVar7 = piVar4 + uVar10;\n      do {\n        iVar6 = *piVar4;\n        piVar4 = piVar4 + 1;\n        uVar12 = uVar12 + iVar6;\n      } while (piVar7 != piVar4);\n    }\n    piVar4 = (int *)(param_2[8] + (uVar12 & param_2[0x11]) * 0xc);\n    iVar9 = *piVar4;\n    iVar6 = 0;\n    if (0 < iVar9) {\n      puVar8 = (undefined4 *)piVar4[2];\nLAB_00022394:\n      do {\n        puVar11 = (uint *)*puVar8;\n        if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }\n        iVar6 = iVar6 + 1;\n        puVar8 = puVar8 + 1;\n      } while (iVar6 != iVar9);\n    }\n    puVar11 = (uint *)(*(code *)PTR_calloc_0004529c)(0x38,1);\n    if (puVar11 != (uint *)0x0) {\n      iVar6 = FUN_00021c20(puVar11 + 1,param_3);\n      if (iVar6 == 0) {\n        iVar6 = *(int *)(param_3 + 4);\n        puVar11[10] = (uint)(puVar11 + 1);\n        if (0 < iVar6) {\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }\nLAB_000224d0:\n        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);\n        if (iVar6 == 0) {\n          return puVar11;\n        }\n        FUN_0001fecc(puVar11);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(puVar11);\n      }\n    }\n    *param_1 = 0xc;\n  }" if (parenthesized_expression "(uVar10 == 0)" ( (binary_expression "uVar10 == 0" identifier == number_literal) )) (compound_statement "{\n    *param_1 = 0;\n  }" { (expression_statement "*param_1 = 0;" (assignment_expression "*param_1 = 0" (pointer_expression "*param_1" * identifier) = number_literal) ;) }) (else_clause "else {\n    uVar12 = uVar10;\n    if (0 < (int)uVar10) {\n      piVar4 = *(int **)(param_3 + 8);\n      piVar7 = piVar4 + uVar10;\n      do {\n        iVar6 = *piVar4;\n        piVar4 = piVar4 + 1;\n        uVar12 = uVar12 + iVar6;\n      } while (piVar7 != piVar4);\n    }\n    piVar4 = (int *)(param_2[8] + (uVar12 & param_2[0x11]) * 0xc);\n    iVar9 = *piVar4;\n    iVar6 = 0;\n    if (0 < iVar9) {\n      puVar8 = (undefined4 *)piVar4[2];\nLAB_00022394:\n      do {\n        puVar11 = (uint *)*puVar8;\n        if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }\n        iVar6 = iVar6 + 1;\n        puVar8 = puVar8 + 1;\n      } while (iVar6 != iVar9);\n    }\n    puVar11 = (uint *)(*(code *)PTR_calloc_0004529c)(0x38,1);\n    if (puVar11 != (uint *)0x0) {\n      iVar6 = FUN_00021c20(puVar11 + 1,param_3);\n      if (iVar6 == 0) {\n        iVar6 = *(int *)(param_3 + 4);\n        puVar11[10] = (uint)(puVar11 + 1);\n        if (0 < iVar6) {\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }\nLAB_000224d0:\n        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);\n        if (iVar6 == 0) {\n          return puVar11;\n        }\n        FUN_0001fecc(puVar11);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(puVar11);\n      }\n    }\n    *param_1 = 0xc;\n  }" else (compound_statement "{\n    uVar12 = uVar10;\n    if (0 < (int)uVar10) {\n      piVar4 = *(int **)(param_3 + 8);\n      piVar7 = piVar4 + uVar10;\n      do {\n        iVar6 = *piVar4;\n        piVar4 = piVar4 + 1;\n        uVar12 = uVar12 + iVar6;\n      } while (piVar7 != piVar4);\n    }\n    piVar4 = (int *)(param_2[8] + (uVar12 & param_2[0x11]) * 0xc);\n    iVar9 = *piVar4;\n    iVar6 = 0;\n    if (0 < iVar9) {\n      puVar8 = (undefined4 *)piVar4[2];\nLAB_00022394:\n      do {\n        puVar11 = (uint *)*puVar8;\n        if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }\n        iVar6 = iVar6 + 1;\n        puVar8 = puVar8 + 1;\n      } while (iVar6 != iVar9);\n    }\n    puVar11 = (uint *)(*(code *)PTR_calloc_0004529c)(0x38,1);\n    if (puVar11 != (uint *)0x0) {\n      iVar6 = FUN_00021c20(puVar11 + 1,param_3);\n      if (iVar6 == 0) {\n        iVar6 = *(int *)(param_3 + 4);\n        puVar11[10] = (uint)(puVar11 + 1);\n        if (0 < iVar6) {\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }\nLAB_000224d0:\n        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);\n        if (iVar6 == 0) {\n          return puVar11;\n        }\n        FUN_0001fecc(puVar11);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(puVar11);\n      }\n    }\n    *param_1 = 0xc;\n  }" { (expression_statement "uVar12 = uVar10;" (assignment_expression "uVar12 = uVar10" identifier = identifier) ;) (if_statement "if (0 < (int)uVar10) {\n      piVar4 = *(int **)(param_3 + 8);\n      piVar7 = piVar4 + uVar10;\n      do {\n        iVar6 = *piVar4;\n        piVar4 = piVar4 + 1;\n        uVar12 = uVar12 + iVar6;\n      } while (piVar7 != piVar4);\n    }" if (parenthesized_expression "(0 < (int)uVar10)" ( (binary_expression "0 < (int)uVar10" number_literal < (cast_expression "(int)uVar10" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n      piVar4 = *(int **)(param_3 + 8);\n      piVar7 = piVar4 + uVar10;\n      do {\n        iVar6 = *piVar4;\n        piVar4 = piVar4 + 1;\n        uVar12 = uVar12 + iVar6;\n      } while (piVar7 != piVar4);\n    }" { (expression_statement "piVar4 = *(int **)(param_3 + 8);" (assignment_expression "piVar4 = *(int **)(param_3 + 8)" identifier = (pointer_expression "*(int **)(param_3 + 8)" * (cast_expression "(int **)(param_3 + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_3 + 8)" ( (binary_expression "param_3 + 8" identifier + number_literal) ))))) ;) (expression_statement "piVar7 = piVar4 + uVar10;" (assignment_expression "piVar7 = piVar4 + uVar10" identifier = (binary_expression "piVar4 + uVar10" identifier + identifier)) ;) (do_statement "do {\n        iVar6 = *piVar4;\n        piVar4 = piVar4 + 1;\n        uVar12 = uVar12 + iVar6;\n      } while (piVar7 != piVar4);" do (compound_statement "{\n        iVar6 = *piVar4;\n        piVar4 = piVar4 + 1;\n        uVar12 = uVar12 + iVar6;\n      }" { (expression_statement "iVar6 = *piVar4;" (assignment_expression "iVar6 = *piVar4" identifier = (pointer_expression "*piVar4" * identifier)) ;) (expression_statement "piVar4 = piVar4 + 1;" (assignment_expression "piVar4 = piVar4 + 1" identifier = (binary_expression "piVar4 + 1" identifier + number_literal)) ;) (expression_statement "uVar12 = uVar12 + iVar6;" (assignment_expression "uVar12 = uVar12 + iVar6" identifier = (binary_expression "uVar12 + iVar6" identifier + identifier)) ;) }) while (parenthesized_expression "(piVar7 != piVar4)" ( (binary_expression "piVar7 != piVar4" identifier != identifier) )) ;) })) (expression_statement "piVar4 = (int *)(param_2[8] + (uVar12 & param_2[0x11]) * 0xc);" (assignment_expression "piVar4 = (int *)(param_2[8] + (uVar12 & param_2[0x11]) * 0xc)" identifier = (cast_expression "(int *)(param_2[8] + (uVar12 & param_2[0x11]) * 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2[8] + (uVar12 & param_2[0x11]) * 0xc)" ( (binary_expression "param_2[8] + (uVar12 & param_2[0x11]) * 0xc" (subscript_expression "param_2[8]" identifier [ number_literal ]) + (binary_expression "(uVar12 & param_2[0x11]) * 0xc" (parenthesized_expression "(uVar12 & param_2[0x11])" ( (binary_expression "uVar12 & param_2[0x11]" identifier & (subscript_expression "param_2[0x11]" identifier [ number_literal ])) )) * number_literal)) )))) ;) (expression_statement "iVar9 = *piVar4;" (assignment_expression "iVar9 = *piVar4" identifier = (pointer_expression "*piVar4" * identifier)) ;) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (if_statement "if (0 < iVar9) {\n      puVar8 = (undefined4 *)piVar4[2];\nLAB_00022394:\n      do {\n        puVar11 = (uint *)*puVar8;\n        if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }\n        iVar6 = iVar6 + 1;\n        puVar8 = puVar8 + 1;\n      } while (iVar6 != iVar9);\n    }" if (parenthesized_expression "(0 < iVar9)" ( (binary_expression "0 < iVar9" number_literal < identifier) )) (compound_statement "{\n      puVar8 = (undefined4 *)piVar4[2];\nLAB_00022394:\n      do {\n        puVar11 = (uint *)*puVar8;\n        if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }\n        iVar6 = iVar6 + 1;\n        puVar8 = puVar8 + 1;\n      } while (iVar6 != iVar9);\n    }" { (expression_statement "puVar8 = (undefined4 *)piVar4[2];" (assignment_expression "puVar8 = (undefined4 *)piVar4[2]" identifier = (cast_expression "(undefined4 *)piVar4[2]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar4[2]" identifier [ number_literal ]))) ;) (labeled_statement "LAB_00022394:\n      do {\n        puVar11 = (uint *)*puVar8;\n        if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }\n        iVar6 = iVar6 + 1;\n        puVar8 = puVar8 + 1;\n      } while (iVar6 != iVar9);" statement_identifier : (do_statement "do {\n        puVar11 = (uint *)*puVar8;\n        if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }\n        iVar6 = iVar6 + 1;\n        puVar8 = puVar8 + 1;\n      } while (iVar6 != iVar9);" do (compound_statement "{\n        puVar11 = (uint *)*puVar8;\n        if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }\n        iVar6 = iVar6 + 1;\n        puVar8 = puVar8 + 1;\n      }" { (expression_statement "puVar11 = (uint *)*puVar8;" (assignment_expression "puVar11 = (uint *)*puVar8" identifier = (cast_expression "(uint *)*puVar8" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar8" * identifier))) ;) (if_statement "if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }" if (parenthesized_expression "(*puVar11 == uVar12)" ( (binary_expression "*puVar11 == uVar12" (pointer_expression "*puVar11" * identifier) == identifier) )) (compound_statement "{\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }" { (expression_statement "uVar5 = puVar11[2];" (assignment_expression "uVar5 = puVar11[2]" identifier = (subscript_expression "puVar11[2]" identifier [ number_literal ])) ;) (if_statement "if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }" if (parenthesized_expression "(uVar10 != uVar5)" ( (binary_expression "uVar10 != uVar5" identifier != identifier) )) (compound_statement "{\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }" { (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) (if_statement "if (iVar6 == iVar9) break;" if (parenthesized_expression "(iVar6 == iVar9)" ( (binary_expression "iVar6 == iVar9" identifier == identifier) )) (break_statement "break;" break ;)) (goto_statement "goto LAB_00022394;" goto statement_identifier ;) })) (do_statement "do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));" do (compound_statement "{\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          }" { (expression_statement "uVar5 = uVar5 - 1;" (assignment_expression "uVar5 = uVar5 - 1" identifier = (binary_expression "uVar5 - 1" identifier - number_literal)) ;) (if_statement "if ((int)uVar5 < 0) {\n              return puVar11;\n            }" if (parenthesized_expression "((int)uVar5 < 0)" ( (binary_expression "(int)uVar5 < 0" (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n              return puVar11;\n            }" { (return_statement "return puVar11;" return identifier ;) })) }) while (parenthesized_expression "(*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4))" ( (binary_expression "*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4)" (pointer_expression "*(int *)(puVar11[3] + uVar5 * 4)" * (cast_expression "(int *)(puVar11[3] + uVar5 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11[3] + uVar5 * 4)" ( (binary_expression "puVar11[3] + uVar5 * 4" (subscript_expression "puVar11[3]" identifier [ number_literal ]) + (binary_expression "uVar5 * 4" identifier * number_literal)) )))) == (pointer_expression "*(int *)(*(int *)(param_3 + 8) + uVar5 * 4)" * (cast_expression "(int *)(*(int *)(param_3 + 8) + uVar5 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_3 + 8) + uVar5 * 4)" ( (binary_expression "*(int *)(param_3 + 8) + uVar5 * 4" (pointer_expression "*(int *)(param_3 + 8)" * (cast_expression "(int *)(param_3 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 8)" ( (binary_expression "param_3 + 8" identifier + number_literal) )))) + (binary_expression "uVar5 * 4" identifier * number_literal)) ))))) )) ;) })) (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar6 != iVar9)" ( (binary_expression "iVar6 != iVar9" identifier != identifier) )) ;)) })) (expression_statement "puVar11 = (uint *)(*(code *)PTR_calloc_0004529c)(0x38,1);" (assignment_expression "puVar11 = (uint *)(*(code *)PTR_calloc_0004529c)(0x38,1)" identifier = (cast_expression "(uint *)(*(code *)PTR_calloc_0004529c)(0x38,1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_calloc_0004529c)(0x38,1)" (parenthesized_expression "(*(code *)PTR_calloc_0004529c)" ( (pointer_expression "*(code *)PTR_calloc_0004529c" * (cast_expression "(code *)PTR_calloc_0004529c" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(0x38,1)" ( number_literal , number_literal ))))) ;) (if_statement "if (puVar11 != (uint *)0x0) {\n      iVar6 = FUN_00021c20(puVar11 + 1,param_3);\n      if (iVar6 == 0) {\n        iVar6 = *(int *)(param_3 + 4);\n        puVar11[10] = (uint)(puVar11 + 1);\n        if (0 < iVar6) {\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }\nLAB_000224d0:\n        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);\n        if (iVar6 == 0) {\n          return puVar11;\n        }\n        FUN_0001fecc(puVar11);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(puVar11);\n      }\n    }" if (parenthesized_expression "(puVar11 != (uint *)0x0)" ( (binary_expression "puVar11 != (uint *)0x0" identifier != (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      iVar6 = FUN_00021c20(puVar11 + 1,param_3);\n      if (iVar6 == 0) {\n        iVar6 = *(int *)(param_3 + 4);\n        puVar11[10] = (uint)(puVar11 + 1);\n        if (0 < iVar6) {\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }\nLAB_000224d0:\n        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);\n        if (iVar6 == 0) {\n          return puVar11;\n        }\n        FUN_0001fecc(puVar11);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(puVar11);\n      }\n    }" { (expression_statement "iVar6 = FUN_00021c20(puVar11 + 1,param_3);" (assignment_expression "iVar6 = FUN_00021c20(puVar11 + 1,param_3)" identifier = (call_expression "FUN_00021c20(puVar11 + 1,param_3)" identifier (argument_list "(puVar11 + 1,param_3)" ( (binary_expression "puVar11 + 1" identifier + number_literal) , identifier )))) ;) (if_statement "if (iVar6 == 0) {\n        iVar6 = *(int *)(param_3 + 4);\n        puVar11[10] = (uint)(puVar11 + 1);\n        if (0 < iVar6) {\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }\nLAB_000224d0:\n        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);\n        if (iVar6 == 0) {\n          return puVar11;\n        }\n        FUN_0001fecc(puVar11);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(puVar11);\n      }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n        iVar6 = *(int *)(param_3 + 4);\n        puVar11[10] = (uint)(puVar11 + 1);\n        if (0 < iVar6) {\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }\nLAB_000224d0:\n        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);\n        if (iVar6 == 0) {\n          return puVar11;\n        }\n        FUN_0001fecc(puVar11);\n      }" { (expression_statement "iVar6 = *(int *)(param_3 + 4);" (assignment_expression "iVar6 = *(int *)(param_3 + 4)" identifier = (pointer_expression "*(int *)(param_3 + 4)" * (cast_expression "(int *)(param_3 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) ))))) ;) (expression_statement "puVar11[10] = (uint)(puVar11 + 1);" (assignment_expression "puVar11[10] = (uint)(puVar11 + 1)" (subscript_expression "puVar11[10]" identifier [ number_literal ]) = (call_expression "(uint)(puVar11 + 1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(puVar11 + 1)" ( (binary_expression "puVar11 + 1" identifier + number_literal) )))) ;) (if_statement "if (0 < iVar6) {\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }" if (parenthesized_expression "(0 < iVar6)" ( (binary_expression "0 < iVar6" number_literal < identifier) )) (compound_statement "{\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }" { (expression_statement "piVar4 = *(int **)(param_3 + 8);" (assignment_expression "piVar4 = *(int **)(param_3 + 8)" identifier = (pointer_expression "*(int **)(param_3 + 8)" * (cast_expression "(int **)(param_3 + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_3 + 8)" ( (binary_expression "param_3 + 8" identifier + number_literal) ))))) ;) (expression_statement "iVar9 = *param_2;" (assignment_expression "iVar9 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "piVar7 = piVar4 + iVar6;" (assignment_expression "piVar7 = piVar4 + iVar6" identifier = (binary_expression "piVar4 + iVar6" identifier + identifier)) ;) (do_statement "do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);" do (compound_statement "{\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          }" { (while_statement "while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }" { (expression_statement "iVar6 = iVar9 + *piVar4 * 8;" (assignment_expression "iVar6 = iVar9 + *piVar4 * 8" identifier = (binary_expression "iVar9 + *piVar4 * 8" identifier + (binary_expression "*piVar4 * 8" (pointer_expression "*piVar4" * identifier) * number_literal))) ;) (expression_statement "cVar1 = *(char *)(iVar6 + 4);" (assignment_expression "cVar1 = *(char *)(iVar6 + 4)" identifier = (pointer_expression "*(char *)(iVar6 + 4)" * (cast_expression "(char *)(iVar6 + 4)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 4)" ( (binary_expression "iVar6 + 4" identifier + number_literal) ))))) ;) (if_statement "if (cVar1 == '\x01') break;" if (parenthesized_expression "(cVar1 == '\x01')" ( (binary_expression "cVar1 == '\x01'" identifier == (char_literal "'\x01'" ' escape_sequence ')) )) (break_statement "break;" break ;)) (expression_statement "uVar10 = *(uint *)(iVar6 + 4);" (assignment_expression "uVar10 = *(uint *)(iVar6 + 4)" identifier = (pointer_expression "*(uint *)(iVar6 + 4)" * (cast_expression "(uint *)(iVar6 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 4)" ( (binary_expression "iVar6 + 4" identifier + number_literal) ))))) ;) (expression_statement "bVar2 = *(byte *)(puVar11 + 0xd);" (assignment_expression "bVar2 = *(byte *)(puVar11 + 0xd)" identifier = (pointer_expression "*(byte *)(puVar11 + 0xd)" * (cast_expression "(byte *)(puVar11 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + 0xd)" ( (binary_expression "puVar11 + 0xd" identifier + number_literal) ))))) ;) (expression_statement "bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);" (assignment_expression "bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2)" identifier = (call_expression "(byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2)" ( (binary_expression "((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2" (parenthesized_expression "((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f)" ( (binary_expression "(puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f" (parenthesized_expression "(puVar11[0xd] << 5 | uVar10 << 0x14)" ( (binary_expression "puVar11[0xd] << 5 | uVar10 << 0x14" (binary_expression "puVar11[0xd] << 5" (subscript_expression "puVar11[0xd]" identifier [ number_literal ]) << number_literal) | (binary_expression "uVar10 << 0x14" identifier << number_literal)) )) >> number_literal) )) << number_literal) )))) ;) (expression_statement "*(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;" (assignment_expression "*(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3" (pointer_expression "*(byte *)(puVar11 + 0xd)" * (cast_expression "(byte *)(puVar11 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + 0xd)" ( (binary_expression "puVar11 + 0xd" identifier + number_literal) )))) = (binary_expression "bVar2 & 0xfb | bVar3" (binary_expression "bVar2 & 0xfb" identifier & number_literal) | identifier)) ;) (if_statement "if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }" if (parenthesized_expression "(cVar1 == '\x02')" ( (binary_expression "cVar1 == '\x02'" identifier == (char_literal "'\x02'" ' escape_sequence ')) )) (compound_statement "{\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }" { (expression_statement "*(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;" (assignment_expression "*(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8" (pointer_expression "*(byte *)(puVar11 + 0xd)" * (cast_expression "(byte *)(puVar11 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + 0xd)" ( (binary_expression "puVar11 + 0xd" identifier + number_literal) )))) = (binary_expression "bVar2 & 0xf3 | bVar3 | 8" (binary_expression "bVar2 & 0xf3 | bVar3" (binary_expression "bVar2 & 0xf3" identifier & number_literal) | identifier) | number_literal)) ;) }) (else_clause "else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }" else (if_statement "if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }" if (parenthesized_expression "(cVar1 == '\x04')" ( (binary_expression "cVar1 == '\x04'" identifier == (char_literal "'\x04'" ' escape_sequence ')) )) (compound_statement "{\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }" { (expression_statement "*(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;" (assignment_expression "*(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2" (pointer_expression "*(byte *)(puVar11 + 0xd)" * (cast_expression "(byte *)(puVar11 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + 0xd)" ( (binary_expression "puVar11 + 0xd" identifier + number_literal) )))) = (binary_expression "bVar2 & 0xf9 | bVar3 | 2" (binary_expression "bVar2 & 0xf9 | bVar3" (binary_expression "bVar2 & 0xf9" identifier & number_literal) | identifier) | number_literal)) ;) }) (else_clause "else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }" else (compound_statement "{\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }" { (if_statement "if (cVar1 == '\f') goto LAB_000224b8;" if (parenthesized_expression "(cVar1 == '\f')" ( (binary_expression "cVar1 == '\f'" identifier == (char_literal "'\f'" ' escape_sequence ')) )) (goto_statement "goto LAB_000224b8;" goto statement_identifier ;)) (if_statement "if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }" if (parenthesized_expression "((uVar10 & 0xffc000) != 0)" ( (binary_expression "(uVar10 & 0xffc000) != 0" (parenthesized_expression "(uVar10 & 0xffc000)" ( (binary_expression "uVar10 & 0xffc000" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }" { (expression_statement "bVar2 = *(byte *)(puVar11 + 0xd);" (assignment_expression "bVar2 = *(byte *)(puVar11 + 0xd)" identifier = (pointer_expression "*(byte *)(puVar11 + 0xd)" * (cast_expression "(byte *)(puVar11 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + 0xd)" ( (binary_expression "puVar11 + 0xd" identifier + number_literal) ))))) ;) (goto_statement "goto LAB_000224bc;" goto statement_identifier ;) })) }))))) (labeled_statement "LAB_00022470:\n              piVar4 = piVar4 + 1;" statement_identifier : (expression_statement "piVar4 = piVar4 + 1;" (assignment_expression "piVar4 = piVar4 + 1" identifier = (binary_expression "piVar4 + 1" identifier + number_literal)) ;)) (if_statement "if (piVar7 == piVar4) goto LAB_000224d0;" if (parenthesized_expression "(piVar7 == piVar4)" ( (binary_expression "piVar7 == piVar4" identifier == identifier) )) (goto_statement "goto LAB_000224d0;" goto statement_identifier ;)) })) (if_statement "if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;" if (parenthesized_expression "((*(uint *)(iVar6 + 4) & 0xffc000) == 0)" ( (binary_expression "(*(uint *)(iVar6 + 4) & 0xffc000) == 0" (parenthesized_expression "(*(uint *)(iVar6 + 4) & 0xffc000)" ( (binary_expression "*(uint *)(iVar6 + 4) & 0xffc000" (pointer_expression "*(uint *)(iVar6 + 4)" * (cast_expression "(uint *)(iVar6 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 4)" ( (binary_expression "iVar6 + 4" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (goto_statement "goto LAB_00022470;" goto statement_identifier ;)) (expression_statement "*(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);" (assignment_expression "*(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2)" (pointer_expression "*(byte *)(puVar11 + 0xd)" * (cast_expression "(byte *)(puVar11 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + 0xd)" ( (binary_expression "puVar11 + 0xd" identifier + number_literal) )))) = (binary_expression "*(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2)" (binary_expression "*(byte *)(puVar11 + 0xd) & 0xfb" (pointer_expression "*(byte *)(puVar11 + 0xd)" * (cast_expression "(byte *)(puVar11 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + 0xd)" ( (binary_expression "puVar11 + 0xd" identifier + number_literal) )))) & number_literal) | (call_expression "(byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2)" ( (binary_expression "((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2" (parenthesized_expression "((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f)" ( (binary_expression "(puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f" (parenthesized_expression "(puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14)" ( (binary_expression "puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14" (binary_expression "puVar11[0xd] << 5" (subscript_expression "puVar11[0xd]" identifier [ number_literal ]) << number_literal) | (binary_expression "*(uint *)(iVar6 + 4) << 0x14" (pointer_expression "*(uint *)(iVar6 + 4)" * (cast_expression "(uint *)(iVar6 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 4)" ( (binary_expression "iVar6 + 4" identifier + number_literal) )))) << number_literal)) )) >> number_literal) )) << number_literal) ))))) ;) (labeled_statement "LAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);" statement_identifier : (expression_statement "bVar2 = *(byte *)(puVar11 + 0xd);" (assignment_expression "bVar2 = *(byte *)(puVar11 + 0xd)" identifier = (pointer_expression "*(byte *)(puVar11 + 0xd)" * (cast_expression "(byte *)(puVar11 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + 0xd)" ( (binary_expression "puVar11 + 0xd" identifier + number_literal) ))))) ;)) (labeled_statement "LAB_000224bc:\n            piVar4 = piVar4 + 1;" statement_identifier : (expression_statement "piVar4 = piVar4 + 1;" (assignment_expression "piVar4 = piVar4 + 1" identifier = (binary_expression "piVar4 + 1" identifier + number_literal)) ;)) (expression_statement "*(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;" (assignment_expression "*(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1" (pointer_expression "*(byte *)(puVar11 + 0xd)" * (cast_expression "(byte *)(puVar11 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + 0xd)" ( (binary_expression "puVar11 + 0xd" identifier + number_literal) )))) = (binary_expression "bVar2 & 0xfe | 1" (binary_expression "bVar2 & 0xfe" identifier & number_literal) | number_literal)) ;) }) while (parenthesized_expression "(piVar7 != piVar4)" ( (binary_expression "piVar7 != piVar4" identifier != identifier) )) ;) })) (labeled_statement "LAB_000224d0:\n        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);" statement_identifier : (expression_statement "iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);" (assignment_expression "iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12)" identifier = (call_expression "FUN_0001e7e4(param_2,puVar11,uVar12)" identifier (argument_list "(param_2,puVar11,uVar12)" ( identifier , identifier , identifier )))) ;)) (if_statement "if (iVar6 == 0) {\n          return puVar11;\n        }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n          return puVar11;\n        }" { (return_statement "return puVar11;" return identifier ;) })) (expression_statement "FUN_0001fecc(puVar11);" (call_expression "FUN_0001fecc(puVar11)" identifier (argument_list "(puVar11)" ( identifier ))) ;) }) (else_clause "else {\n        (*(code *)PTR_free_000453bc)(puVar11);\n      }" else (compound_statement "{\n        (*(code *)PTR_free_000453bc)(puVar11);\n      }" { (expression_statement "(*(code *)PTR_free_000453bc)(puVar11);" (call_expression "(*(code *)PTR_free_000453bc)(puVar11)" (parenthesized_expression "(*(code *)PTR_free_000453bc)" ( (pointer_expression "*(code *)PTR_free_000453bc" * (cast_expression "(code *)PTR_free_000453bc" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar11)" ( identifier ))) ;) }))) })) (expression_statement "*param_1 = 0xc;" (assignment_expression "*param_1 = 0xc" (pointer_expression "*param_1" * identifier) = number_literal) ;) }))) (return_statement "return (uint *)0x0;" return (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })))
(translation_unit "re_dfastate_t * re_acquire_state(reg_errcode_t *err,re_dfa_t *dfa,re_node_set *nodes)\n\n{\n  char cVar1;\n  byte bVar2;\n  byte bVar3;\n  int *piVar4;\n  uint uVar5;\n  reg_errcode_t rVar6;\n  int iVar7;\n  int *piVar8;\n  re_dfastate_t **pprVar9;\n  re_token_t *prVar10;\n  int iVar11;\n  uint uVar12;\n  re_dfastate_t *prVar13;\n  uint hash;\n  \n  uVar12 = nodes->nelem;\n  if (uVar12 == 0) {\n    *err = _REG_NOERROR;\n  }\n  else {\n    hash = uVar12;\n    if (0 < (int)uVar12) {\n      piVar4 = nodes->elems;\n      piVar8 = piVar4 + uVar12;\n      do {\n        iVar7 = *piVar4;\n        piVar4 = piVar4 + 1;\n        hash = hash + iVar7;\n      } while (piVar8 != piVar4);\n    }\n    iVar11 = dfa->state_table[hash & dfa->state_hash_mask].num;\n    iVar7 = 0;\n    if (0 < iVar11) {\n      pprVar9 = dfa->state_table[hash & dfa->state_hash_mask].array;\nLAB_00022394:\n      do {\n        prVar13 = *pprVar9;\n        if (prVar13->hash == hash) {\n          uVar5 = (prVar13->nodes).nelem;\n          if (uVar12 != uVar5) {\n            iVar7 = iVar7 + 1;\n            pprVar9 = pprVar9 + 1;\n            if (iVar7 == iVar11) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return prVar13;\n            }\n          } while ((prVar13->nodes).elems[uVar5] == nodes->elems[uVar5]);\n        }\n        iVar7 = iVar7 + 1;\n        pprVar9 = pprVar9 + 1;\n      } while (iVar7 != iVar11);\n    }\n    prVar13 = (re_dfastate_t *)(*(code *)PTR_calloc_0004529c)(0x38,1);\n    if (prVar13 != (re_dfastate_t *)0x0) {\n      rVar6 = re_node_set_init_copy(&prVar13->nodes,nodes);\n      if (rVar6 == _REG_NOERROR) {\n        iVar7 = nodes->nelem;\n        prVar13->entrance_nodes = &prVar13->nodes;\n        if (0 < iVar7) {\n          piVar4 = nodes->elems;\n          prVar10 = dfa->nodes;\n          piVar8 = piVar4 + iVar7;\n          do {\n            while( true ) {\n              iVar7 = *piVar4;\n              cVar1 = prVar10[iVar7].field_0x4;\n              if (cVar1 == '\x01') break;\n              uVar12 = *(uint *)&prVar10[iVar7].field_0x4;\n              bVar2 = prVar13->field_0x34;\n              bVar3 = (byte)(((*(int *)&prVar13->field_0x34 << 5 | uVar12 << 0x14) >> 0x1f) << 2);\n              prVar13->field_0x34 = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                prVar13->field_0x34 = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                prVar13->field_0x34 = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar12 & 0xffc000) != 0) {\n                  bVar2 = prVar13->field_0x34;\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar8 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)&prVar10[iVar7].field_0x4 & 0xffc000) == 0) goto LAB_00022470;\n            prVar13->field_0x34 =\n                 prVar13->field_0x34 & 0xfb |\n                 (byte)(((*(int *)&prVar13->field_0x34 << 5 |\n                         *(uint *)&prVar10[iVar7].field_0x4 << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = prVar13->field_0x34;\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            prVar13->field_0x34 = bVar2 & 0xfe | 1;\n          } while (piVar8 != piVar4);\n        }\nLAB_000224d0:\n        rVar6 = register_state(dfa,prVar13,hash);\n        if (rVar6 == _REG_NOERROR) {\n          return prVar13;\n        }\n        free_state(prVar13);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(prVar13);\n      }\n    }\n    *err = _REG_ESPACE;\n  }\n  return (re_dfastate_t *)0x0;\n}\n\n" (function_definition "re_dfastate_t * re_acquire_state(reg_errcode_t *err,re_dfa_t *dfa,re_node_set *nodes)\n\n{\n  char cVar1;\n  byte bVar2;\n  byte bVar3;\n  int *piVar4;\n  uint uVar5;\n  reg_errcode_t rVar6;\n  int iVar7;\n  int *piVar8;\n  re_dfastate_t **pprVar9;\n  re_token_t *prVar10;\n  int iVar11;\n  uint uVar12;\n  re_dfastate_t *prVar13;\n  uint hash;\n  \n  uVar12 = nodes->nelem;\n  if (uVar12 == 0) {\n    *err = _REG_NOERROR;\n  }\n  else {\n    hash = uVar12;\n    if (0 < (int)uVar12) {\n      piVar4 = nodes->elems;\n      piVar8 = piVar4 + uVar12;\n      do {\n        iVar7 = *piVar4;\n        piVar4 = piVar4 + 1;\n        hash = hash + iVar7;\n      } while (piVar8 != piVar4);\n    }\n    iVar11 = dfa->state_table[hash & dfa->state_hash_mask].num;\n    iVar7 = 0;\n    if (0 < iVar11) {\n      pprVar9 = dfa->state_table[hash & dfa->state_hash_mask].array;\nLAB_00022394:\n      do {\n        prVar13 = *pprVar9;\n        if (prVar13->hash == hash) {\n          uVar5 = (prVar13->nodes).nelem;\n          if (uVar12 != uVar5) {\n            iVar7 = iVar7 + 1;\n            pprVar9 = pprVar9 + 1;\n            if (iVar7 == iVar11) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return prVar13;\n            }\n          } while ((prVar13->nodes).elems[uVar5] == nodes->elems[uVar5]);\n        }\n        iVar7 = iVar7 + 1;\n        pprVar9 = pprVar9 + 1;\n      } while (iVar7 != iVar11);\n    }\n    prVar13 = (re_dfastate_t *)(*(code *)PTR_calloc_0004529c)(0x38,1);\n    if (prVar13 != (re_dfastate_t *)0x0) {\n      rVar6 = re_node_set_init_copy(&prVar13->nodes,nodes);\n      if (rVar6 == _REG_NOERROR) {\n        iVar7 = nodes->nelem;\n        prVar13->entrance_nodes = &prVar13->nodes;\n        if (0 < iVar7) {\n          piVar4 = nodes->elems;\n          prVar10 = dfa->nodes;\n          piVar8 = piVar4 + iVar7;\n          do {\n            while( true ) {\n              iVar7 = *piVar4;\n              cVar1 = prVar10[iVar7].field_0x4;\n              if (cVar1 == '\x01') break;\n              uVar12 = *(uint *)&prVar10[iVar7].field_0x4;\n              bVar2 = prVar13->field_0x34;\n              bVar3 = (byte)(((*(int *)&prVar13->field_0x34 << 5 | uVar12 << 0x14) >> 0x1f) << 2);\n              prVar13->field_0x34 = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                prVar13->field_0x34 = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                prVar13->field_0x34 = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar12 & 0xffc000) != 0) {\n                  bVar2 = prVar13->field_0x34;\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar8 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)&prVar10[iVar7].field_0x4 & 0xffc000) == 0) goto LAB_00022470;\n            prVar13->field_0x34 =\n                 prVar13->field_0x34 & 0xfb |\n                 (byte)(((*(int *)&prVar13->field_0x34 << 5 |\n                         *(uint *)&prVar10[iVar7].field_0x4 << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = prVar13->field_0x34;\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            prVar13->field_0x34 = bVar2 & 0xfe | 1;\n          } while (piVar8 != piVar4);\n        }\nLAB_000224d0:\n        rVar6 = register_state(dfa,prVar13,hash);\n        if (rVar6 == _REG_NOERROR) {\n          return prVar13;\n        }\n        free_state(prVar13);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(prVar13);\n      }\n    }\n    *err = _REG_ESPACE;\n  }\n  return (re_dfastate_t *)0x0;\n}" type_identifier (pointer_declarator "* re_acquire_state(reg_errcode_t *err,re_dfa_t *dfa,re_node_set *nodes)" * (function_declarator "re_acquire_state(reg_errcode_t *err,re_dfa_t *dfa,re_node_set *nodes)" identifier (parameter_list "(reg_errcode_t *err,re_dfa_t *dfa,re_node_set *nodes)" ( (parameter_declaration "reg_errcode_t *err" type_identifier (pointer_declarator "*err" * identifier)) , (parameter_declaration "re_dfa_t *dfa" type_identifier (pointer_declarator "*dfa" * identifier)) , (parameter_declaration "re_node_set *nodes" type_identifier (pointer_declarator "*nodes" * identifier)) )))) (compound_statement "{\n  char cVar1;\n  byte bVar2;\n  byte bVar3;\n  int *piVar4;\n  uint uVar5;\n  reg_errcode_t rVar6;\n  int iVar7;\n  int *piVar8;\n  re_dfastate_t **pprVar9;\n  re_token_t *prVar10;\n  int iVar11;\n  uint uVar12;\n  re_dfastate_t *prVar13;\n  uint hash;\n  \n  uVar12 = nodes->nelem;\n  if (uVar12 == 0) {\n    *err = _REG_NOERROR;\n  }\n  else {\n    hash = uVar12;\n    if (0 < (int)uVar12) {\n      piVar4 = nodes->elems;\n      piVar8 = piVar4 + uVar12;\n      do {\n        iVar7 = *piVar4;\n        piVar4 = piVar4 + 1;\n        hash = hash + iVar7;\n      } while (piVar8 != piVar4);\n    }\n    iVar11 = dfa->state_table[hash & dfa->state_hash_mask].num;\n    iVar7 = 0;\n    if (0 < iVar11) {\n      pprVar9 = dfa->state_table[hash & dfa->state_hash_mask].array;\nLAB_00022394:\n      do {\n        prVar13 = *pprVar9;\n        if (prVar13->hash == hash) {\n          uVar5 = (prVar13->nodes).nelem;\n          if (uVar12 != uVar5) {\n            iVar7 = iVar7 + 1;\n            pprVar9 = pprVar9 + 1;\n            if (iVar7 == iVar11) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return prVar13;\n            }\n          } while ((prVar13->nodes).elems[uVar5] == nodes->elems[uVar5]);\n        }\n        iVar7 = iVar7 + 1;\n        pprVar9 = pprVar9 + 1;\n      } while (iVar7 != iVar11);\n    }\n    prVar13 = (re_dfastate_t *)(*(code *)PTR_calloc_0004529c)(0x38,1);\n    if (prVar13 != (re_dfastate_t *)0x0) {\n      rVar6 = re_node_set_init_copy(&prVar13->nodes,nodes);\n      if (rVar6 == _REG_NOERROR) {\n        iVar7 = nodes->nelem;\n        prVar13->entrance_nodes = &prVar13->nodes;\n        if (0 < iVar7) {\n          piVar4 = nodes->elems;\n          prVar10 = dfa->nodes;\n          piVar8 = piVar4 + iVar7;\n          do {\n            while( true ) {\n              iVar7 = *piVar4;\n              cVar1 = prVar10[iVar7].field_0x4;\n              if (cVar1 == '\x01') break;\n              uVar12 = *(uint *)&prVar10[iVar7].field_0x4;\n              bVar2 = prVar13->field_0x34;\n              bVar3 = (byte)(((*(int *)&prVar13->field_0x34 << 5 | uVar12 << 0x14) >> 0x1f) << 2);\n              prVar13->field_0x34 = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                prVar13->field_0x34 = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                prVar13->field_0x34 = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar12 & 0xffc000) != 0) {\n                  bVar2 = prVar13->field_0x34;\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar8 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)&prVar10[iVar7].field_0x4 & 0xffc000) == 0) goto LAB_00022470;\n            prVar13->field_0x34 =\n                 prVar13->field_0x34 & 0xfb |\n                 (byte)(((*(int *)&prVar13->field_0x34 << 5 |\n                         *(uint *)&prVar10[iVar7].field_0x4 << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = prVar13->field_0x34;\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            prVar13->field_0x34 = bVar2 & 0xfe | 1;\n          } while (piVar8 != piVar4);\n        }\nLAB_000224d0:\n        rVar6 = register_state(dfa,prVar13,hash);\n        if (rVar6 == _REG_NOERROR) {\n          return prVar13;\n        }\n        free_state(prVar13);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(prVar13);\n      }\n    }\n    *err = _REG_ESPACE;\n  }\n  return (re_dfastate_t *)0x0;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "int *piVar4;" primitive_type (pointer_declarator "*piVar4" * identifier) ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "reg_errcode_t rVar6;" type_identifier identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "int *piVar8;" primitive_type (pointer_declarator "*piVar8" * identifier) ;) (declaration "re_dfastate_t **pprVar9;" type_identifier (pointer_declarator "**pprVar9" * (pointer_declarator "*pprVar9" * identifier)) ;) (declaration "re_token_t *prVar10;" type_identifier (pointer_declarator "*prVar10" * identifier) ;) (declaration "int iVar11;" primitive_type identifier ;) (declaration "uint uVar12;" type_identifier identifier ;) (declaration "re_dfastate_t *prVar13;" type_identifier (pointer_declarator "*prVar13" * identifier) ;) (declaration "uint hash;" type_identifier identifier ;) (expression_statement "uVar12 = nodes->nelem;" (assignment_expression "uVar12 = nodes->nelem" identifier = (field_expression "nodes->nelem" identifier -> field_identifier)) ;) (if_statement "if (uVar12 == 0) {\n    *err = _REG_NOERROR;\n  }\n  else {\n    hash = uVar12;\n    if (0 < (int)uVar12) {\n      piVar4 = nodes->elems;\n      piVar8 = piVar4 + uVar12;\n      do {\n        iVar7 = *piVar4;\n        piVar4 = piVar4 + 1;\n        hash = hash + iVar7;\n      } while (piVar8 != piVar4);\n    }\n    iVar11 = dfa->state_table[hash & dfa->state_hash_mask].num;\n    iVar7 = 0;\n    if (0 < iVar11) {\n      pprVar9 = dfa->state_table[hash & dfa->state_hash_mask].array;\nLAB_00022394:\n      do {\n        prVar13 = *pprVar9;\n        if (prVar13->hash == hash) {\n          uVar5 = (prVar13->nodes).nelem;\n          if (uVar12 != uVar5) {\n            iVar7 = iVar7 + 1;\n            pprVar9 = pprVar9 + 1;\n            if (iVar7 == iVar11) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return prVar13;\n            }\n          } while ((prVar13->nodes).elems[uVar5] == nodes->elems[uVar5]);\n        }\n        iVar7 = iVar7 + 1;\n        pprVar9 = pprVar9 + 1;\n      } while (iVar7 != iVar11);\n    }\n    prVar13 = (re_dfastate_t *)(*(code *)PTR_calloc_0004529c)(0x38,1);\n    if (prVar13 != (re_dfastate_t *)0x0) {\n      rVar6 = re_node_set_init_copy(&prVar13->nodes,nodes);\n      if (rVar6 == _REG_NOERROR) {\n        iVar7 = nodes->nelem;\n        prVar13->entrance_nodes = &prVar13->nodes;\n        if (0 < iVar7) {\n          piVar4 = nodes->elems;\n          prVar10 = dfa->nodes;\n          piVar8 = piVar4 + iVar7;\n          do {\n            while( true ) {\n              iVar7 = *piVar4;\n              cVar1 = prVar10[iVar7].field_0x4;\n              if (cVar1 == '\x01') break;\n              uVar12 = *(uint *)&prVar10[iVar7].field_0x4;\n              bVar2 = prVar13->field_0x34;\n              bVar3 = (byte)(((*(int *)&prVar13->field_0x34 << 5 | uVar12 << 0x14) >> 0x1f) << 2);\n              prVar13->field_0x34 = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                prVar13->field_0x34 = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                prVar13->field_0x34 = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar12 & 0xffc000) != 0) {\n                  bVar2 = prVar13->field_0x34;\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar8 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)&prVar10[iVar7].field_0x4 & 0xffc000) == 0) goto LAB_00022470;\n            prVar13->field_0x34 =\n                 prVar13->field_0x34 & 0xfb |\n                 (byte)(((*(int *)&prVar13->field_0x34 << 5 |\n                         *(uint *)&prVar10[iVar7].field_0x4 << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = prVar13->field_0x34;\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            prVar13->field_0x34 = bVar2 & 0xfe | 1;\n          } while (piVar8 != piVar4);\n        }\nLAB_000224d0:\n        rVar6 = register_state(dfa,prVar13,hash);\n        if (rVar6 == _REG_NOERROR) {\n          return prVar13;\n        }\n        free_state(prVar13);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(prVar13);\n      }\n    }\n    *err = _REG_ESPACE;\n  }" if (parenthesized_expression "(uVar12 == 0)" ( (binary_expression "uVar12 == 0" identifier == number_literal) )) (compound_statement "{\n    *err = _REG_NOERROR;\n  }" { (expression_statement "*err = _REG_NOERROR;" (assignment_expression "*err = _REG_NOERROR" (pointer_expression "*err" * identifier) = identifier) ;) }) (else_clause "else {\n    hash = uVar12;\n    if (0 < (int)uVar12) {\n      piVar4 = nodes->elems;\n      piVar8 = piVar4 + uVar12;\n      do {\n        iVar7 = *piVar4;\n        piVar4 = piVar4 + 1;\n        hash = hash + iVar7;\n      } while (piVar8 != piVar4);\n    }\n    iVar11 = dfa->state_table[hash & dfa->state_hash_mask].num;\n    iVar7 = 0;\n    if (0 < iVar11) {\n      pprVar9 = dfa->state_table[hash & dfa->state_hash_mask].array;\nLAB_00022394:\n      do {\n        prVar13 = *pprVar9;\n        if (prVar13->hash == hash) {\n          uVar5 = (prVar13->nodes).nelem;\n          if (uVar12 != uVar5) {\n            iVar7 = iVar7 + 1;\n            pprVar9 = pprVar9 + 1;\n            if (iVar7 == iVar11) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return prVar13;\n            }\n          } while ((prVar13->nodes).elems[uVar5] == nodes->elems[uVar5]);\n        }\n        iVar7 = iVar7 + 1;\n        pprVar9 = pprVar9 + 1;\n      } while (iVar7 != iVar11);\n    }\n    prVar13 = (re_dfastate_t *)(*(code *)PTR_calloc_0004529c)(0x38,1);\n    if (prVar13 != (re_dfastate_t *)0x0) {\n      rVar6 = re_node_set_init_copy(&prVar13->nodes,nodes);\n      if (rVar6 == _REG_NOERROR) {\n        iVar7 = nodes->nelem;\n        prVar13->entrance_nodes = &prVar13->nodes;\n        if (0 < iVar7) {\n          piVar4 = nodes->elems;\n          prVar10 = dfa->nodes;\n          piVar8 = piVar4 + iVar7;\n          do {\n            while( true ) {\n              iVar7 = *piVar4;\n              cVar1 = prVar10[iVar7].field_0x4;\n              if (cVar1 == '\x01') break;\n              uVar12 = *(uint *)&prVar10[iVar7].field_0x4;\n              bVar2 = prVar13->field_0x34;\n              bVar3 = (byte)(((*(int *)&prVar13->field_0x34 << 5 | uVar12 << 0x14) >> 0x1f) << 2);\n              prVar13->field_0x34 = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                prVar13->field_0x34 = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                prVar13->field_0x34 = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar12 & 0xffc000) != 0) {\n                  bVar2 = prVar13->field_0x34;\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar8 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)&prVar10[iVar7].field_0x4 & 0xffc000) == 0) goto LAB_00022470;\n            prVar13->field_0x34 =\n                 prVar13->field_0x34 & 0xfb |\n                 (byte)(((*(int *)&prVar13->field_0x34 << 5 |\n                         *(uint *)&prVar10[iVar7].field_0x4 << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = prVar13->field_0x34;\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            prVar13->field_0x34 = bVar2 & 0xfe | 1;\n          } while (piVar8 != piVar4);\n        }\nLAB_000224d0:\n        rVar6 = register_state(dfa,prVar13,hash);\n        if (rVar6 == _REG_NOERROR) {\n          return prVar13;\n        }\n        free_state(prVar13);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(prVar13);\n      }\n    }\n    *err = _REG_ESPACE;\n  }" else (compound_statement "{\n    hash = uVar12;\n    if (0 < (int)uVar12) {\n      piVar4 = nodes->elems;\n      piVar8 = piVar4 + uVar12;\n      do {\n        iVar7 = *piVar4;\n        piVar4 = piVar4 + 1;\n        hash = hash + iVar7;\n      } while (piVar8 != piVar4);\n    }\n    iVar11 = dfa->state_table[hash & dfa->state_hash_mask].num;\n    iVar7 = 0;\n    if (0 < iVar11) {\n      pprVar9 = dfa->state_table[hash & dfa->state_hash_mask].array;\nLAB_00022394:\n      do {\n        prVar13 = *pprVar9;\n        if (prVar13->hash == hash) {\n          uVar5 = (prVar13->nodes).nelem;\n          if (uVar12 != uVar5) {\n            iVar7 = iVar7 + 1;\n            pprVar9 = pprVar9 + 1;\n            if (iVar7 == iVar11) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return prVar13;\n            }\n          } while ((prVar13->nodes).elems[uVar5] == nodes->elems[uVar5]);\n        }\n        iVar7 = iVar7 + 1;\n        pprVar9 = pprVar9 + 1;\n      } while (iVar7 != iVar11);\n    }\n    prVar13 = (re_dfastate_t *)(*(code *)PTR_calloc_0004529c)(0x38,1);\n    if (prVar13 != (re_dfastate_t *)0x0) {\n      rVar6 = re_node_set_init_copy(&prVar13->nodes,nodes);\n      if (rVar6 == _REG_NOERROR) {\n        iVar7 = nodes->nelem;\n        prVar13->entrance_nodes = &prVar13->nodes;\n        if (0 < iVar7) {\n          piVar4 = nodes->elems;\n          prVar10 = dfa->nodes;\n          piVar8 = piVar4 + iVar7;\n          do {\n            while( true ) {\n              iVar7 = *piVar4;\n              cVar1 = prVar10[iVar7].field_0x4;\n              if (cVar1 == '\x01') break;\n              uVar12 = *(uint *)&prVar10[iVar7].field_0x4;\n              bVar2 = prVar13->field_0x34;\n              bVar3 = (byte)(((*(int *)&prVar13->field_0x34 << 5 | uVar12 << 0x14) >> 0x1f) << 2);\n              prVar13->field_0x34 = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                prVar13->field_0x34 = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                prVar13->field_0x34 = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar12 & 0xffc000) != 0) {\n                  bVar2 = prVar13->field_0x34;\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar8 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)&prVar10[iVar7].field_0x4 & 0xffc000) == 0) goto LAB_00022470;\n            prVar13->field_0x34 =\n                 prVar13->field_0x34 & 0xfb |\n                 (byte)(((*(int *)&prVar13->field_0x34 << 5 |\n                         *(uint *)&prVar10[iVar7].field_0x4 << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = prVar13->field_0x34;\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            prVar13->field_0x34 = bVar2 & 0xfe | 1;\n          } while (piVar8 != piVar4);\n        }\nLAB_000224d0:\n        rVar6 = register_state(dfa,prVar13,hash);\n        if (rVar6 == _REG_NOERROR) {\n          return prVar13;\n        }\n        free_state(prVar13);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(prVar13);\n      }\n    }\n    *err = _REG_ESPACE;\n  }" { (expression_statement "hash = uVar12;" (assignment_expression "hash = uVar12" identifier = identifier) ;) (if_statement "if (0 < (int)uVar12) {\n      piVar4 = nodes->elems;\n      piVar8 = piVar4 + uVar12;\n      do {\n        iVar7 = *piVar4;\n        piVar4 = piVar4 + 1;\n        hash = hash + iVar7;\n      } while (piVar8 != piVar4);\n    }" if (parenthesized_expression "(0 < (int)uVar12)" ( (binary_expression "0 < (int)uVar12" number_literal < (cast_expression "(int)uVar12" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n      piVar4 = nodes->elems;\n      piVar8 = piVar4 + uVar12;\n      do {\n        iVar7 = *piVar4;\n        piVar4 = piVar4 + 1;\n        hash = hash + iVar7;\n      } while (piVar8 != piVar4);\n    }" { (expression_statement "piVar4 = nodes->elems;" (assignment_expression "piVar4 = nodes->elems" identifier = (field_expression "nodes->elems" identifier -> field_identifier)) ;) (expression_statement "piVar8 = piVar4 + uVar12;" (assignment_expression "piVar8 = piVar4 + uVar12" identifier = (binary_expression "piVar4 + uVar12" identifier + identifier)) ;) (do_statement "do {\n        iVar7 = *piVar4;\n        piVar4 = piVar4 + 1;\n        hash = hash + iVar7;\n      } while (piVar8 != piVar4);" do (compound_statement "{\n        iVar7 = *piVar4;\n        piVar4 = piVar4 + 1;\n        hash = hash + iVar7;\n      }" { (expression_statement "iVar7 = *piVar4;" (assignment_expression "iVar7 = *piVar4" identifier = (pointer_expression "*piVar4" * identifier)) ;) (expression_statement "piVar4 = piVar4 + 1;" (assignment_expression "piVar4 = piVar4 + 1" identifier = (binary_expression "piVar4 + 1" identifier + number_literal)) ;) (expression_statement "hash = hash + iVar7;" (assignment_expression "hash = hash + iVar7" identifier = (binary_expression "hash + iVar7" identifier + identifier)) ;) }) while (parenthesized_expression "(piVar8 != piVar4)" ( (binary_expression "piVar8 != piVar4" identifier != identifier) )) ;) })) (expression_statement "iVar11 = dfa->state_table[hash & dfa->state_hash_mask].num;" (assignment_expression "iVar11 = dfa->state_table[hash & dfa->state_hash_mask].num" identifier = (field_expression "dfa->state_table[hash & dfa->state_hash_mask].num" (subscript_expression "dfa->state_table[hash & dfa->state_hash_mask]" (field_expression "dfa->state_table" identifier -> field_identifier) [ (binary_expression "hash & dfa->state_hash_mask" identifier & (field_expression "dfa->state_hash_mask" identifier -> field_identifier)) ]) . field_identifier)) ;) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (if_statement "if (0 < iVar11) {\n      pprVar9 = dfa->state_table[hash & dfa->state_hash_mask].array;\nLAB_00022394:\n      do {\n        prVar13 = *pprVar9;\n        if (prVar13->hash == hash) {\n          uVar5 = (prVar13->nodes).nelem;\n          if (uVar12 != uVar5) {\n            iVar7 = iVar7 + 1;\n            pprVar9 = pprVar9 + 1;\n            if (iVar7 == iVar11) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return prVar13;\n            }\n          } while ((prVar13->nodes).elems[uVar5] == nodes->elems[uVar5]);\n        }\n        iVar7 = iVar7 + 1;\n        pprVar9 = pprVar9 + 1;\n      } while (iVar7 != iVar11);\n    }" if (parenthesized_expression "(0 < iVar11)" ( (binary_expression "0 < iVar11" number_literal < identifier) )) (compound_statement "{\n      pprVar9 = dfa->state_table[hash & dfa->state_hash_mask].array;\nLAB_00022394:\n      do {\n        prVar13 = *pprVar9;\n        if (prVar13->hash == hash) {\n          uVar5 = (prVar13->nodes).nelem;\n          if (uVar12 != uVar5) {\n            iVar7 = iVar7 + 1;\n            pprVar9 = pprVar9 + 1;\n            if (iVar7 == iVar11) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return prVar13;\n            }\n          } while ((prVar13->nodes).elems[uVar5] == nodes->elems[uVar5]);\n        }\n        iVar7 = iVar7 + 1;\n        pprVar9 = pprVar9 + 1;\n      } while (iVar7 != iVar11);\n    }" { (expression_statement "pprVar9 = dfa->state_table[hash & dfa->state_hash_mask].array;" (assignment_expression "pprVar9 = dfa->state_table[hash & dfa->state_hash_mask].array" identifier = (field_expression "dfa->state_table[hash & dfa->state_hash_mask].array" (subscript_expression "dfa->state_table[hash & dfa->state_hash_mask]" (field_expression "dfa->state_table" identifier -> field_identifier) [ (binary_expression "hash & dfa->state_hash_mask" identifier & (field_expression "dfa->state_hash_mask" identifier -> field_identifier)) ]) . field_identifier)) ;) (labeled_statement "LAB_00022394:\n      do {\n        prVar13 = *pprVar9;\n        if (prVar13->hash == hash) {\n          uVar5 = (prVar13->nodes).nelem;\n          if (uVar12 != uVar5) {\n            iVar7 = iVar7 + 1;\n            pprVar9 = pprVar9 + 1;\n            if (iVar7 == iVar11) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return prVar13;\n            }\n          } while ((prVar13->nodes).elems[uVar5] == nodes->elems[uVar5]);\n        }\n        iVar7 = iVar7 + 1;\n        pprVar9 = pprVar9 + 1;\n      } while (iVar7 != iVar11);" statement_identifier : (do_statement "do {\n        prVar13 = *pprVar9;\n        if (prVar13->hash == hash) {\n          uVar5 = (prVar13->nodes).nelem;\n          if (uVar12 != uVar5) {\n            iVar7 = iVar7 + 1;\n            pprVar9 = pprVar9 + 1;\n            if (iVar7 == iVar11) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return prVar13;\n            }\n          } while ((prVar13->nodes).elems[uVar5] == nodes->elems[uVar5]);\n        }\n        iVar7 = iVar7 + 1;\n        pprVar9 = pprVar9 + 1;\n      } while (iVar7 != iVar11);" do (compound_statement "{\n        prVar13 = *pprVar9;\n        if (prVar13->hash == hash) {\n          uVar5 = (prVar13->nodes).nelem;\n          if (uVar12 != uVar5) {\n            iVar7 = iVar7 + 1;\n            pprVar9 = pprVar9 + 1;\n            if (iVar7 == iVar11) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return prVar13;\n            }\n          } while ((prVar13->nodes).elems[uVar5] == nodes->elems[uVar5]);\n        }\n        iVar7 = iVar7 + 1;\n        pprVar9 = pprVar9 + 1;\n      }" { (expression_statement "prVar13 = *pprVar9;" (assignment_expression "prVar13 = *pprVar9" identifier = (pointer_expression "*pprVar9" * identifier)) ;) (if_statement "if (prVar13->hash == hash) {\n          uVar5 = (prVar13->nodes).nelem;\n          if (uVar12 != uVar5) {\n            iVar7 = iVar7 + 1;\n            pprVar9 = pprVar9 + 1;\n            if (iVar7 == iVar11) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return prVar13;\n            }\n          } while ((prVar13->nodes).elems[uVar5] == nodes->elems[uVar5]);\n        }" if (parenthesized_expression "(prVar13->hash == hash)" ( (binary_expression "prVar13->hash == hash" (field_expression "prVar13->hash" identifier -> field_identifier) == identifier) )) (compound_statement "{\n          uVar5 = (prVar13->nodes).nelem;\n          if (uVar12 != uVar5) {\n            iVar7 = iVar7 + 1;\n            pprVar9 = pprVar9 + 1;\n            if (iVar7 == iVar11) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return prVar13;\n            }\n          } while ((prVar13->nodes).elems[uVar5] == nodes->elems[uVar5]);\n        }" { (expression_statement "uVar5 = (prVar13->nodes).nelem;" (assignment_expression "uVar5 = (prVar13->nodes).nelem" identifier = (field_expression "(prVar13->nodes).nelem" (parenthesized_expression "(prVar13->nodes)" ( (field_expression "prVar13->nodes" identifier -> field_identifier) )) . field_identifier)) ;) (if_statement "if (uVar12 != uVar5) {\n            iVar7 = iVar7 + 1;\n            pprVar9 = pprVar9 + 1;\n            if (iVar7 == iVar11) break;\n            goto LAB_00022394;\n          }" if (parenthesized_expression "(uVar12 != uVar5)" ( (binary_expression "uVar12 != uVar5" identifier != identifier) )) (compound_statement "{\n            iVar7 = iVar7 + 1;\n            pprVar9 = pprVar9 + 1;\n            if (iVar7 == iVar11) break;\n            goto LAB_00022394;\n          }" { (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) (expression_statement "pprVar9 = pprVar9 + 1;" (assignment_expression "pprVar9 = pprVar9 + 1" identifier = (binary_expression "pprVar9 + 1" identifier + number_literal)) ;) (if_statement "if (iVar7 == iVar11) break;" if (parenthesized_expression "(iVar7 == iVar11)" ( (binary_expression "iVar7 == iVar11" identifier == identifier) )) (break_statement "break;" break ;)) (goto_statement "goto LAB_00022394;" goto statement_identifier ;) })) (do_statement "do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return prVar13;\n            }\n          } while ((prVar13->nodes).elems[uVar5] == nodes->elems[uVar5]);" do (compound_statement "{\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return prVar13;\n            }\n          }" { (expression_statement "uVar5 = uVar5 - 1;" (assignment_expression "uVar5 = uVar5 - 1" identifier = (binary_expression "uVar5 - 1" identifier - number_literal)) ;) (if_statement "if ((int)uVar5 < 0) {\n              return prVar13;\n            }" if (parenthesized_expression "((int)uVar5 < 0)" ( (binary_expression "(int)uVar5 < 0" (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n              return prVar13;\n            }" { (return_statement "return prVar13;" return identifier ;) })) }) while (parenthesized_expression "((prVar13->nodes).elems[uVar5] == nodes->elems[uVar5])" ( (binary_expression "(prVar13->nodes).elems[uVar5] == nodes->elems[uVar5]" (subscript_expression "(prVar13->nodes).elems[uVar5]" (field_expression "(prVar13->nodes).elems" (parenthesized_expression "(prVar13->nodes)" ( (field_expression "prVar13->nodes" identifier -> field_identifier) )) . field_identifier) [ identifier ]) == (subscript_expression "nodes->elems[uVar5]" (field_expression "nodes->elems" identifier -> field_identifier) [ identifier ])) )) ;) })) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) (expression_statement "pprVar9 = pprVar9 + 1;" (assignment_expression "pprVar9 = pprVar9 + 1" identifier = (binary_expression "pprVar9 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar7 != iVar11)" ( (binary_expression "iVar7 != iVar11" identifier != identifier) )) ;)) })) (expression_statement "prVar13 = (re_dfastate_t *)(*(code *)PTR_calloc_0004529c)(0x38,1);" (assignment_expression "prVar13 = (re_dfastate_t *)(*(code *)PTR_calloc_0004529c)(0x38,1)" identifier = (cast_expression "(re_dfastate_t *)(*(code *)PTR_calloc_0004529c)(0x38,1)" ( (type_descriptor "re_dfastate_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_calloc_0004529c)(0x38,1)" (parenthesized_expression "(*(code *)PTR_calloc_0004529c)" ( (pointer_expression "*(code *)PTR_calloc_0004529c" * (cast_expression "(code *)PTR_calloc_0004529c" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(0x38,1)" ( number_literal , number_literal ))))) ;) (if_statement "if (prVar13 != (re_dfastate_t *)0x0) {\n      rVar6 = re_node_set_init_copy(&prVar13->nodes,nodes);\n      if (rVar6 == _REG_NOERROR) {\n        iVar7 = nodes->nelem;\n        prVar13->entrance_nodes = &prVar13->nodes;\n        if (0 < iVar7) {\n          piVar4 = nodes->elems;\n          prVar10 = dfa->nodes;\n          piVar8 = piVar4 + iVar7;\n          do {\n            while( true ) {\n              iVar7 = *piVar4;\n              cVar1 = prVar10[iVar7].field_0x4;\n              if (cVar1 == '\x01') break;\n              uVar12 = *(uint *)&prVar10[iVar7].field_0x4;\n              bVar2 = prVar13->field_0x34;\n              bVar3 = (byte)(((*(int *)&prVar13->field_0x34 << 5 | uVar12 << 0x14) >> 0x1f) << 2);\n              prVar13->field_0x34 = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                prVar13->field_0x34 = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                prVar13->field_0x34 = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar12 & 0xffc000) != 0) {\n                  bVar2 = prVar13->field_0x34;\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar8 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)&prVar10[iVar7].field_0x4 & 0xffc000) == 0) goto LAB_00022470;\n            prVar13->field_0x34 =\n                 prVar13->field_0x34 & 0xfb |\n                 (byte)(((*(int *)&prVar13->field_0x34 << 5 |\n                         *(uint *)&prVar10[iVar7].field_0x4 << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = prVar13->field_0x34;\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            prVar13->field_0x34 = bVar2 & 0xfe | 1;\n          } while (piVar8 != piVar4);\n        }\nLAB_000224d0:\n        rVar6 = register_state(dfa,prVar13,hash);\n        if (rVar6 == _REG_NOERROR) {\n          return prVar13;\n        }\n        free_state(prVar13);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(prVar13);\n      }\n    }" if (parenthesized_expression "(prVar13 != (re_dfastate_t *)0x0)" ( (binary_expression "prVar13 != (re_dfastate_t *)0x0" identifier != (cast_expression "(re_dfastate_t *)0x0" ( (type_descriptor "re_dfastate_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      rVar6 = re_node_set_init_copy(&prVar13->nodes,nodes);\n      if (rVar6 == _REG_NOERROR) {\n        iVar7 = nodes->nelem;\n        prVar13->entrance_nodes = &prVar13->nodes;\n        if (0 < iVar7) {\n          piVar4 = nodes->elems;\n          prVar10 = dfa->nodes;\n          piVar8 = piVar4 + iVar7;\n          do {\n            while( true ) {\n              iVar7 = *piVar4;\n              cVar1 = prVar10[iVar7].field_0x4;\n              if (cVar1 == '\x01') break;\n              uVar12 = *(uint *)&prVar10[iVar7].field_0x4;\n              bVar2 = prVar13->field_0x34;\n              bVar3 = (byte)(((*(int *)&prVar13->field_0x34 << 5 | uVar12 << 0x14) >> 0x1f) << 2);\n              prVar13->field_0x34 = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                prVar13->field_0x34 = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                prVar13->field_0x34 = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar12 & 0xffc000) != 0) {\n                  bVar2 = prVar13->field_0x34;\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar8 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)&prVar10[iVar7].field_0x4 & 0xffc000) == 0) goto LAB_00022470;\n            prVar13->field_0x34 =\n                 prVar13->field_0x34 & 0xfb |\n                 (byte)(((*(int *)&prVar13->field_0x34 << 5 |\n                         *(uint *)&prVar10[iVar7].field_0x4 << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = prVar13->field_0x34;\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            prVar13->field_0x34 = bVar2 & 0xfe | 1;\n          } while (piVar8 != piVar4);\n        }\nLAB_000224d0:\n        rVar6 = register_state(dfa,prVar13,hash);\n        if (rVar6 == _REG_NOERROR) {\n          return prVar13;\n        }\n        free_state(prVar13);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(prVar13);\n      }\n    }" { (expression_statement "rVar6 = re_node_set_init_copy(&prVar13->nodes,nodes);" (assignment_expression "rVar6 = re_node_set_init_copy(&prVar13->nodes,nodes)" identifier = (call_expression "re_node_set_init_copy(&prVar13->nodes,nodes)" identifier (argument_list "(&prVar13->nodes,nodes)" ( (pointer_expression "&prVar13->nodes" & (field_expression "prVar13->nodes" identifier -> field_identifier)) , identifier )))) ;) (if_statement "if (rVar6 == _REG_NOERROR) {\n        iVar7 = nodes->nelem;\n        prVar13->entrance_nodes = &prVar13->nodes;\n        if (0 < iVar7) {\n          piVar4 = nodes->elems;\n          prVar10 = dfa->nodes;\n          piVar8 = piVar4 + iVar7;\n          do {\n            while( true ) {\n              iVar7 = *piVar4;\n              cVar1 = prVar10[iVar7].field_0x4;\n              if (cVar1 == '\x01') break;\n              uVar12 = *(uint *)&prVar10[iVar7].field_0x4;\n              bVar2 = prVar13->field_0x34;\n              bVar3 = (byte)(((*(int *)&prVar13->field_0x34 << 5 | uVar12 << 0x14) >> 0x1f) << 2);\n              prVar13->field_0x34 = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                prVar13->field_0x34 = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                prVar13->field_0x34 = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar12 & 0xffc000) != 0) {\n                  bVar2 = prVar13->field_0x34;\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar8 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)&prVar10[iVar7].field_0x4 & 0xffc000) == 0) goto LAB_00022470;\n            prVar13->field_0x34 =\n                 prVar13->field_0x34 & 0xfb |\n                 (byte)(((*(int *)&prVar13->field_0x34 << 5 |\n                         *(uint *)&prVar10[iVar7].field_0x4 << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = prVar13->field_0x34;\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            prVar13->field_0x34 = bVar2 & 0xfe | 1;\n          } while (piVar8 != piVar4);\n        }\nLAB_000224d0:\n        rVar6 = register_state(dfa,prVar13,hash);\n        if (rVar6 == _REG_NOERROR) {\n          return prVar13;\n        }\n        free_state(prVar13);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(prVar13);\n      }" if (parenthesized_expression "(rVar6 == _REG_NOERROR)" ( (binary_expression "rVar6 == _REG_NOERROR" identifier == identifier) )) (compound_statement "{\n        iVar7 = nodes->nelem;\n        prVar13->entrance_nodes = &prVar13->nodes;\n        if (0 < iVar7) {\n          piVar4 = nodes->elems;\n          prVar10 = dfa->nodes;\n          piVar8 = piVar4 + iVar7;\n          do {\n            while( true ) {\n              iVar7 = *piVar4;\n              cVar1 = prVar10[iVar7].field_0x4;\n              if (cVar1 == '\x01') break;\n              uVar12 = *(uint *)&prVar10[iVar7].field_0x4;\n              bVar2 = prVar13->field_0x34;\n              bVar3 = (byte)(((*(int *)&prVar13->field_0x34 << 5 | uVar12 << 0x14) >> 0x1f) << 2);\n              prVar13->field_0x34 = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                prVar13->field_0x34 = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                prVar13->field_0x34 = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar12 & 0xffc000) != 0) {\n                  bVar2 = prVar13->field_0x34;\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar8 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)&prVar10[iVar7].field_0x4 & 0xffc000) == 0) goto LAB_00022470;\n            prVar13->field_0x34 =\n                 prVar13->field_0x34 & 0xfb |\n                 (byte)(((*(int *)&prVar13->field_0x34 << 5 |\n                         *(uint *)&prVar10[iVar7].field_0x4 << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = prVar13->field_0x34;\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            prVar13->field_0x34 = bVar2 & 0xfe | 1;\n          } while (piVar8 != piVar4);\n        }\nLAB_000224d0:\n        rVar6 = register_state(dfa,prVar13,hash);\n        if (rVar6 == _REG_NOERROR) {\n          return prVar13;\n        }\n        free_state(prVar13);\n      }" { (expression_statement "iVar7 = nodes->nelem;" (assignment_expression "iVar7 = nodes->nelem" identifier = (field_expression "nodes->nelem" identifier -> field_identifier)) ;) (expression_statement "prVar13->entrance_nodes = &prVar13->nodes;" (assignment_expression "prVar13->entrance_nodes = &prVar13->nodes" (field_expression "prVar13->entrance_nodes" identifier -> field_identifier) = (pointer_expression "&prVar13->nodes" & (field_expression "prVar13->nodes" identifier -> field_identifier))) ;) (if_statement "if (0 < iVar7) {\n          piVar4 = nodes->elems;\n          prVar10 = dfa->nodes;\n          piVar8 = piVar4 + iVar7;\n          do {\n            while( true ) {\n              iVar7 = *piVar4;\n              cVar1 = prVar10[iVar7].field_0x4;\n              if (cVar1 == '\x01') break;\n              uVar12 = *(uint *)&prVar10[iVar7].field_0x4;\n              bVar2 = prVar13->field_0x34;\n              bVar3 = (byte)(((*(int *)&prVar13->field_0x34 << 5 | uVar12 << 0x14) >> 0x1f) << 2);\n              prVar13->field_0x34 = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                prVar13->field_0x34 = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                prVar13->field_0x34 = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar12 & 0xffc000) != 0) {\n                  bVar2 = prVar13->field_0x34;\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar8 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)&prVar10[iVar7].field_0x4 & 0xffc000) == 0) goto LAB_00022470;\n            prVar13->field_0x34 =\n                 prVar13->field_0x34 & 0xfb |\n                 (byte)(((*(int *)&prVar13->field_0x34 << 5 |\n                         *(uint *)&prVar10[iVar7].field_0x4 << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = prVar13->field_0x34;\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            prVar13->field_0x34 = bVar2 & 0xfe | 1;\n          } while (piVar8 != piVar4);\n        }" if (parenthesized_expression "(0 < iVar7)" ( (binary_expression "0 < iVar7" number_literal < identifier) )) (compound_statement "{\n          piVar4 = nodes->elems;\n          prVar10 = dfa->nodes;\n          piVar8 = piVar4 + iVar7;\n          do {\n            while( true ) {\n              iVar7 = *piVar4;\n              cVar1 = prVar10[iVar7].field_0x4;\n              if (cVar1 == '\x01') break;\n              uVar12 = *(uint *)&prVar10[iVar7].field_0x4;\n              bVar2 = prVar13->field_0x34;\n              bVar3 = (byte)(((*(int *)&prVar13->field_0x34 << 5 | uVar12 << 0x14) >> 0x1f) << 2);\n              prVar13->field_0x34 = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                prVar13->field_0x34 = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                prVar13->field_0x34 = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar12 & 0xffc000) != 0) {\n                  bVar2 = prVar13->field_0x34;\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar8 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)&prVar10[iVar7].field_0x4 & 0xffc000) == 0) goto LAB_00022470;\n            prVar13->field_0x34 =\n                 prVar13->field_0x34 & 0xfb |\n                 (byte)(((*(int *)&prVar13->field_0x34 << 5 |\n                         *(uint *)&prVar10[iVar7].field_0x4 << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = prVar13->field_0x34;\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            prVar13->field_0x34 = bVar2 & 0xfe | 1;\n          } while (piVar8 != piVar4);\n        }" { (expression_statement "piVar4 = nodes->elems;" (assignment_expression "piVar4 = nodes->elems" identifier = (field_expression "nodes->elems" identifier -> field_identifier)) ;) (expression_statement "prVar10 = dfa->nodes;" (assignment_expression "prVar10 = dfa->nodes" identifier = (field_expression "dfa->nodes" identifier -> field_identifier)) ;) (expression_statement "piVar8 = piVar4 + iVar7;" (assignment_expression "piVar8 = piVar4 + iVar7" identifier = (binary_expression "piVar4 + iVar7" identifier + identifier)) ;) (do_statement "do {\n            while( true ) {\n              iVar7 = *piVar4;\n              cVar1 = prVar10[iVar7].field_0x4;\n              if (cVar1 == '\x01') break;\n              uVar12 = *(uint *)&prVar10[iVar7].field_0x4;\n              bVar2 = prVar13->field_0x34;\n              bVar3 = (byte)(((*(int *)&prVar13->field_0x34 << 5 | uVar12 << 0x14) >> 0x1f) << 2);\n              prVar13->field_0x34 = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                prVar13->field_0x34 = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                prVar13->field_0x34 = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar12 & 0xffc000) != 0) {\n                  bVar2 = prVar13->field_0x34;\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar8 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)&prVar10[iVar7].field_0x4 & 0xffc000) == 0) goto LAB_00022470;\n            prVar13->field_0x34 =\n                 prVar13->field_0x34 & 0xfb |\n                 (byte)(((*(int *)&prVar13->field_0x34 << 5 |\n                         *(uint *)&prVar10[iVar7].field_0x4 << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = prVar13->field_0x34;\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            prVar13->field_0x34 = bVar2 & 0xfe | 1;\n          } while (piVar8 != piVar4);" do (compound_statement "{\n            while( true ) {\n              iVar7 = *piVar4;\n              cVar1 = prVar10[iVar7].field_0x4;\n              if (cVar1 == '\x01') break;\n              uVar12 = *(uint *)&prVar10[iVar7].field_0x4;\n              bVar2 = prVar13->field_0x34;\n              bVar3 = (byte)(((*(int *)&prVar13->field_0x34 << 5 | uVar12 << 0x14) >> 0x1f) << 2);\n              prVar13->field_0x34 = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                prVar13->field_0x34 = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                prVar13->field_0x34 = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar12 & 0xffc000) != 0) {\n                  bVar2 = prVar13->field_0x34;\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar8 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)&prVar10[iVar7].field_0x4 & 0xffc000) == 0) goto LAB_00022470;\n            prVar13->field_0x34 =\n                 prVar13->field_0x34 & 0xfb |\n                 (byte)(((*(int *)&prVar13->field_0x34 << 5 |\n                         *(uint *)&prVar10[iVar7].field_0x4 << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = prVar13->field_0x34;\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            prVar13->field_0x34 = bVar2 & 0xfe | 1;\n          }" { (while_statement "while( true ) {\n              iVar7 = *piVar4;\n              cVar1 = prVar10[iVar7].field_0x4;\n              if (cVar1 == '\x01') break;\n              uVar12 = *(uint *)&prVar10[iVar7].field_0x4;\n              bVar2 = prVar13->field_0x34;\n              bVar3 = (byte)(((*(int *)&prVar13->field_0x34 << 5 | uVar12 << 0x14) >> 0x1f) << 2);\n              prVar13->field_0x34 = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                prVar13->field_0x34 = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                prVar13->field_0x34 = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar12 & 0xffc000) != 0) {\n                  bVar2 = prVar13->field_0x34;\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar8 == piVar4) goto LAB_000224d0;\n            }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n              iVar7 = *piVar4;\n              cVar1 = prVar10[iVar7].field_0x4;\n              if (cVar1 == '\x01') break;\n              uVar12 = *(uint *)&prVar10[iVar7].field_0x4;\n              bVar2 = prVar13->field_0x34;\n              bVar3 = (byte)(((*(int *)&prVar13->field_0x34 << 5 | uVar12 << 0x14) >> 0x1f) << 2);\n              prVar13->field_0x34 = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                prVar13->field_0x34 = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                prVar13->field_0x34 = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar12 & 0xffc000) != 0) {\n                  bVar2 = prVar13->field_0x34;\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar8 == piVar4) goto LAB_000224d0;\n            }" { (expression_statement "iVar7 = *piVar4;" (assignment_expression "iVar7 = *piVar4" identifier = (pointer_expression "*piVar4" * identifier)) ;) (expression_statement "cVar1 = prVar10[iVar7].field_0x4;" (assignment_expression "cVar1 = prVar10[iVar7].field_0x4" identifier = (field_expression "prVar10[iVar7].field_0x4" (subscript_expression "prVar10[iVar7]" identifier [ identifier ]) . field_identifier)) ;) (if_statement "if (cVar1 == '\x01') break;" if (parenthesized_expression "(cVar1 == '\x01')" ( (binary_expression "cVar1 == '\x01'" identifier == (char_literal "'\x01'" ' escape_sequence ')) )) (break_statement "break;" break ;)) (expression_statement "uVar12 = *(uint *)&prVar10[iVar7].field_0x4;" (assignment_expression "uVar12 = *(uint *)&prVar10[iVar7].field_0x4" identifier = (pointer_expression "*(uint *)&prVar10[iVar7].field_0x4" * (cast_expression "(uint *)&prVar10[iVar7].field_0x4" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&prVar10[iVar7].field_0x4" & (field_expression "prVar10[iVar7].field_0x4" (subscript_expression "prVar10[iVar7]" identifier [ identifier ]) . field_identifier))))) ;) (expression_statement "bVar2 = prVar13->field_0x34;" (assignment_expression "bVar2 = prVar13->field_0x34" identifier = (field_expression "prVar13->field_0x34" identifier -> field_identifier)) ;) (expression_statement "bVar3 = (byte)(((*(int *)&prVar13->field_0x34 << 5 | uVar12 << 0x14) >> 0x1f) << 2);" (assignment_expression "bVar3 = (byte)(((*(int *)&prVar13->field_0x34 << 5 | uVar12 << 0x14) >> 0x1f) << 2)" identifier = (call_expression "(byte)(((*(int *)&prVar13->field_0x34 << 5 | uVar12 << 0x14) >> 0x1f) << 2)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(((*(int *)&prVar13->field_0x34 << 5 | uVar12 << 0x14) >> 0x1f) << 2)" ( (binary_expression "((*(int *)&prVar13->field_0x34 << 5 | uVar12 << 0x14) >> 0x1f) << 2" (parenthesized_expression "((*(int *)&prVar13->field_0x34 << 5 | uVar12 << 0x14) >> 0x1f)" ( (binary_expression "(*(int *)&prVar13->field_0x34 << 5 | uVar12 << 0x14) >> 0x1f" (parenthesized_expression "(*(int *)&prVar13->field_0x34 << 5 | uVar12 << 0x14)" ( (binary_expression "*(int *)&prVar13->field_0x34 << 5 | uVar12 << 0x14" (binary_expression "*(int *)&prVar13->field_0x34 << 5" (pointer_expression "*(int *)&prVar13->field_0x34" * (cast_expression "(int *)&prVar13->field_0x34" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&prVar13->field_0x34" & (field_expression "prVar13->field_0x34" identifier -> field_identifier)))) << number_literal) | (binary_expression "uVar12 << 0x14" identifier << number_literal)) )) >> number_literal) )) << number_literal) )))) ;) (expression_statement "prVar13->field_0x34 = bVar2 & 0xfb | bVar3;" (assignment_expression "prVar13->field_0x34 = bVar2 & 0xfb | bVar3" (field_expression "prVar13->field_0x34" identifier -> field_identifier) = (binary_expression "bVar2 & 0xfb | bVar3" (binary_expression "bVar2 & 0xfb" identifier & number_literal) | identifier)) ;) (if_statement "if (cVar1 == '\x02') {\n                prVar13->field_0x34 = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                prVar13->field_0x34 = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar12 & 0xffc000) != 0) {\n                  bVar2 = prVar13->field_0x34;\n                  goto LAB_000224bc;\n                }\n              }" if (parenthesized_expression "(cVar1 == '\x02')" ( (binary_expression "cVar1 == '\x02'" identifier == (char_literal "'\x02'" ' escape_sequence ')) )) (compound_statement "{\n                prVar13->field_0x34 = bVar2 & 0xf3 | bVar3 | 8;\n              }" { (expression_statement "prVar13->field_0x34 = bVar2 & 0xf3 | bVar3 | 8;" (assignment_expression "prVar13->field_0x34 = bVar2 & 0xf3 | bVar3 | 8" (field_expression "prVar13->field_0x34" identifier -> field_identifier) = (binary_expression "bVar2 & 0xf3 | bVar3 | 8" (binary_expression "bVar2 & 0xf3 | bVar3" (binary_expression "bVar2 & 0xf3" identifier & number_literal) | identifier) | number_literal)) ;) }) (else_clause "else if (cVar1 == '\x04') {\n                prVar13->field_0x34 = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar12 & 0xffc000) != 0) {\n                  bVar2 = prVar13->field_0x34;\n                  goto LAB_000224bc;\n                }\n              }" else (if_statement "if (cVar1 == '\x04') {\n                prVar13->field_0x34 = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar12 & 0xffc000) != 0) {\n                  bVar2 = prVar13->field_0x34;\n                  goto LAB_000224bc;\n                }\n              }" if (parenthesized_expression "(cVar1 == '\x04')" ( (binary_expression "cVar1 == '\x04'" identifier == (char_literal "'\x04'" ' escape_sequence ')) )) (compound_statement "{\n                prVar13->field_0x34 = bVar2 & 0xf9 | bVar3 | 2;\n              }" { (expression_statement "prVar13->field_0x34 = bVar2 & 0xf9 | bVar3 | 2;" (assignment_expression "prVar13->field_0x34 = bVar2 & 0xf9 | bVar3 | 2" (field_expression "prVar13->field_0x34" identifier -> field_identifier) = (binary_expression "bVar2 & 0xf9 | bVar3 | 2" (binary_expression "bVar2 & 0xf9 | bVar3" (binary_expression "bVar2 & 0xf9" identifier & number_literal) | identifier) | number_literal)) ;) }) (else_clause "else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar12 & 0xffc000) != 0) {\n                  bVar2 = prVar13->field_0x34;\n                  goto LAB_000224bc;\n                }\n              }" else (compound_statement "{\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar12 & 0xffc000) != 0) {\n                  bVar2 = prVar13->field_0x34;\n                  goto LAB_000224bc;\n                }\n              }" { (if_statement "if (cVar1 == '\f') goto LAB_000224b8;" if (parenthesized_expression "(cVar1 == '\f')" ( (binary_expression "cVar1 == '\f'" identifier == (char_literal "'\f'" ' escape_sequence ')) )) (goto_statement "goto LAB_000224b8;" goto statement_identifier ;)) (if_statement "if ((uVar12 & 0xffc000) != 0) {\n                  bVar2 = prVar13->field_0x34;\n                  goto LAB_000224bc;\n                }" if (parenthesized_expression "((uVar12 & 0xffc000) != 0)" ( (binary_expression "(uVar12 & 0xffc000) != 0" (parenthesized_expression "(uVar12 & 0xffc000)" ( (binary_expression "uVar12 & 0xffc000" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n                  bVar2 = prVar13->field_0x34;\n                  goto LAB_000224bc;\n                }" { (expression_statement "bVar2 = prVar13->field_0x34;" (assignment_expression "bVar2 = prVar13->field_0x34" identifier = (field_expression "prVar13->field_0x34" identifier -> field_identifier)) ;) (goto_statement "goto LAB_000224bc;" goto statement_identifier ;) })) }))))) (labeled_statement "LAB_00022470:\n              piVar4 = piVar4 + 1;" statement_identifier : (expression_statement "piVar4 = piVar4 + 1;" (assignment_expression "piVar4 = piVar4 + 1" identifier = (binary_expression "piVar4 + 1" identifier + number_literal)) ;)) (if_statement "if (piVar8 == piVar4) goto LAB_000224d0;" if (parenthesized_expression "(piVar8 == piVar4)" ( (binary_expression "piVar8 == piVar4" identifier == identifier) )) (goto_statement "goto LAB_000224d0;" goto statement_identifier ;)) })) (if_statement "if ((*(uint *)&prVar10[iVar7].field_0x4 & 0xffc000) == 0) goto LAB_00022470;" if (parenthesized_expression "((*(uint *)&prVar10[iVar7].field_0x4 & 0xffc000) == 0)" ( (binary_expression "(*(uint *)&prVar10[iVar7].field_0x4 & 0xffc000) == 0" (parenthesized_expression "(*(uint *)&prVar10[iVar7].field_0x4 & 0xffc000)" ( (binary_expression "*(uint *)&prVar10[iVar7].field_0x4 & 0xffc000" (pointer_expression "*(uint *)&prVar10[iVar7].field_0x4" * (cast_expression "(uint *)&prVar10[iVar7].field_0x4" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&prVar10[iVar7].field_0x4" & (field_expression "prVar10[iVar7].field_0x4" (subscript_expression "prVar10[iVar7]" identifier [ identifier ]) . field_identifier)))) & number_literal) )) == number_literal) )) (goto_statement "goto LAB_00022470;" goto statement_identifier ;)) (expression_statement "prVar13->field_0x34 =\n                 prVar13->field_0x34 & 0xfb |\n                 (byte)(((*(int *)&prVar13->field_0x34 << 5 |\n                         *(uint *)&prVar10[iVar7].field_0x4 << 0x14) >> 0x1f) << 2);" (assignment_expression "prVar13->field_0x34 =\n                 prVar13->field_0x34 & 0xfb |\n                 (byte)(((*(int *)&prVar13->field_0x34 << 5 |\n                         *(uint *)&prVar10[iVar7].field_0x4 << 0x14) >> 0x1f) << 2)" (field_expression "prVar13->field_0x34" identifier -> field_identifier) = (binary_expression "prVar13->field_0x34 & 0xfb |\n                 (byte)(((*(int *)&prVar13->field_0x34 << 5 |\n                         *(uint *)&prVar10[iVar7].field_0x4 << 0x14) >> 0x1f) << 2)" (binary_expression "prVar13->field_0x34 & 0xfb" (field_expression "prVar13->field_0x34" identifier -> field_identifier) & number_literal) | (call_expression "(byte)(((*(int *)&prVar13->field_0x34 << 5 |\n                         *(uint *)&prVar10[iVar7].field_0x4 << 0x14) >> 0x1f) << 2)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(((*(int *)&prVar13->field_0x34 << 5 |\n                         *(uint *)&prVar10[iVar7].field_0x4 << 0x14) >> 0x1f) << 2)" ( (binary_expression "((*(int *)&prVar13->field_0x34 << 5 |\n                         *(uint *)&prVar10[iVar7].field_0x4 << 0x14) >> 0x1f) << 2" (parenthesized_expression "((*(int *)&prVar13->field_0x34 << 5 |\n                         *(uint *)&prVar10[iVar7].field_0x4 << 0x14) >> 0x1f)" ( (binary_expression "(*(int *)&prVar13->field_0x34 << 5 |\n                         *(uint *)&prVar10[iVar7].field_0x4 << 0x14) >> 0x1f" (parenthesized_expression "(*(int *)&prVar13->field_0x34 << 5 |\n                         *(uint *)&prVar10[iVar7].field_0x4 << 0x14)" ( (binary_expression "*(int *)&prVar13->field_0x34 << 5 |\n                         *(uint *)&prVar10[iVar7].field_0x4 << 0x14" (binary_expression "*(int *)&prVar13->field_0x34 << 5" (pointer_expression "*(int *)&prVar13->field_0x34" * (cast_expression "(int *)&prVar13->field_0x34" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&prVar13->field_0x34" & (field_expression "prVar13->field_0x34" identifier -> field_identifier)))) << number_literal) | (binary_expression "*(uint *)&prVar10[iVar7].field_0x4 << 0x14" (pointer_expression "*(uint *)&prVar10[iVar7].field_0x4" * (cast_expression "(uint *)&prVar10[iVar7].field_0x4" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&prVar10[iVar7].field_0x4" & (field_expression "prVar10[iVar7].field_0x4" (subscript_expression "prVar10[iVar7]" identifier [ identifier ]) . field_identifier)))) << number_literal)) )) >> number_literal) )) << number_literal) ))))) ;) (labeled_statement "LAB_000224b8:\n            bVar2 = prVar13->field_0x34;" statement_identifier : (expression_statement "bVar2 = prVar13->field_0x34;" (assignment_expression "bVar2 = prVar13->field_0x34" identifier = (field_expression "prVar13->field_0x34" identifier -> field_identifier)) ;)) (labeled_statement "LAB_000224bc:\n            piVar4 = piVar4 + 1;" statement_identifier : (expression_statement "piVar4 = piVar4 + 1;" (assignment_expression "piVar4 = piVar4 + 1" identifier = (binary_expression "piVar4 + 1" identifier + number_literal)) ;)) (expression_statement "prVar13->field_0x34 = bVar2 & 0xfe | 1;" (assignment_expression "prVar13->field_0x34 = bVar2 & 0xfe | 1" (field_expression "prVar13->field_0x34" identifier -> field_identifier) = (binary_expression "bVar2 & 0xfe | 1" (binary_expression "bVar2 & 0xfe" identifier & number_literal) | number_literal)) ;) }) while (parenthesized_expression "(piVar8 != piVar4)" ( (binary_expression "piVar8 != piVar4" identifier != identifier) )) ;) })) (labeled_statement "LAB_000224d0:\n        rVar6 = register_state(dfa,prVar13,hash);" statement_identifier : (expression_statement "rVar6 = register_state(dfa,prVar13,hash);" (assignment_expression "rVar6 = register_state(dfa,prVar13,hash)" identifier = (call_expression "register_state(dfa,prVar13,hash)" identifier (argument_list "(dfa,prVar13,hash)" ( identifier , identifier , identifier )))) ;)) (if_statement "if (rVar6 == _REG_NOERROR) {\n          return prVar13;\n        }" if (parenthesized_expression "(rVar6 == _REG_NOERROR)" ( (binary_expression "rVar6 == _REG_NOERROR" identifier == identifier) )) (compound_statement "{\n          return prVar13;\n        }" { (return_statement "return prVar13;" return identifier ;) })) (expression_statement "free_state(prVar13);" (call_expression "free_state(prVar13)" identifier (argument_list "(prVar13)" ( identifier ))) ;) }) (else_clause "else {\n        (*(code *)PTR_free_000453bc)(prVar13);\n      }" else (compound_statement "{\n        (*(code *)PTR_free_000453bc)(prVar13);\n      }" { (expression_statement "(*(code *)PTR_free_000453bc)(prVar13);" (call_expression "(*(code *)PTR_free_000453bc)(prVar13)" (parenthesized_expression "(*(code *)PTR_free_000453bc)" ( (pointer_expression "*(code *)PTR_free_000453bc" * (cast_expression "(code *)PTR_free_000453bc" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(prVar13)" ( identifier ))) ;) }))) })) (expression_statement "*err = _REG_ESPACE;" (assignment_expression "*err = _REG_ESPACE" (pointer_expression "*err" * identifier) = identifier) ;) }))) (return_statement "return (re_dfastate_t *)0x0;" return (cast_expression "(re_dfastate_t *)0x0" ( (type_descriptor "re_dfastate_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })))
(translation_unit "uint * FUN_000222fc(undefined4 *param_1,int *param_2,int param_3)\n\n{\n  char cVar1;\n  byte bVar2;\n  byte bVar3;\n  int *piVar4;\n  uint uVar5;\n  int iVar6;\n  int *piVar7;\n  undefined4 *puVar8;\n  int iVar9;\n  uint uVar10;\n  uint *puVar11;\n  uint uVar12;\n  \n  uVar10 = *(uint *)(param_3 + 4);\n  if (uVar10 == 0) {\n    *param_1 = 0;\n  }\n  else {\n    uVar12 = uVar10;\n    if (0 < (int)uVar10) {\n      piVar4 = *(int **)(param_3 + 8);\n      piVar7 = piVar4 + uVar10;\n      do {\n        iVar6 = *piVar4;\n        piVar4 = piVar4 + 1;\n        uVar12 = uVar12 + iVar6;\n      } while (piVar7 != piVar4);\n    }\n    piVar4 = (int *)(param_2[8] + (uVar12 & param_2[0x11]) * 0xc);\n    iVar9 = *piVar4;\n    iVar6 = 0;\n    if (0 < iVar9) {\n      puVar8 = (undefined4 *)piVar4[2];\nLAB_00022394:\n      do {\n        puVar11 = (uint *)*puVar8;\n        if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }\n        iVar6 = iVar6 + 1;\n        puVar8 = puVar8 + 1;\n      } while (iVar6 != iVar9);\n    }\n    puVar11 = (uint *)(*(code *)PTR_calloc_0004529c)(0x38,1);\n    if (puVar11 != (uint *)0x0) {\n      iVar6 = FUN_00021c20(puVar11 + 1,param_3);\n      if (iVar6 == 0) {\n        iVar6 = *(int *)(param_3 + 4);\n        puVar11[10] = (uint)(puVar11 + 1);\n        if (0 < iVar6) {\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }\nLAB_000224d0:\n        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);\n        if (iVar6 == 0) {\n          return puVar11;\n        }\n        FUN_0001fecc(puVar11);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(puVar11);\n      }\n    }\n    *param_1 = 0xc;\n  }\n  return (uint *)0x0;\n}\n\n" (function_definition "uint * FUN_000222fc(undefined4 *param_1,int *param_2,int param_3)\n\n{\n  char cVar1;\n  byte bVar2;\n  byte bVar3;\n  int *piVar4;\n  uint uVar5;\n  int iVar6;\n  int *piVar7;\n  undefined4 *puVar8;\n  int iVar9;\n  uint uVar10;\n  uint *puVar11;\n  uint uVar12;\n  \n  uVar10 = *(uint *)(param_3 + 4);\n  if (uVar10 == 0) {\n    *param_1 = 0;\n  }\n  else {\n    uVar12 = uVar10;\n    if (0 < (int)uVar10) {\n      piVar4 = *(int **)(param_3 + 8);\n      piVar7 = piVar4 + uVar10;\n      do {\n        iVar6 = *piVar4;\n        piVar4 = piVar4 + 1;\n        uVar12 = uVar12 + iVar6;\n      } while (piVar7 != piVar4);\n    }\n    piVar4 = (int *)(param_2[8] + (uVar12 & param_2[0x11]) * 0xc);\n    iVar9 = *piVar4;\n    iVar6 = 0;\n    if (0 < iVar9) {\n      puVar8 = (undefined4 *)piVar4[2];\nLAB_00022394:\n      do {\n        puVar11 = (uint *)*puVar8;\n        if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }\n        iVar6 = iVar6 + 1;\n        puVar8 = puVar8 + 1;\n      } while (iVar6 != iVar9);\n    }\n    puVar11 = (uint *)(*(code *)PTR_calloc_0004529c)(0x38,1);\n    if (puVar11 != (uint *)0x0) {\n      iVar6 = FUN_00021c20(puVar11 + 1,param_3);\n      if (iVar6 == 0) {\n        iVar6 = *(int *)(param_3 + 4);\n        puVar11[10] = (uint)(puVar11 + 1);\n        if (0 < iVar6) {\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }\nLAB_000224d0:\n        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);\n        if (iVar6 == 0) {\n          return puVar11;\n        }\n        FUN_0001fecc(puVar11);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(puVar11);\n      }\n    }\n    *param_1 = 0xc;\n  }\n  return (uint *)0x0;\n}" type_identifier (pointer_declarator "* FUN_000222fc(undefined4 *param_1,int *param_2,int param_3)" * (function_declarator "FUN_000222fc(undefined4 *param_1,int *param_2,int param_3)" identifier (parameter_list "(undefined4 *param_1,int *param_2,int param_3)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) )))) (compound_statement "{\n  char cVar1;\n  byte bVar2;\n  byte bVar3;\n  int *piVar4;\n  uint uVar5;\n  int iVar6;\n  int *piVar7;\n  undefined4 *puVar8;\n  int iVar9;\n  uint uVar10;\n  uint *puVar11;\n  uint uVar12;\n  \n  uVar10 = *(uint *)(param_3 + 4);\n  if (uVar10 == 0) {\n    *param_1 = 0;\n  }\n  else {\n    uVar12 = uVar10;\n    if (0 < (int)uVar10) {\n      piVar4 = *(int **)(param_3 + 8);\n      piVar7 = piVar4 + uVar10;\n      do {\n        iVar6 = *piVar4;\n        piVar4 = piVar4 + 1;\n        uVar12 = uVar12 + iVar6;\n      } while (piVar7 != piVar4);\n    }\n    piVar4 = (int *)(param_2[8] + (uVar12 & param_2[0x11]) * 0xc);\n    iVar9 = *piVar4;\n    iVar6 = 0;\n    if (0 < iVar9) {\n      puVar8 = (undefined4 *)piVar4[2];\nLAB_00022394:\n      do {\n        puVar11 = (uint *)*puVar8;\n        if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }\n        iVar6 = iVar6 + 1;\n        puVar8 = puVar8 + 1;\n      } while (iVar6 != iVar9);\n    }\n    puVar11 = (uint *)(*(code *)PTR_calloc_0004529c)(0x38,1);\n    if (puVar11 != (uint *)0x0) {\n      iVar6 = FUN_00021c20(puVar11 + 1,param_3);\n      if (iVar6 == 0) {\n        iVar6 = *(int *)(param_3 + 4);\n        puVar11[10] = (uint)(puVar11 + 1);\n        if (0 < iVar6) {\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }\nLAB_000224d0:\n        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);\n        if (iVar6 == 0) {\n          return puVar11;\n        }\n        FUN_0001fecc(puVar11);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(puVar11);\n      }\n    }\n    *param_1 = 0xc;\n  }\n  return (uint *)0x0;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "int *piVar4;" primitive_type (pointer_declarator "*piVar4" * identifier) ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int *piVar7;" primitive_type (pointer_declarator "*piVar7" * identifier) ;) (declaration "undefined4 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "int iVar9;" primitive_type identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uint *puVar11;" type_identifier (pointer_declarator "*puVar11" * identifier) ;) (declaration "uint uVar12;" type_identifier identifier ;) (expression_statement "uVar10 = *(uint *)(param_3 + 4);" (assignment_expression "uVar10 = *(uint *)(param_3 + 4)" identifier = (pointer_expression "*(uint *)(param_3 + 4)" * (cast_expression "(uint *)(param_3 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) ))))) ;) (if_statement "if (uVar10 == 0) {\n    *param_1 = 0;\n  }\n  else {\n    uVar12 = uVar10;\n    if (0 < (int)uVar10) {\n      piVar4 = *(int **)(param_3 + 8);\n      piVar7 = piVar4 + uVar10;\n      do {\n        iVar6 = *piVar4;\n        piVar4 = piVar4 + 1;\n        uVar12 = uVar12 + iVar6;\n      } while (piVar7 != piVar4);\n    }\n    piVar4 = (int *)(param_2[8] + (uVar12 & param_2[0x11]) * 0xc);\n    iVar9 = *piVar4;\n    iVar6 = 0;\n    if (0 < iVar9) {\n      puVar8 = (undefined4 *)piVar4[2];\nLAB_00022394:\n      do {\n        puVar11 = (uint *)*puVar8;\n        if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }\n        iVar6 = iVar6 + 1;\n        puVar8 = puVar8 + 1;\n      } while (iVar6 != iVar9);\n    }\n    puVar11 = (uint *)(*(code *)PTR_calloc_0004529c)(0x38,1);\n    if (puVar11 != (uint *)0x0) {\n      iVar6 = FUN_00021c20(puVar11 + 1,param_3);\n      if (iVar6 == 0) {\n        iVar6 = *(int *)(param_3 + 4);\n        puVar11[10] = (uint)(puVar11 + 1);\n        if (0 < iVar6) {\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }\nLAB_000224d0:\n        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);\n        if (iVar6 == 0) {\n          return puVar11;\n        }\n        FUN_0001fecc(puVar11);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(puVar11);\n      }\n    }\n    *param_1 = 0xc;\n  }" if (parenthesized_expression "(uVar10 == 0)" ( (binary_expression "uVar10 == 0" identifier == number_literal) )) (compound_statement "{\n    *param_1 = 0;\n  }" { (expression_statement "*param_1 = 0;" (assignment_expression "*param_1 = 0" (pointer_expression "*param_1" * identifier) = number_literal) ;) }) (else_clause "else {\n    uVar12 = uVar10;\n    if (0 < (int)uVar10) {\n      piVar4 = *(int **)(param_3 + 8);\n      piVar7 = piVar4 + uVar10;\n      do {\n        iVar6 = *piVar4;\n        piVar4 = piVar4 + 1;\n        uVar12 = uVar12 + iVar6;\n      } while (piVar7 != piVar4);\n    }\n    piVar4 = (int *)(param_2[8] + (uVar12 & param_2[0x11]) * 0xc);\n    iVar9 = *piVar4;\n    iVar6 = 0;\n    if (0 < iVar9) {\n      puVar8 = (undefined4 *)piVar4[2];\nLAB_00022394:\n      do {\n        puVar11 = (uint *)*puVar8;\n        if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }\n        iVar6 = iVar6 + 1;\n        puVar8 = puVar8 + 1;\n      } while (iVar6 != iVar9);\n    }\n    puVar11 = (uint *)(*(code *)PTR_calloc_0004529c)(0x38,1);\n    if (puVar11 != (uint *)0x0) {\n      iVar6 = FUN_00021c20(puVar11 + 1,param_3);\n      if (iVar6 == 0) {\n        iVar6 = *(int *)(param_3 + 4);\n        puVar11[10] = (uint)(puVar11 + 1);\n        if (0 < iVar6) {\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }\nLAB_000224d0:\n        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);\n        if (iVar6 == 0) {\n          return puVar11;\n        }\n        FUN_0001fecc(puVar11);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(puVar11);\n      }\n    }\n    *param_1 = 0xc;\n  }" else (compound_statement "{\n    uVar12 = uVar10;\n    if (0 < (int)uVar10) {\n      piVar4 = *(int **)(param_3 + 8);\n      piVar7 = piVar4 + uVar10;\n      do {\n        iVar6 = *piVar4;\n        piVar4 = piVar4 + 1;\n        uVar12 = uVar12 + iVar6;\n      } while (piVar7 != piVar4);\n    }\n    piVar4 = (int *)(param_2[8] + (uVar12 & param_2[0x11]) * 0xc);\n    iVar9 = *piVar4;\n    iVar6 = 0;\n    if (0 < iVar9) {\n      puVar8 = (undefined4 *)piVar4[2];\nLAB_00022394:\n      do {\n        puVar11 = (uint *)*puVar8;\n        if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }\n        iVar6 = iVar6 + 1;\n        puVar8 = puVar8 + 1;\n      } while (iVar6 != iVar9);\n    }\n    puVar11 = (uint *)(*(code *)PTR_calloc_0004529c)(0x38,1);\n    if (puVar11 != (uint *)0x0) {\n      iVar6 = FUN_00021c20(puVar11 + 1,param_3);\n      if (iVar6 == 0) {\n        iVar6 = *(int *)(param_3 + 4);\n        puVar11[10] = (uint)(puVar11 + 1);\n        if (0 < iVar6) {\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }\nLAB_000224d0:\n        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);\n        if (iVar6 == 0) {\n          return puVar11;\n        }\n        FUN_0001fecc(puVar11);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(puVar11);\n      }\n    }\n    *param_1 = 0xc;\n  }" { (expression_statement "uVar12 = uVar10;" (assignment_expression "uVar12 = uVar10" identifier = identifier) ;) (if_statement "if (0 < (int)uVar10) {\n      piVar4 = *(int **)(param_3 + 8);\n      piVar7 = piVar4 + uVar10;\n      do {\n        iVar6 = *piVar4;\n        piVar4 = piVar4 + 1;\n        uVar12 = uVar12 + iVar6;\n      } while (piVar7 != piVar4);\n    }" if (parenthesized_expression "(0 < (int)uVar10)" ( (binary_expression "0 < (int)uVar10" number_literal < (cast_expression "(int)uVar10" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n      piVar4 = *(int **)(param_3 + 8);\n      piVar7 = piVar4 + uVar10;\n      do {\n        iVar6 = *piVar4;\n        piVar4 = piVar4 + 1;\n        uVar12 = uVar12 + iVar6;\n      } while (piVar7 != piVar4);\n    }" { (expression_statement "piVar4 = *(int **)(param_3 + 8);" (assignment_expression "piVar4 = *(int **)(param_3 + 8)" identifier = (pointer_expression "*(int **)(param_3 + 8)" * (cast_expression "(int **)(param_3 + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_3 + 8)" ( (binary_expression "param_3 + 8" identifier + number_literal) ))))) ;) (expression_statement "piVar7 = piVar4 + uVar10;" (assignment_expression "piVar7 = piVar4 + uVar10" identifier = (binary_expression "piVar4 + uVar10" identifier + identifier)) ;) (do_statement "do {\n        iVar6 = *piVar4;\n        piVar4 = piVar4 + 1;\n        uVar12 = uVar12 + iVar6;\n      } while (piVar7 != piVar4);" do (compound_statement "{\n        iVar6 = *piVar4;\n        piVar4 = piVar4 + 1;\n        uVar12 = uVar12 + iVar6;\n      }" { (expression_statement "iVar6 = *piVar4;" (assignment_expression "iVar6 = *piVar4" identifier = (pointer_expression "*piVar4" * identifier)) ;) (expression_statement "piVar4 = piVar4 + 1;" (assignment_expression "piVar4 = piVar4 + 1" identifier = (binary_expression "piVar4 + 1" identifier + number_literal)) ;) (expression_statement "uVar12 = uVar12 + iVar6;" (assignment_expression "uVar12 = uVar12 + iVar6" identifier = (binary_expression "uVar12 + iVar6" identifier + identifier)) ;) }) while (parenthesized_expression "(piVar7 != piVar4)" ( (binary_expression "piVar7 != piVar4" identifier != identifier) )) ;) })) (expression_statement "piVar4 = (int *)(param_2[8] + (uVar12 & param_2[0x11]) * 0xc);" (assignment_expression "piVar4 = (int *)(param_2[8] + (uVar12 & param_2[0x11]) * 0xc)" identifier = (cast_expression "(int *)(param_2[8] + (uVar12 & param_2[0x11]) * 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2[8] + (uVar12 & param_2[0x11]) * 0xc)" ( (binary_expression "param_2[8] + (uVar12 & param_2[0x11]) * 0xc" (subscript_expression "param_2[8]" identifier [ number_literal ]) + (binary_expression "(uVar12 & param_2[0x11]) * 0xc" (parenthesized_expression "(uVar12 & param_2[0x11])" ( (binary_expression "uVar12 & param_2[0x11]" identifier & (subscript_expression "param_2[0x11]" identifier [ number_literal ])) )) * number_literal)) )))) ;) (expression_statement "iVar9 = *piVar4;" (assignment_expression "iVar9 = *piVar4" identifier = (pointer_expression "*piVar4" * identifier)) ;) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (if_statement "if (0 < iVar9) {\n      puVar8 = (undefined4 *)piVar4[2];\nLAB_00022394:\n      do {\n        puVar11 = (uint *)*puVar8;\n        if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }\n        iVar6 = iVar6 + 1;\n        puVar8 = puVar8 + 1;\n      } while (iVar6 != iVar9);\n    }" if (parenthesized_expression "(0 < iVar9)" ( (binary_expression "0 < iVar9" number_literal < identifier) )) (compound_statement "{\n      puVar8 = (undefined4 *)piVar4[2];\nLAB_00022394:\n      do {\n        puVar11 = (uint *)*puVar8;\n        if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }\n        iVar6 = iVar6 + 1;\n        puVar8 = puVar8 + 1;\n      } while (iVar6 != iVar9);\n    }" { (expression_statement "puVar8 = (undefined4 *)piVar4[2];" (assignment_expression "puVar8 = (undefined4 *)piVar4[2]" identifier = (cast_expression "(undefined4 *)piVar4[2]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar4[2]" identifier [ number_literal ]))) ;) (labeled_statement "LAB_00022394:\n      do {\n        puVar11 = (uint *)*puVar8;\n        if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }\n        iVar6 = iVar6 + 1;\n        puVar8 = puVar8 + 1;\n      } while (iVar6 != iVar9);" statement_identifier : (do_statement "do {\n        puVar11 = (uint *)*puVar8;\n        if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }\n        iVar6 = iVar6 + 1;\n        puVar8 = puVar8 + 1;\n      } while (iVar6 != iVar9);" do (compound_statement "{\n        puVar11 = (uint *)*puVar8;\n        if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }\n        iVar6 = iVar6 + 1;\n        puVar8 = puVar8 + 1;\n      }" { (expression_statement "puVar11 = (uint *)*puVar8;" (assignment_expression "puVar11 = (uint *)*puVar8" identifier = (cast_expression "(uint *)*puVar8" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar8" * identifier))) ;) (if_statement "if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }" if (parenthesized_expression "(*puVar11 == uVar12)" ( (binary_expression "*puVar11 == uVar12" (pointer_expression "*puVar11" * identifier) == identifier) )) (compound_statement "{\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }" { (expression_statement "uVar5 = puVar11[2];" (assignment_expression "uVar5 = puVar11[2]" identifier = (subscript_expression "puVar11[2]" identifier [ number_literal ])) ;) (if_statement "if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }" if (parenthesized_expression "(uVar10 != uVar5)" ( (binary_expression "uVar10 != uVar5" identifier != identifier) )) (compound_statement "{\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }" { (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) (if_statement "if (iVar6 == iVar9) break;" if (parenthesized_expression "(iVar6 == iVar9)" ( (binary_expression "iVar6 == iVar9" identifier == identifier) )) (break_statement "break;" break ;)) (goto_statement "goto LAB_00022394;" goto statement_identifier ;) })) (do_statement "do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));" do (compound_statement "{\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          }" { (expression_statement "uVar5 = uVar5 - 1;" (assignment_expression "uVar5 = uVar5 - 1" identifier = (binary_expression "uVar5 - 1" identifier - number_literal)) ;) (if_statement "if ((int)uVar5 < 0) {\n              return puVar11;\n            }" if (parenthesized_expression "((int)uVar5 < 0)" ( (binary_expression "(int)uVar5 < 0" (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n              return puVar11;\n            }" { (return_statement "return puVar11;" return identifier ;) })) }) while (parenthesized_expression "(*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4))" ( (binary_expression "*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4)" (pointer_expression "*(int *)(puVar11[3] + uVar5 * 4)" * (cast_expression "(int *)(puVar11[3] + uVar5 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11[3] + uVar5 * 4)" ( (binary_expression "puVar11[3] + uVar5 * 4" (subscript_expression "puVar11[3]" identifier [ number_literal ]) + (binary_expression "uVar5 * 4" identifier * number_literal)) )))) == (pointer_expression "*(int *)(*(int *)(param_3 + 8) + uVar5 * 4)" * (cast_expression "(int *)(*(int *)(param_3 + 8) + uVar5 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_3 + 8) + uVar5 * 4)" ( (binary_expression "*(int *)(param_3 + 8) + uVar5 * 4" (pointer_expression "*(int *)(param_3 + 8)" * (cast_expression "(int *)(param_3 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 8)" ( (binary_expression "param_3 + 8" identifier + number_literal) )))) + (binary_expression "uVar5 * 4" identifier * number_literal)) ))))) )) ;) })) (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar6 != iVar9)" ( (binary_expression "iVar6 != iVar9" identifier != identifier) )) ;)) })) (expression_statement "puVar11 = (uint *)(*(code *)PTR_calloc_0004529c)(0x38,1);" (assignment_expression "puVar11 = (uint *)(*(code *)PTR_calloc_0004529c)(0x38,1)" identifier = (cast_expression "(uint *)(*(code *)PTR_calloc_0004529c)(0x38,1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_calloc_0004529c)(0x38,1)" (parenthesized_expression "(*(code *)PTR_calloc_0004529c)" ( (pointer_expression "*(code *)PTR_calloc_0004529c" * (cast_expression "(code *)PTR_calloc_0004529c" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(0x38,1)" ( number_literal , number_literal ))))) ;) (if_statement "if (puVar11 != (uint *)0x0) {\n      iVar6 = FUN_00021c20(puVar11 + 1,param_3);\n      if (iVar6 == 0) {\n        iVar6 = *(int *)(param_3 + 4);\n        puVar11[10] = (uint)(puVar11 + 1);\n        if (0 < iVar6) {\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }\nLAB_000224d0:\n        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);\n        if (iVar6 == 0) {\n          return puVar11;\n        }\n        FUN_0001fecc(puVar11);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(puVar11);\n      }\n    }" if (parenthesized_expression "(puVar11 != (uint *)0x0)" ( (binary_expression "puVar11 != (uint *)0x0" identifier != (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      iVar6 = FUN_00021c20(puVar11 + 1,param_3);\n      if (iVar6 == 0) {\n        iVar6 = *(int *)(param_3 + 4);\n        puVar11[10] = (uint)(puVar11 + 1);\n        if (0 < iVar6) {\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }\nLAB_000224d0:\n        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);\n        if (iVar6 == 0) {\n          return puVar11;\n        }\n        FUN_0001fecc(puVar11);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(puVar11);\n      }\n    }" { (expression_statement "iVar6 = FUN_00021c20(puVar11 + 1,param_3);" (assignment_expression "iVar6 = FUN_00021c20(puVar11 + 1,param_3)" identifier = (call_expression "FUN_00021c20(puVar11 + 1,param_3)" identifier (argument_list "(puVar11 + 1,param_3)" ( (binary_expression "puVar11 + 1" identifier + number_literal) , identifier )))) ;) (if_statement "if (iVar6 == 0) {\n        iVar6 = *(int *)(param_3 + 4);\n        puVar11[10] = (uint)(puVar11 + 1);\n        if (0 < iVar6) {\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }\nLAB_000224d0:\n        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);\n        if (iVar6 == 0) {\n          return puVar11;\n        }\n        FUN_0001fecc(puVar11);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(puVar11);\n      }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n        iVar6 = *(int *)(param_3 + 4);\n        puVar11[10] = (uint)(puVar11 + 1);\n        if (0 < iVar6) {\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }\nLAB_000224d0:\n        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);\n        if (iVar6 == 0) {\n          return puVar11;\n        }\n        FUN_0001fecc(puVar11);\n      }" { (expression_statement "iVar6 = *(int *)(param_3 + 4);" (assignment_expression "iVar6 = *(int *)(param_3 + 4)" identifier = (pointer_expression "*(int *)(param_3 + 4)" * (cast_expression "(int *)(param_3 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) ))))) ;) (expression_statement "puVar11[10] = (uint)(puVar11 + 1);" (assignment_expression "puVar11[10] = (uint)(puVar11 + 1)" (subscript_expression "puVar11[10]" identifier [ number_literal ]) = (call_expression "(uint)(puVar11 + 1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(puVar11 + 1)" ( (binary_expression "puVar11 + 1" identifier + number_literal) )))) ;) (if_statement "if (0 < iVar6) {\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }" if (parenthesized_expression "(0 < iVar6)" ( (binary_expression "0 < iVar6" number_literal < identifier) )) (compound_statement "{\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }" { (expression_statement "piVar4 = *(int **)(param_3 + 8);" (assignment_expression "piVar4 = *(int **)(param_3 + 8)" identifier = (pointer_expression "*(int **)(param_3 + 8)" * (cast_expression "(int **)(param_3 + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_3 + 8)" ( (binary_expression "param_3 + 8" identifier + number_literal) ))))) ;) (expression_statement "iVar9 = *param_2;" (assignment_expression "iVar9 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "piVar7 = piVar4 + iVar6;" (assignment_expression "piVar7 = piVar4 + iVar6" identifier = (binary_expression "piVar4 + iVar6" identifier + identifier)) ;) (do_statement "do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);" do (compound_statement "{\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          }" { (while_statement "while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }" { (expression_statement "iVar6 = iVar9 + *piVar4 * 8;" (assignment_expression "iVar6 = iVar9 + *piVar4 * 8" identifier = (binary_expression "iVar9 + *piVar4 * 8" identifier + (binary_expression "*piVar4 * 8" (pointer_expression "*piVar4" * identifier) * number_literal))) ;) (expression_statement "cVar1 = *(char *)(iVar6 + 4);" (assignment_expression "cVar1 = *(char *)(iVar6 + 4)" identifier = (pointer_expression "*(char *)(iVar6 + 4)" * (cast_expression "(char *)(iVar6 + 4)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 4)" ( (binary_expression "iVar6 + 4" identifier + number_literal) ))))) ;) (if_statement "if (cVar1 == '\x01') break;" if (parenthesized_expression "(cVar1 == '\x01')" ( (binary_expression "cVar1 == '\x01'" identifier == (char_literal "'\x01'" ' escape_sequence ')) )) (break_statement "break;" break ;)) (expression_statement "uVar10 = *(uint *)(iVar6 + 4);" (assignment_expression "uVar10 = *(uint *)(iVar6 + 4)" identifier = (pointer_expression "*(uint *)(iVar6 + 4)" * (cast_expression "(uint *)(iVar6 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 4)" ( (binary_expression "iVar6 + 4" identifier + number_literal) ))))) ;) (expression_statement "bVar2 = *(byte *)(puVar11 + 0xd);" (assignment_expression "bVar2 = *(byte *)(puVar11 + 0xd)" identifier = (pointer_expression "*(byte *)(puVar11 + 0xd)" * (cast_expression "(byte *)(puVar11 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + 0xd)" ( (binary_expression "puVar11 + 0xd" identifier + number_literal) ))))) ;) (expression_statement "bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);" (assignment_expression "bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2)" identifier = (call_expression "(byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2)" ( (binary_expression "((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2" (parenthesized_expression "((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f)" ( (binary_expression "(puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f" (parenthesized_expression "(puVar11[0xd] << 5 | uVar10 << 0x14)" ( (binary_expression "puVar11[0xd] << 5 | uVar10 << 0x14" (binary_expression "puVar11[0xd] << 5" (subscript_expression "puVar11[0xd]" identifier [ number_literal ]) << number_literal) | (binary_expression "uVar10 << 0x14" identifier << number_literal)) )) >> number_literal) )) << number_literal) )))) ;) (expression_statement "*(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;" (assignment_expression "*(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3" (pointer_expression "*(byte *)(puVar11 + 0xd)" * (cast_expression "(byte *)(puVar11 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + 0xd)" ( (binary_expression "puVar11 + 0xd" identifier + number_literal) )))) = (binary_expression "bVar2 & 0xfb | bVar3" (binary_expression "bVar2 & 0xfb" identifier & number_literal) | identifier)) ;) (if_statement "if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }" if (parenthesized_expression "(cVar1 == '\x02')" ( (binary_expression "cVar1 == '\x02'" identifier == (char_literal "'\x02'" ' escape_sequence ')) )) (compound_statement "{\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }" { (expression_statement "*(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;" (assignment_expression "*(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8" (pointer_expression "*(byte *)(puVar11 + 0xd)" * (cast_expression "(byte *)(puVar11 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + 0xd)" ( (binary_expression "puVar11 + 0xd" identifier + number_literal) )))) = (binary_expression "bVar2 & 0xf3 | bVar3 | 8" (binary_expression "bVar2 & 0xf3 | bVar3" (binary_expression "bVar2 & 0xf3" identifier & number_literal) | identifier) | number_literal)) ;) }) (else_clause "else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }" else (if_statement "if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }" if (parenthesized_expression "(cVar1 == '\x04')" ( (binary_expression "cVar1 == '\x04'" identifier == (char_literal "'\x04'" ' escape_sequence ')) )) (compound_statement "{\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }" { (expression_statement "*(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;" (assignment_expression "*(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2" (pointer_expression "*(byte *)(puVar11 + 0xd)" * (cast_expression "(byte *)(puVar11 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + 0xd)" ( (binary_expression "puVar11 + 0xd" identifier + number_literal) )))) = (binary_expression "bVar2 & 0xf9 | bVar3 | 2" (binary_expression "bVar2 & 0xf9 | bVar3" (binary_expression "bVar2 & 0xf9" identifier & number_literal) | identifier) | number_literal)) ;) }) (else_clause "else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }" else (compound_statement "{\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }" { (if_statement "if (cVar1 == '\f') goto LAB_000224b8;" if (parenthesized_expression "(cVar1 == '\f')" ( (binary_expression "cVar1 == '\f'" identifier == (char_literal "'\f'" ' escape_sequence ')) )) (goto_statement "goto LAB_000224b8;" goto statement_identifier ;)) (if_statement "if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }" if (parenthesized_expression "((uVar10 & 0xffc000) != 0)" ( (binary_expression "(uVar10 & 0xffc000) != 0" (parenthesized_expression "(uVar10 & 0xffc000)" ( (binary_expression "uVar10 & 0xffc000" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }" { (expression_statement "bVar2 = *(byte *)(puVar11 + 0xd);" (assignment_expression "bVar2 = *(byte *)(puVar11 + 0xd)" identifier = (pointer_expression "*(byte *)(puVar11 + 0xd)" * (cast_expression "(byte *)(puVar11 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + 0xd)" ( (binary_expression "puVar11 + 0xd" identifier + number_literal) ))))) ;) (goto_statement "goto LAB_000224bc;" goto statement_identifier ;) })) }))))) (labeled_statement "LAB_00022470:\n              piVar4 = piVar4 + 1;" statement_identifier : (expression_statement "piVar4 = piVar4 + 1;" (assignment_expression "piVar4 = piVar4 + 1" identifier = (binary_expression "piVar4 + 1" identifier + number_literal)) ;)) (if_statement "if (piVar7 == piVar4) goto LAB_000224d0;" if (parenthesized_expression "(piVar7 == piVar4)" ( (binary_expression "piVar7 == piVar4" identifier == identifier) )) (goto_statement "goto LAB_000224d0;" goto statement_identifier ;)) })) (if_statement "if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;" if (parenthesized_expression "((*(uint *)(iVar6 + 4) & 0xffc000) == 0)" ( (binary_expression "(*(uint *)(iVar6 + 4) & 0xffc000) == 0" (parenthesized_expression "(*(uint *)(iVar6 + 4) & 0xffc000)" ( (binary_expression "*(uint *)(iVar6 + 4) & 0xffc000" (pointer_expression "*(uint *)(iVar6 + 4)" * (cast_expression "(uint *)(iVar6 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 4)" ( (binary_expression "iVar6 + 4" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (goto_statement "goto LAB_00022470;" goto statement_identifier ;)) (expression_statement "*(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);" (assignment_expression "*(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2)" (pointer_expression "*(byte *)(puVar11 + 0xd)" * (cast_expression "(byte *)(puVar11 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + 0xd)" ( (binary_expression "puVar11 + 0xd" identifier + number_literal) )))) = (binary_expression "*(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2)" (binary_expression "*(byte *)(puVar11 + 0xd) & 0xfb" (pointer_expression "*(byte *)(puVar11 + 0xd)" * (cast_expression "(byte *)(puVar11 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + 0xd)" ( (binary_expression "puVar11 + 0xd" identifier + number_literal) )))) & number_literal) | (call_expression "(byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2)" ( (binary_expression "((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2" (parenthesized_expression "((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f)" ( (binary_expression "(puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f" (parenthesized_expression "(puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14)" ( (binary_expression "puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14" (binary_expression "puVar11[0xd] << 5" (subscript_expression "puVar11[0xd]" identifier [ number_literal ]) << number_literal) | (binary_expression "*(uint *)(iVar6 + 4) << 0x14" (pointer_expression "*(uint *)(iVar6 + 4)" * (cast_expression "(uint *)(iVar6 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 4)" ( (binary_expression "iVar6 + 4" identifier + number_literal) )))) << number_literal)) )) >> number_literal) )) << number_literal) ))))) ;) (labeled_statement "LAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);" statement_identifier : (expression_statement "bVar2 = *(byte *)(puVar11 + 0xd);" (assignment_expression "bVar2 = *(byte *)(puVar11 + 0xd)" identifier = (pointer_expression "*(byte *)(puVar11 + 0xd)" * (cast_expression "(byte *)(puVar11 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + 0xd)" ( (binary_expression "puVar11 + 0xd" identifier + number_literal) ))))) ;)) (labeled_statement "LAB_000224bc:\n            piVar4 = piVar4 + 1;" statement_identifier : (expression_statement "piVar4 = piVar4 + 1;" (assignment_expression "piVar4 = piVar4 + 1" identifier = (binary_expression "piVar4 + 1" identifier + number_literal)) ;)) (expression_statement "*(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;" (assignment_expression "*(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1" (pointer_expression "*(byte *)(puVar11 + 0xd)" * (cast_expression "(byte *)(puVar11 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + 0xd)" ( (binary_expression "puVar11 + 0xd" identifier + number_literal) )))) = (binary_expression "bVar2 & 0xfe | 1" (binary_expression "bVar2 & 0xfe" identifier & number_literal) | number_literal)) ;) }) while (parenthesized_expression "(piVar7 != piVar4)" ( (binary_expression "piVar7 != piVar4" identifier != identifier) )) ;) })) (labeled_statement "LAB_000224d0:\n        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);" statement_identifier : (expression_statement "iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);" (assignment_expression "iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12)" identifier = (call_expression "FUN_0001e7e4(param_2,puVar11,uVar12)" identifier (argument_list "(param_2,puVar11,uVar12)" ( identifier , identifier , identifier )))) ;)) (if_statement "if (iVar6 == 0) {\n          return puVar11;\n        }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n          return puVar11;\n        }" { (return_statement "return puVar11;" return identifier ;) })) (expression_statement "FUN_0001fecc(puVar11);" (call_expression "FUN_0001fecc(puVar11)" identifier (argument_list "(puVar11)" ( identifier ))) ;) }) (else_clause "else {\n        (*(code *)PTR_free_000453bc)(puVar11);\n      }" else (compound_statement "{\n        (*(code *)PTR_free_000453bc)(puVar11);\n      }" { (expression_statement "(*(code *)PTR_free_000453bc)(puVar11);" (call_expression "(*(code *)PTR_free_000453bc)(puVar11)" (parenthesized_expression "(*(code *)PTR_free_000453bc)" ( (pointer_expression "*(code *)PTR_free_000453bc" * (cast_expression "(code *)PTR_free_000453bc" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar11)" ( identifier ))) ;) }))) })) (expression_statement "*param_1 = 0xc;" (assignment_expression "*param_1 = 0xc" (pointer_expression "*param_1" * identifier) = number_literal) ;) }))) (return_statement "return (uint *)0x0;" return (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) )))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (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 + IDENT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression (parenthesized_expression ( (binary_expression IDENT & (subscript_expression IDENT [ LIT ])) )) * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (labeled_statement statement_identifier : (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (break_statement break ;)) (goto_statement goto statement_identifier ;) })) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (return_statement return IDENT ;) })) }) while (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) )))) == (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 IDENT + LIT) )))) + (binary_expression IDENT * LIT)) ))))) )) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;)) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( LIT , LIT ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT + LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression (pointer_expression * IDENT) * LIT))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) << LIT) | (binary_expression IDENT << LIT)) )) >> LIT) )) << LIT) )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (binary_expression IDENT & LIT) | IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (binary_expression (binary_expression IDENT & LIT) | IDENT) | LIT)) ;) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (binary_expression (binary_expression IDENT & LIT) | IDENT) | LIT)) ;) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (goto_statement goto statement_identifier ;) })) }))))) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (goto_statement goto statement_identifier ;)) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) | (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) << LIT) | (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) << LIT)) )) >> LIT) )) << LIT) ))))) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;)) (labeled_statement statement_identifier : (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 IDENT + LIT) )))) = (binary_expression (binary_expression IDENT & LIT) | LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT )))) ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT ))) ;) }))) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) }))) (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })))
(function_definition "uint * FUN_000222fc(undefined4 *param_1,int *param_2,int param_3)\n\n{\n  char cVar1;\n  byte bVar2;\n  byte bVar3;\n  int *piVar4;\n  uint uVar5;\n  int iVar6;\n  int *piVar7;\n  undefined4 *puVar8;\n  int iVar9;\n  uint uVar10;\n  uint *puVar11;\n  uint uVar12;\n  \n  uVar10 = *(uint *)(param_3 + 4);\n  if (uVar10 == 0) {\n    *param_1 = 0;\n  }\n  else {\n    uVar12 = uVar10;\n    if (0 < (int)uVar10) {\n      piVar4 = *(int **)(param_3 + 8);\n      piVar7 = piVar4 + uVar10;\n      do {\n        iVar6 = *piVar4;\n        piVar4 = piVar4 + 1;\n        uVar12 = uVar12 + iVar6;\n      } while (piVar7 != piVar4);\n    }\n    piVar4 = (int *)(param_2[8] + (uVar12 & param_2[0x11]) * 0xc);\n    iVar9 = *piVar4;\n    iVar6 = 0;\n    if (0 < iVar9) {\n      puVar8 = (undefined4 *)piVar4[2];\nLAB_00022394:\n      do {\n        puVar11 = (uint *)*puVar8;\n        if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }\n        iVar6 = iVar6 + 1;\n        puVar8 = puVar8 + 1;\n      } while (iVar6 != iVar9);\n    }\n    puVar11 = (uint *)(*(code *)PTR_calloc_0004529c)(0x38,1);\n    if (puVar11 != (uint *)0x0) {\n      iVar6 = FUN_00021c20(puVar11 + 1,param_3);\n      if (iVar6 == 0) {\n        iVar6 = *(int *)(param_3 + 4);\n        puVar11[10] = (uint)(puVar11 + 1);\n        if (0 < iVar6) {\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }\nLAB_000224d0:\n        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);\n        if (iVar6 == 0) {\n          return puVar11;\n        }\n        FUN_0001fecc(puVar11);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(puVar11);\n      }\n    }\n    *param_1 = 0xc;\n  }\n  return (uint *)0x0;\n}" (type_identifier "uint") (pointer_declarator "* FUN_000222fc(undefined4 *param_1,int *param_2,int param_3)" (* "*") (function_declarator "FUN_000222fc(undefined4 *param_1,int *param_2,int param_3)" (identifier "FUN_000222fc") (parameter_list "(undefined4 *param_1,int *param_2,int param_3)" (( "(") (parameter_declaration "undefined4 *param_1" (type_identifier "undefined4") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int *param_2" (primitive_type "int") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) () ")")))) (compound_statement "{\n  char cVar1;\n  byte bVar2;\n  byte bVar3;\n  int *piVar4;\n  uint uVar5;\n  int iVar6;\n  int *piVar7;\n  undefined4 *puVar8;\n  int iVar9;\n  uint uVar10;\n  uint *puVar11;\n  uint uVar12;\n  \n  uVar10 = *(uint *)(param_3 + 4);\n  if (uVar10 == 0) {\n    *param_1 = 0;\n  }\n  else {\n    uVar12 = uVar10;\n    if (0 < (int)uVar10) {\n      piVar4 = *(int **)(param_3 + 8);\n      piVar7 = piVar4 + uVar10;\n      do {\n        iVar6 = *piVar4;\n        piVar4 = piVar4 + 1;\n        uVar12 = uVar12 + iVar6;\n      } while (piVar7 != piVar4);\n    }\n    piVar4 = (int *)(param_2[8] + (uVar12 & param_2[0x11]) * 0xc);\n    iVar9 = *piVar4;\n    iVar6 = 0;\n    if (0 < iVar9) {\n      puVar8 = (undefined4 *)piVar4[2];\nLAB_00022394:\n      do {\n        puVar11 = (uint *)*puVar8;\n        if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }\n        iVar6 = iVar6 + 1;\n        puVar8 = puVar8 + 1;\n      } while (iVar6 != iVar9);\n    }\n    puVar11 = (uint *)(*(code *)PTR_calloc_0004529c)(0x38,1);\n    if (puVar11 != (uint *)0x0) {\n      iVar6 = FUN_00021c20(puVar11 + 1,param_3);\n      if (iVar6 == 0) {\n        iVar6 = *(int *)(param_3 + 4);\n        puVar11[10] = (uint)(puVar11 + 1);\n        if (0 < iVar6) {\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }\nLAB_000224d0:\n        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);\n        if (iVar6 == 0) {\n          return puVar11;\n        }\n        FUN_0001fecc(puVar11);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(puVar11);\n      }\n    }\n    *param_1 = 0xc;\n  }\n  return (uint *)0x0;\n}" ({ "{") (declaration "char cVar1;" (primitive_type "char") (identifier "cVar1") (; ";")) (declaration "byte bVar2;" (type_identifier "byte") (identifier "bVar2") (; ";")) (declaration "byte bVar3;" (type_identifier "byte") (identifier "bVar3") (; ";")) (declaration "int *piVar4;" (primitive_type "int") (pointer_declarator "*piVar4" (* "*") (identifier "piVar4")) (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "int *piVar7;" (primitive_type "int") (pointer_declarator "*piVar7" (* "*") (identifier "piVar7")) (; ";")) (declaration "undefined4 *puVar8;" (type_identifier "undefined4") (pointer_declarator "*puVar8" (* "*") (identifier "puVar8")) (; ";")) (declaration "int iVar9;" (primitive_type "int") (identifier "iVar9") (; ";")) (declaration "uint uVar10;" (type_identifier "uint") (identifier "uVar10") (; ";")) (declaration "uint *puVar11;" (type_identifier "uint") (pointer_declarator "*puVar11" (* "*") (identifier "puVar11")) (; ";")) (declaration "uint uVar12;" (type_identifier "uint") (identifier "uVar12") (; ";")) (expression_statement "uVar10 = *(uint *)(param_3 + 4);" (assignment_expression "uVar10 = *(uint *)(param_3 + 4)" (identifier "uVar10") (= "=") (pointer_expression "*(uint *)(param_3 + 4)" (* "*") (cast_expression "(uint *)(param_3 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 4)" (( "(") (binary_expression "param_3 + 4" (identifier "param_3") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (if_statement "if (uVar10 == 0) {\n    *param_1 = 0;\n  }\n  else {\n    uVar12 = uVar10;\n    if (0 < (int)uVar10) {\n      piVar4 = *(int **)(param_3 + 8);\n      piVar7 = piVar4 + uVar10;\n      do {\n        iVar6 = *piVar4;\n        piVar4 = piVar4 + 1;\n        uVar12 = uVar12 + iVar6;\n      } while (piVar7 != piVar4);\n    }\n    piVar4 = (int *)(param_2[8] + (uVar12 & param_2[0x11]) * 0xc);\n    iVar9 = *piVar4;\n    iVar6 = 0;\n    if (0 < iVar9) {\n      puVar8 = (undefined4 *)piVar4[2];\nLAB_00022394:\n      do {\n        puVar11 = (uint *)*puVar8;\n        if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }\n        iVar6 = iVar6 + 1;\n        puVar8 = puVar8 + 1;\n      } while (iVar6 != iVar9);\n    }\n    puVar11 = (uint *)(*(code *)PTR_calloc_0004529c)(0x38,1);\n    if (puVar11 != (uint *)0x0) {\n      iVar6 = FUN_00021c20(puVar11 + 1,param_3);\n      if (iVar6 == 0) {\n        iVar6 = *(int *)(param_3 + 4);\n        puVar11[10] = (uint)(puVar11 + 1);\n        if (0 < iVar6) {\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }\nLAB_000224d0:\n        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);\n        if (iVar6 == 0) {\n          return puVar11;\n        }\n        FUN_0001fecc(puVar11);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(puVar11);\n      }\n    }\n    *param_1 = 0xc;\n  }" (if "if") (parenthesized_expression "(uVar10 == 0)" (( "(") (binary_expression "uVar10 == 0" (identifier "uVar10") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    *param_1 = 0;\n  }" ({ "{") (expression_statement "*param_1 = 0;" (assignment_expression "*param_1 = 0" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n    uVar12 = uVar10;\n    if (0 < (int)uVar10) {\n      piVar4 = *(int **)(param_3 + 8);\n      piVar7 = piVar4 + uVar10;\n      do {\n        iVar6 = *piVar4;\n        piVar4 = piVar4 + 1;\n        uVar12 = uVar12 + iVar6;\n      } while (piVar7 != piVar4);\n    }\n    piVar4 = (int *)(param_2[8] + (uVar12 & param_2[0x11]) * 0xc);\n    iVar9 = *piVar4;\n    iVar6 = 0;\n    if (0 < iVar9) {\n      puVar8 = (undefined4 *)piVar4[2];\nLAB_00022394:\n      do {\n        puVar11 = (uint *)*puVar8;\n        if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }\n        iVar6 = iVar6 + 1;\n        puVar8 = puVar8 + 1;\n      } while (iVar6 != iVar9);\n    }\n    puVar11 = (uint *)(*(code *)PTR_calloc_0004529c)(0x38,1);\n    if (puVar11 != (uint *)0x0) {\n      iVar6 = FUN_00021c20(puVar11 + 1,param_3);\n      if (iVar6 == 0) {\n        iVar6 = *(int *)(param_3 + 4);\n        puVar11[10] = (uint)(puVar11 + 1);\n        if (0 < iVar6) {\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }\nLAB_000224d0:\n        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);\n        if (iVar6 == 0) {\n          return puVar11;\n        }\n        FUN_0001fecc(puVar11);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(puVar11);\n      }\n    }\n    *param_1 = 0xc;\n  }" (else "else") (compound_statement "{\n    uVar12 = uVar10;\n    if (0 < (int)uVar10) {\n      piVar4 = *(int **)(param_3 + 8);\n      piVar7 = piVar4 + uVar10;\n      do {\n        iVar6 = *piVar4;\n        piVar4 = piVar4 + 1;\n        uVar12 = uVar12 + iVar6;\n      } while (piVar7 != piVar4);\n    }\n    piVar4 = (int *)(param_2[8] + (uVar12 & param_2[0x11]) * 0xc);\n    iVar9 = *piVar4;\n    iVar6 = 0;\n    if (0 < iVar9) {\n      puVar8 = (undefined4 *)piVar4[2];\nLAB_00022394:\n      do {\n        puVar11 = (uint *)*puVar8;\n        if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }\n        iVar6 = iVar6 + 1;\n        puVar8 = puVar8 + 1;\n      } while (iVar6 != iVar9);\n    }\n    puVar11 = (uint *)(*(code *)PTR_calloc_0004529c)(0x38,1);\n    if (puVar11 != (uint *)0x0) {\n      iVar6 = FUN_00021c20(puVar11 + 1,param_3);\n      if (iVar6 == 0) {\n        iVar6 = *(int *)(param_3 + 4);\n        puVar11[10] = (uint)(puVar11 + 1);\n        if (0 < iVar6) {\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }\nLAB_000224d0:\n        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);\n        if (iVar6 == 0) {\n          return puVar11;\n        }\n        FUN_0001fecc(puVar11);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(puVar11);\n      }\n    }\n    *param_1 = 0xc;\n  }" ({ "{") (expression_statement "uVar12 = uVar10;" (assignment_expression "uVar12 = uVar10" (identifier "uVar12") (= "=") (identifier "uVar10")) (; ";")) (if_statement "if (0 < (int)uVar10) {\n      piVar4 = *(int **)(param_3 + 8);\n      piVar7 = piVar4 + uVar10;\n      do {\n        iVar6 = *piVar4;\n        piVar4 = piVar4 + 1;\n        uVar12 = uVar12 + iVar6;\n      } while (piVar7 != piVar4);\n    }" (if "if") (parenthesized_expression "(0 < (int)uVar10)" (( "(") (binary_expression "0 < (int)uVar10" (number_literal "0") (< "<") (cast_expression "(int)uVar10" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar10"))) () ")")) (compound_statement "{\n      piVar4 = *(int **)(param_3 + 8);\n      piVar7 = piVar4 + uVar10;\n      do {\n        iVar6 = *piVar4;\n        piVar4 = piVar4 + 1;\n        uVar12 = uVar12 + iVar6;\n      } while (piVar7 != piVar4);\n    }" ({ "{") (expression_statement "piVar4 = *(int **)(param_3 + 8);" (assignment_expression "piVar4 = *(int **)(param_3 + 8)" (identifier "piVar4") (= "=") (pointer_expression "*(int **)(param_3 + 8)" (* "*") (cast_expression "(int **)(param_3 + 8)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_3 + 8)" (( "(") (binary_expression "param_3 + 8" (identifier "param_3") (+ "+") (number_literal "8")) () ")"))))) (; ";")) (expression_statement "piVar7 = piVar4 + uVar10;" (assignment_expression "piVar7 = piVar4 + uVar10" (identifier "piVar7") (= "=") (binary_expression "piVar4 + uVar10" (identifier "piVar4") (+ "+") (identifier "uVar10"))) (; ";")) (do_statement "do {\n        iVar6 = *piVar4;\n        piVar4 = piVar4 + 1;\n        uVar12 = uVar12 + iVar6;\n      } while (piVar7 != piVar4);" (do "do") (compound_statement "{\n        iVar6 = *piVar4;\n        piVar4 = piVar4 + 1;\n        uVar12 = uVar12 + iVar6;\n      }" ({ "{") (expression_statement "iVar6 = *piVar4;" (assignment_expression "iVar6 = *piVar4" (identifier "iVar6") (= "=") (pointer_expression "*piVar4" (* "*") (identifier "piVar4"))) (; ";")) (expression_statement "piVar4 = piVar4 + 1;" (assignment_expression "piVar4 = piVar4 + 1" (identifier "piVar4") (= "=") (binary_expression "piVar4 + 1" (identifier "piVar4") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar12 = uVar12 + iVar6;" (assignment_expression "uVar12 = uVar12 + iVar6" (identifier "uVar12") (= "=") (binary_expression "uVar12 + iVar6" (identifier "uVar12") (+ "+") (identifier "iVar6"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(piVar7 != piVar4)" (( "(") (binary_expression "piVar7 != piVar4" (identifier "piVar7") (!= "!=") (identifier "piVar4")) () ")")) (; ";")) (} "}"))) (expression_statement "piVar4 = (int *)(param_2[8] + (uVar12 & param_2[0x11]) * 0xc);" (assignment_expression "piVar4 = (int *)(param_2[8] + (uVar12 & param_2[0x11]) * 0xc)" (identifier "piVar4") (= "=") (cast_expression "(int *)(param_2[8] + (uVar12 & param_2[0x11]) * 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2[8] + (uVar12 & param_2[0x11]) * 0xc)" (( "(") (binary_expression "param_2[8] + (uVar12 & param_2[0x11]) * 0xc" (subscript_expression "param_2[8]" (identifier "param_2") ([ "[") (number_literal "8") (] "]")) (+ "+") (binary_expression "(uVar12 & param_2[0x11]) * 0xc" (parenthesized_expression "(uVar12 & param_2[0x11])" (( "(") (binary_expression "uVar12 & param_2[0x11]" (identifier "uVar12") (& "&") (subscript_expression "param_2[0x11]" (identifier "param_2") ([ "[") (number_literal "0x11") (] "]"))) () ")")) (* "*") (number_literal "0xc"))) () ")")))) (; ";")) (expression_statement "iVar9 = *piVar4;" (assignment_expression "iVar9 = *piVar4" (identifier "iVar9") (= "=") (pointer_expression "*piVar4" (* "*") (identifier "piVar4"))) (; ";")) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" (identifier "iVar6") (= "=") (number_literal "0")) (; ";")) (if_statement "if (0 < iVar9) {\n      puVar8 = (undefined4 *)piVar4[2];\nLAB_00022394:\n      do {\n        puVar11 = (uint *)*puVar8;\n        if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }\n        iVar6 = iVar6 + 1;\n        puVar8 = puVar8 + 1;\n      } while (iVar6 != iVar9);\n    }" (if "if") (parenthesized_expression "(0 < iVar9)" (( "(") (binary_expression "0 < iVar9" (number_literal "0") (< "<") (identifier "iVar9")) () ")")) (compound_statement "{\n      puVar8 = (undefined4 *)piVar4[2];\nLAB_00022394:\n      do {\n        puVar11 = (uint *)*puVar8;\n        if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }\n        iVar6 = iVar6 + 1;\n        puVar8 = puVar8 + 1;\n      } while (iVar6 != iVar9);\n    }" ({ "{") (expression_statement "puVar8 = (undefined4 *)piVar4[2];" (assignment_expression "puVar8 = (undefined4 *)piVar4[2]" (identifier "puVar8") (= "=") (cast_expression "(undefined4 *)piVar4[2]" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar4[2]" (identifier "piVar4") ([ "[") (number_literal "2") (] "]")))) (; ";")) (labeled_statement "LAB_00022394:\n      do {\n        puVar11 = (uint *)*puVar8;\n        if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }\n        iVar6 = iVar6 + 1;\n        puVar8 = puVar8 + 1;\n      } while (iVar6 != iVar9);" (statement_identifier "LAB_00022394") (: ":") (do_statement "do {\n        puVar11 = (uint *)*puVar8;\n        if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }\n        iVar6 = iVar6 + 1;\n        puVar8 = puVar8 + 1;\n      } while (iVar6 != iVar9);" (do "do") (compound_statement "{\n        puVar11 = (uint *)*puVar8;\n        if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }\n        iVar6 = iVar6 + 1;\n        puVar8 = puVar8 + 1;\n      }" ({ "{") (expression_statement "puVar11 = (uint *)*puVar8;" (assignment_expression "puVar11 = (uint *)*puVar8" (identifier "puVar11") (= "=") (cast_expression "(uint *)*puVar8" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar8" (* "*") (identifier "puVar8")))) (; ";")) (if_statement "if (*puVar11 == uVar12) {\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }" (if "if") (parenthesized_expression "(*puVar11 == uVar12)" (( "(") (binary_expression "*puVar11 == uVar12" (pointer_expression "*puVar11" (* "*") (identifier "puVar11")) (== "==") (identifier "uVar12")) () ")")) (compound_statement "{\n          uVar5 = puVar11[2];\n          if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }\n          do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));\n        }" ({ "{") (expression_statement "uVar5 = puVar11[2];" (assignment_expression "uVar5 = puVar11[2]" (identifier "uVar5") (= "=") (subscript_expression "puVar11[2]" (identifier "puVar11") ([ "[") (number_literal "2") (] "]"))) (; ";")) (if_statement "if (uVar10 != uVar5) {\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }" (if "if") (parenthesized_expression "(uVar10 != uVar5)" (( "(") (binary_expression "uVar10 != uVar5" (identifier "uVar10") (!= "!=") (identifier "uVar5")) () ")")) (compound_statement "{\n            iVar6 = iVar6 + 1;\n            puVar8 = puVar8 + 1;\n            if (iVar6 == iVar9) break;\n            goto LAB_00022394;\n          }" ({ "{") (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" (identifier "iVar6") (= "=") (binary_expression "iVar6 + 1" (identifier "iVar6") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" (identifier "puVar8") (= "=") (binary_expression "puVar8 + 1" (identifier "puVar8") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (iVar6 == iVar9) break;" (if "if") (parenthesized_expression "(iVar6 == iVar9)" (( "(") (binary_expression "iVar6 == iVar9" (identifier "iVar6") (== "==") (identifier "iVar9")) () ")")) (break_statement "break;" (break "break") (; ";"))) (goto_statement "goto LAB_00022394;" (goto "goto") (statement_identifier "LAB_00022394") (; ";")) (} "}"))) (do_statement "do {\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));" (do "do") (compound_statement "{\n            uVar5 = uVar5 - 1;\n            if ((int)uVar5 < 0) {\n              return puVar11;\n            }\n          }" ({ "{") (expression_statement "uVar5 = uVar5 - 1;" (assignment_expression "uVar5 = uVar5 - 1" (identifier "uVar5") (= "=") (binary_expression "uVar5 - 1" (identifier "uVar5") (- "-") (number_literal "1"))) (; ";")) (if_statement "if ((int)uVar5 < 0) {\n              return puVar11;\n            }" (if "if") (parenthesized_expression "((int)uVar5 < 0)" (( "(") (binary_expression "(int)uVar5 < 0" (cast_expression "(int)uVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar5")) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n              return puVar11;\n            }" ({ "{") (return_statement "return puVar11;" (return "return") (identifier "puVar11") (; ";")) (} "}"))) (} "}")) (while "while") (parenthesized_expression "(*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4))" (( "(") (binary_expression "*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4)" (pointer_expression "*(int *)(puVar11[3] + uVar5 * 4)" (* "*") (cast_expression "(int *)(puVar11[3] + uVar5 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar11[3] + uVar5 * 4)" (( "(") (binary_expression "puVar11[3] + uVar5 * 4" (subscript_expression "puVar11[3]" (identifier "puVar11") ([ "[") (number_literal "3") (] "]")) (+ "+") (binary_expression "uVar5 * 4" (identifier "uVar5") (* "*") (number_literal "4"))) () ")")))) (== "==") (pointer_expression "*(int *)(*(int *)(param_3 + 8) + uVar5 * 4)" (* "*") (cast_expression "(int *)(*(int *)(param_3 + 8) + uVar5 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_3 + 8) + uVar5 * 4)" (( "(") (binary_expression "*(int *)(param_3 + 8) + uVar5 * 4" (pointer_expression "*(int *)(param_3 + 8)" (* "*") (cast_expression "(int *)(param_3 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 8)" (( "(") (binary_expression "param_3 + 8" (identifier "param_3") (+ "+") (number_literal "8")) () ")")))) (+ "+") (binary_expression "uVar5 * 4" (identifier "uVar5") (* "*") (number_literal "4"))) () ")"))))) () ")")) (; ";")) (} "}"))) (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" (identifier "iVar6") (= "=") (binary_expression "iVar6 + 1" (identifier "iVar6") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" (identifier "puVar8") (= "=") (binary_expression "puVar8 + 1" (identifier "puVar8") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar6 != iVar9)" (( "(") (binary_expression "iVar6 != iVar9" (identifier "iVar6") (!= "!=") (identifier "iVar9")) () ")")) (; ";"))) (} "}"))) (expression_statement "puVar11 = (uint *)(*(code *)PTR_calloc_0004529c)(0x38,1);" (assignment_expression "puVar11 = (uint *)(*(code *)PTR_calloc_0004529c)(0x38,1)" (identifier "puVar11") (= "=") (cast_expression "(uint *)(*(code *)PTR_calloc_0004529c)(0x38,1)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(*(code *)PTR_calloc_0004529c)(0x38,1)" (parenthesized_expression "(*(code *)PTR_calloc_0004529c)" (( "(") (pointer_expression "*(code *)PTR_calloc_0004529c" (* "*") (cast_expression "(code *)PTR_calloc_0004529c" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_calloc_0004529c"))) () ")")) (argument_list "(0x38,1)" (( "(") (number_literal "0x38") (, ",") (number_literal "1") () ")"))))) (; ";")) (if_statement "if (puVar11 != (uint *)0x0) {\n      iVar6 = FUN_00021c20(puVar11 + 1,param_3);\n      if (iVar6 == 0) {\n        iVar6 = *(int *)(param_3 + 4);\n        puVar11[10] = (uint)(puVar11 + 1);\n        if (0 < iVar6) {\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }\nLAB_000224d0:\n        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);\n        if (iVar6 == 0) {\n          return puVar11;\n        }\n        FUN_0001fecc(puVar11);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(puVar11);\n      }\n    }" (if "if") (parenthesized_expression "(puVar11 != (uint *)0x0)" (( "(") (binary_expression "puVar11 != (uint *)0x0" (identifier "puVar11") (!= "!=") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      iVar6 = FUN_00021c20(puVar11 + 1,param_3);\n      if (iVar6 == 0) {\n        iVar6 = *(int *)(param_3 + 4);\n        puVar11[10] = (uint)(puVar11 + 1);\n        if (0 < iVar6) {\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }\nLAB_000224d0:\n        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);\n        if (iVar6 == 0) {\n          return puVar11;\n        }\n        FUN_0001fecc(puVar11);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(puVar11);\n      }\n    }" ({ "{") (expression_statement "iVar6 = FUN_00021c20(puVar11 + 1,param_3);" (assignment_expression "iVar6 = FUN_00021c20(puVar11 + 1,param_3)" (identifier "iVar6") (= "=") (call_expression "FUN_00021c20(puVar11 + 1,param_3)" (identifier "FUN_00021c20") (argument_list "(puVar11 + 1,param_3)" (( "(") (binary_expression "puVar11 + 1" (identifier "puVar11") (+ "+") (number_literal "1")) (, ",") (identifier "param_3") () ")")))) (; ";")) (if_statement "if (iVar6 == 0) {\n        iVar6 = *(int *)(param_3 + 4);\n        puVar11[10] = (uint)(puVar11 + 1);\n        if (0 < iVar6) {\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }\nLAB_000224d0:\n        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);\n        if (iVar6 == 0) {\n          return puVar11;\n        }\n        FUN_0001fecc(puVar11);\n      }\n      else {\n        (*(code *)PTR_free_000453bc)(puVar11);\n      }" (if "if") (parenthesized_expression "(iVar6 == 0)" (( "(") (binary_expression "iVar6 == 0" (identifier "iVar6") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        iVar6 = *(int *)(param_3 + 4);\n        puVar11[10] = (uint)(puVar11 + 1);\n        if (0 < iVar6) {\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }\nLAB_000224d0:\n        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);\n        if (iVar6 == 0) {\n          return puVar11;\n        }\n        FUN_0001fecc(puVar11);\n      }" ({ "{") (expression_statement "iVar6 = *(int *)(param_3 + 4);" (assignment_expression "iVar6 = *(int *)(param_3 + 4)" (identifier "iVar6") (= "=") (pointer_expression "*(int *)(param_3 + 4)" (* "*") (cast_expression "(int *)(param_3 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 4)" (( "(") (binary_expression "param_3 + 4" (identifier "param_3") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (expression_statement "puVar11[10] = (uint)(puVar11 + 1);" (assignment_expression "puVar11[10] = (uint)(puVar11 + 1)" (subscript_expression "puVar11[10]" (identifier "puVar11") ([ "[") (number_literal "10") (] "]")) (= "=") (call_expression "(uint)(puVar11 + 1)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(puVar11 + 1)" (( "(") (binary_expression "puVar11 + 1" (identifier "puVar11") (+ "+") (number_literal "1")) () ")")))) (; ";")) (if_statement "if (0 < iVar6) {\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }" (if "if") (parenthesized_expression "(0 < iVar6)" (( "(") (binary_expression "0 < iVar6" (number_literal "0") (< "<") (identifier "iVar6")) () ")")) (compound_statement "{\n          piVar4 = *(int **)(param_3 + 8);\n          iVar9 = *param_2;\n          piVar7 = piVar4 + iVar6;\n          do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);\n        }" ({ "{") (expression_statement "piVar4 = *(int **)(param_3 + 8);" (assignment_expression "piVar4 = *(int **)(param_3 + 8)" (identifier "piVar4") (= "=") (pointer_expression "*(int **)(param_3 + 8)" (* "*") (cast_expression "(int **)(param_3 + 8)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_3 + 8)" (( "(") (binary_expression "param_3 + 8" (identifier "param_3") (+ "+") (number_literal "8")) () ")"))))) (; ";")) (expression_statement "iVar9 = *param_2;" (assignment_expression "iVar9 = *param_2" (identifier "iVar9") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "piVar7 = piVar4 + iVar6;" (assignment_expression "piVar7 = piVar4 + iVar6" (identifier "piVar7") (= "=") (binary_expression "piVar4 + iVar6" (identifier "piVar4") (+ "+") (identifier "iVar6"))) (; ";")) (do_statement "do {\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          } while (piVar7 != piVar4);" (do "do") (compound_statement "{\n            while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }\n            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;\n            *(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);\nLAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);\nLAB_000224bc:\n            piVar4 = piVar4 + 1;\n            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;\n          }" ({ "{") (while_statement "while( true ) {\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n              iVar6 = iVar9 + *piVar4 * 8;\n              cVar1 = *(char *)(iVar6 + 4);\n              if (cVar1 == '\x01') break;\n              uVar10 = *(uint *)(iVar6 + 4);\n              bVar2 = *(byte *)(puVar11 + 0xd);\n              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);\n              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;\n              if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }\nLAB_00022470:\n              piVar4 = piVar4 + 1;\n              if (piVar7 == piVar4) goto LAB_000224d0;\n            }" ({ "{") (expression_statement "iVar6 = iVar9 + *piVar4 * 8;" (assignment_expression "iVar6 = iVar9 + *piVar4 * 8" (identifier "iVar6") (= "=") (binary_expression "iVar9 + *piVar4 * 8" (identifier "iVar9") (+ "+") (binary_expression "*piVar4 * 8" (pointer_expression "*piVar4" (* "*") (identifier "piVar4")) (* "*") (number_literal "8")))) (; ";")) (expression_statement "cVar1 = *(char *)(iVar6 + 4);" (assignment_expression "cVar1 = *(char *)(iVar6 + 4)" (identifier "cVar1") (= "=") (pointer_expression "*(char *)(iVar6 + 4)" (* "*") (cast_expression "(char *)(iVar6 + 4)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar6 + 4)" (( "(") (binary_expression "iVar6 + 4" (identifier "iVar6") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (if_statement "if (cVar1 == '\x01') break;" (if "if") (parenthesized_expression "(cVar1 == '\x01')" (( "(") (binary_expression "cVar1 == '\x01'" (identifier "cVar1") (== "==") (char_literal "'\x01'" (' "'") (escape_sequence "\x01") (' "'"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar10 = *(uint *)(iVar6 + 4);" (assignment_expression "uVar10 = *(uint *)(iVar6 + 4)" (identifier "uVar10") (= "=") (pointer_expression "*(uint *)(iVar6 + 4)" (* "*") (cast_expression "(uint *)(iVar6 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar6 + 4)" (( "(") (binary_expression "iVar6 + 4" (identifier "iVar6") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (expression_statement "bVar2 = *(byte *)(puVar11 + 0xd);" (assignment_expression "bVar2 = *(byte *)(puVar11 + 0xd)" (identifier "bVar2") (= "=") (pointer_expression "*(byte *)(puVar11 + 0xd)" (* "*") (cast_expression "(byte *)(puVar11 + 0xd)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar11 + 0xd)" (( "(") (binary_expression "puVar11 + 0xd" (identifier "puVar11") (+ "+") (number_literal "0xd")) () ")"))))) (; ";")) (expression_statement "bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);" (assignment_expression "bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2)" (identifier "bVar3") (= "=") (call_expression "(byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2)" (( "(") (binary_expression "((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2" (parenthesized_expression "((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f)" (( "(") (binary_expression "(puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f" (parenthesized_expression "(puVar11[0xd] << 5 | uVar10 << 0x14)" (( "(") (binary_expression "puVar11[0xd] << 5 | uVar10 << 0x14" (binary_expression "puVar11[0xd] << 5" (subscript_expression "puVar11[0xd]" (identifier "puVar11") ([ "[") (number_literal "0xd") (] "]")) (<< "<<") (number_literal "5")) (| "|") (binary_expression "uVar10 << 0x14" (identifier "uVar10") (<< "<<") (number_literal "0x14"))) () ")")) (>> ">>") (number_literal "0x1f")) () ")")) (<< "<<") (number_literal "2")) () ")")))) (; ";")) (expression_statement "*(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;" (assignment_expression "*(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3" (pointer_expression "*(byte *)(puVar11 + 0xd)" (* "*") (cast_expression "(byte *)(puVar11 + 0xd)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar11 + 0xd)" (( "(") (binary_expression "puVar11 + 0xd" (identifier "puVar11") (+ "+") (number_literal "0xd")) () ")")))) (= "=") (binary_expression "bVar2 & 0xfb | bVar3" (binary_expression "bVar2 & 0xfb" (identifier "bVar2") (& "&") (number_literal "0xfb")) (| "|") (identifier "bVar3"))) (; ";")) (if_statement "if (cVar1 == '\x02') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }\n              else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }" (if "if") (parenthesized_expression "(cVar1 == '\x02')" (( "(") (binary_expression "cVar1 == '\x02'" (identifier "cVar1") (== "==") (char_literal "'\x02'" (' "'") (escape_sequence "\x02") (' "'"))) () ")")) (compound_statement "{\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;\n              }" ({ "{") (expression_statement "*(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;" (assignment_expression "*(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8" (pointer_expression "*(byte *)(puVar11 + 0xd)" (* "*") (cast_expression "(byte *)(puVar11 + 0xd)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar11 + 0xd)" (( "(") (binary_expression "puVar11 + 0xd" (identifier "puVar11") (+ "+") (number_literal "0xd")) () ")")))) (= "=") (binary_expression "bVar2 & 0xf3 | bVar3 | 8" (binary_expression "bVar2 & 0xf3 | bVar3" (binary_expression "bVar2 & 0xf3" (identifier "bVar2") (& "&") (number_literal "0xf3")) (| "|") (identifier "bVar3")) (| "|") (number_literal "8"))) (; ";")) (} "}")) (else_clause "else if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }" (else "else") (if_statement "if (cVar1 == '\x04') {\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }\n              else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }" (if "if") (parenthesized_expression "(cVar1 == '\x04')" (( "(") (binary_expression "cVar1 == '\x04'" (identifier "cVar1") (== "==") (char_literal "'\x04'" (' "'") (escape_sequence "\x04") (' "'"))) () ")")) (compound_statement "{\n                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;\n              }" ({ "{") (expression_statement "*(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;" (assignment_expression "*(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2" (pointer_expression "*(byte *)(puVar11 + 0xd)" (* "*") (cast_expression "(byte *)(puVar11 + 0xd)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar11 + 0xd)" (( "(") (binary_expression "puVar11 + 0xd" (identifier "puVar11") (+ "+") (number_literal "0xd")) () ")")))) (= "=") (binary_expression "bVar2 & 0xf9 | bVar3 | 2" (binary_expression "bVar2 & 0xf9 | bVar3" (binary_expression "bVar2 & 0xf9" (identifier "bVar2") (& "&") (number_literal "0xf9")) (| "|") (identifier "bVar3")) (| "|") (number_literal "2"))) (; ";")) (} "}")) (else_clause "else {\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }" (else "else") (compound_statement "{\n                if (cVar1 == '\f') goto LAB_000224b8;\n                if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }\n              }" ({ "{") (if_statement "if (cVar1 == '\f') goto LAB_000224b8;" (if "if") (parenthesized_expression "(cVar1 == '\f')" (( "(") (binary_expression "cVar1 == '\f'" (identifier "cVar1") (== "==") (char_literal "'\f'" (' "'") (escape_sequence "\f") (' "'"))) () ")")) (goto_statement "goto LAB_000224b8;" (goto "goto") (statement_identifier "LAB_000224b8") (; ";"))) (if_statement "if ((uVar10 & 0xffc000) != 0) {\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }" (if "if") (parenthesized_expression "((uVar10 & 0xffc000) != 0)" (( "(") (binary_expression "(uVar10 & 0xffc000) != 0" (parenthesized_expression "(uVar10 & 0xffc000)" (( "(") (binary_expression "uVar10 & 0xffc000" (identifier "uVar10") (& "&") (number_literal "0xffc000")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n                  bVar2 = *(byte *)(puVar11 + 0xd);\n                  goto LAB_000224bc;\n                }" ({ "{") (expression_statement "bVar2 = *(byte *)(puVar11 + 0xd);" (assignment_expression "bVar2 = *(byte *)(puVar11 + 0xd)" (identifier "bVar2") (= "=") (pointer_expression "*(byte *)(puVar11 + 0xd)" (* "*") (cast_expression "(byte *)(puVar11 + 0xd)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar11 + 0xd)" (( "(") (binary_expression "puVar11 + 0xd" (identifier "puVar11") (+ "+") (number_literal "0xd")) () ")"))))) (; ";")) (goto_statement "goto LAB_000224bc;" (goto "goto") (statement_identifier "LAB_000224bc") (; ";")) (} "}"))) (} "}")))))) (labeled_statement "LAB_00022470:\n              piVar4 = piVar4 + 1;" (statement_identifier "LAB_00022470") (: ":") (expression_statement "piVar4 = piVar4 + 1;" (assignment_expression "piVar4 = piVar4 + 1" (identifier "piVar4") (= "=") (binary_expression "piVar4 + 1" (identifier "piVar4") (+ "+") (number_literal "1"))) (; ";"))) (if_statement "if (piVar7 == piVar4) goto LAB_000224d0;" (if "if") (parenthesized_expression "(piVar7 == piVar4)" (( "(") (binary_expression "piVar7 == piVar4" (identifier "piVar7") (== "==") (identifier "piVar4")) () ")")) (goto_statement "goto LAB_000224d0;" (goto "goto") (statement_identifier "LAB_000224d0") (; ";"))) (} "}"))) (if_statement "if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;" (if "if") (parenthesized_expression "((*(uint *)(iVar6 + 4) & 0xffc000) == 0)" (( "(") (binary_expression "(*(uint *)(iVar6 + 4) & 0xffc000) == 0" (parenthesized_expression "(*(uint *)(iVar6 + 4) & 0xffc000)" (( "(") (binary_expression "*(uint *)(iVar6 + 4) & 0xffc000" (pointer_expression "*(uint *)(iVar6 + 4)" (* "*") (cast_expression "(uint *)(iVar6 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar6 + 4)" (( "(") (binary_expression "iVar6 + 4" (identifier "iVar6") (+ "+") (number_literal "4")) () ")")))) (& "&") (number_literal "0xffc000")) () ")")) (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_00022470;" (goto "goto") (statement_identifier "LAB_00022470") (; ";"))) (expression_statement "*(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);" (assignment_expression "*(byte *)(puVar11 + 0xd) =\n                 *(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2)" (pointer_expression "*(byte *)(puVar11 + 0xd)" (* "*") (cast_expression "(byte *)(puVar11 + 0xd)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar11 + 0xd)" (( "(") (binary_expression "puVar11 + 0xd" (identifier "puVar11") (+ "+") (number_literal "0xd")) () ")")))) (= "=") (binary_expression "*(byte *)(puVar11 + 0xd) & 0xfb |\n                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2)" (binary_expression "*(byte *)(puVar11 + 0xd) & 0xfb" (pointer_expression "*(byte *)(puVar11 + 0xd)" (* "*") (cast_expression "(byte *)(puVar11 + 0xd)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar11 + 0xd)" (( "(") (binary_expression "puVar11 + 0xd" (identifier "puVar11") (+ "+") (number_literal "0xd")) () ")")))) (& "&") (number_literal "0xfb")) (| "|") (call_expression "(byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2)" (( "(") (binary_expression "((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2" (parenthesized_expression "((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f)" (( "(") (binary_expression "(puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f" (parenthesized_expression "(puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14)" (( "(") (binary_expression "puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14" (binary_expression "puVar11[0xd] << 5" (subscript_expression "puVar11[0xd]" (identifier "puVar11") ([ "[") (number_literal "0xd") (] "]")) (<< "<<") (number_literal "5")) (| "|") (binary_expression "*(uint *)(iVar6 + 4) << 0x14" (pointer_expression "*(uint *)(iVar6 + 4)" (* "*") (cast_expression "(uint *)(iVar6 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar6 + 4)" (( "(") (binary_expression "iVar6 + 4" (identifier "iVar6") (+ "+") (number_literal "4")) () ")")))) (<< "<<") (number_literal "0x14"))) () ")")) (>> ">>") (number_literal "0x1f")) () ")")) (<< "<<") (number_literal "2")) () ")"))))) (; ";")) (labeled_statement "LAB_000224b8:\n            bVar2 = *(byte *)(puVar11 + 0xd);" (statement_identifier "LAB_000224b8") (: ":") (expression_statement "bVar2 = *(byte *)(puVar11 + 0xd);" (assignment_expression "bVar2 = *(byte *)(puVar11 + 0xd)" (identifier "bVar2") (= "=") (pointer_expression "*(byte *)(puVar11 + 0xd)" (* "*") (cast_expression "(byte *)(puVar11 + 0xd)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar11 + 0xd)" (( "(") (binary_expression "puVar11 + 0xd" (identifier "puVar11") (+ "+") (number_literal "0xd")) () ")"))))) (; ";"))) (labeled_statement "LAB_000224bc:\n            piVar4 = piVar4 + 1;" (statement_identifier "LAB_000224bc") (: ":") (expression_statement "piVar4 = piVar4 + 1;" (assignment_expression "piVar4 = piVar4 + 1" (identifier "piVar4") (= "=") (binary_expression "piVar4 + 1" (identifier "piVar4") (+ "+") (number_literal "1"))) (; ";"))) (expression_statement "*(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;" (assignment_expression "*(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1" (pointer_expression "*(byte *)(puVar11 + 0xd)" (* "*") (cast_expression "(byte *)(puVar11 + 0xd)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar11 + 0xd)" (( "(") (binary_expression "puVar11 + 0xd" (identifier "puVar11") (+ "+") (number_literal "0xd")) () ")")))) (= "=") (binary_expression "bVar2 & 0xfe | 1" (binary_expression "bVar2 & 0xfe" (identifier "bVar2") (& "&") (number_literal "0xfe")) (| "|") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(piVar7 != piVar4)" (( "(") (binary_expression "piVar7 != piVar4" (identifier "piVar7") (!= "!=") (identifier "piVar4")) () ")")) (; ";")) (} "}"))) (labeled_statement "LAB_000224d0:\n        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);" (statement_identifier "LAB_000224d0") (: ":") (expression_statement "iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);" (assignment_expression "iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12)" (identifier "iVar6") (= "=") (call_expression "FUN_0001e7e4(param_2,puVar11,uVar12)" (identifier "FUN_0001e7e4") (argument_list "(param_2,puVar11,uVar12)" (( "(") (identifier "param_2") (, ",") (identifier "puVar11") (, ",") (identifier "uVar12") () ")")))) (; ";"))) (if_statement "if (iVar6 == 0) {\n          return puVar11;\n        }" (if "if") (parenthesized_expression "(iVar6 == 0)" (( "(") (binary_expression "iVar6 == 0" (identifier "iVar6") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          return puVar11;\n        }" ({ "{") (return_statement "return puVar11;" (return "return") (identifier "puVar11") (; ";")) (} "}"))) (expression_statement "FUN_0001fecc(puVar11);" (call_expression "FUN_0001fecc(puVar11)" (identifier "FUN_0001fecc") (argument_list "(puVar11)" (( "(") (identifier "puVar11") () ")"))) (; ";")) (} "}")) (else_clause "else {\n        (*(code *)PTR_free_000453bc)(puVar11);\n      }" (else "else") (compound_statement "{\n        (*(code *)PTR_free_000453bc)(puVar11);\n      }" ({ "{") (expression_statement "(*(code *)PTR_free_000453bc)(puVar11);" (call_expression "(*(code *)PTR_free_000453bc)(puVar11)" (parenthesized_expression "(*(code *)PTR_free_000453bc)" (( "(") (pointer_expression "*(code *)PTR_free_000453bc" (* "*") (cast_expression "(code *)PTR_free_000453bc" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_free_000453bc"))) () ")")) (argument_list "(puVar11)" (( "(") (identifier "puVar11") () ")"))) (; ";")) (} "}")))) (} "}"))) (expression_statement "*param_1 = 0xc;" (assignment_expression "*param_1 = 0xc" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (number_literal "0xc")) (; ";")) (} "}")))) (return_statement "return (uint *)0x0;" (return "return") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}")))

type_1 * function_1(type_2 *err,type_3 *dfa,type_4 *nodes)

{
  char var_13;
  type_5 var_14;
  type_5 var_15;
  int *var_2;
  type_6 var_7;
  type_2 var_11;
  int var_4;
  int *var_5;
  type_1 **var_8;
  type_7 *prVar10;
  int var_6;
  type_6 var_1;
  type_1 *var_9;
  type_6 var_3;
  
  var_1 = nodes->nelem;
  if (var_1 == 0) {
    *err = var_12;
  }
  else {
    var_3 = var_1;
    if (0 < (int)var_1) {
      var_2 = nodes->elems;
      var_5 = var_2 + var_1;
      do {
        var_4 = *var_2;
        var_2 = var_2 + 1;
        var_3 = var_3 + var_4;
      } while (var_5 != var_2);
    }
    var_6 = dfa->state_table[var_3 & dfa->state_hash_mask].num;
    var_4 = 0;
    if (0 < var_6) {
      var_8 = dfa->state_table[var_3 & dfa->state_hash_mask].array;
LAB_00022394:
      do {
        var_9 = *var_8;
        if (var_9->var_3 == var_3) {
          var_7 = (var_9->nodes).nelem;
          if (var_1 != var_7) {
            var_4 = var_4 + 1;
            var_8 = var_8 + 1;
            if (var_4 == var_6) break;
            goto LAB_00022394;
          }
          do {
            var_7 = var_7 - 1;
            if ((int)var_7 < 0) {
              return var_9;
            }
          } while ((var_9->nodes).elems[var_7] == nodes->elems[var_7]);
        }
        var_4 = var_4 + 1;
        var_8 = var_8 + 1;
      } while (var_4 != var_6);
    }
    var_9 = (type_1 *)(*(type_8 *)PTR_calloc_0004529c)(0x38,1);
    if (var_9 != (type_1 *)0x0) {
      var_11 = var_10(&var_9->nodes,nodes);
      if (var_11 == var_12) {
        var_4 = nodes->nelem;
        var_9->entrance_nodes = &var_9->nodes;
        if (0 < var_4) {
          var_2 = nodes->elems;
          prVar10 = dfa->nodes;
          var_5 = var_2 + var_4;
          do {
            while( true ) {
              var_4 = *var_2;
              var_13 = prVar10[var_4].field_0x4;
              if (var_13 == '\x01') break;
              var_1 = *(type_6 *)&prVar10[var_4].field_0x4;
              var_14 = var_9->field_0x34;
              var_15 = (type_5)(((*(int *)&var_9->field_0x34 << 5 | var_1 << 0x14) >> 0x1f) << 2);
              var_9->field_0x34 = var_14 & 0xfb | var_15;
              if (var_13 == '\x02') {
                var_9->field_0x34 = var_14 & 0xf3 | var_15 | 8;
              }
              else if (var_13 == '\x04') {
                var_9->field_0x34 = var_14 & 0xf9 | var_15 | 2;
              }
              else {
                if (var_13 == '\f') goto LAB_000224b8;
                if ((var_1 & 0xffc000) != 0) {
                  var_14 = var_9->field_0x34;
                  goto LAB_000224bc;
                }
              }
LAB_00022470:
              var_2 = var_2 + 1;
              if (var_5 == var_2) goto LAB_000224d0;
            }
            if ((*(type_6 *)&prVar10[var_4].field_0x4 & 0xffc000) == 0) goto LAB_00022470;
            var_9->field_0x34 =
                 var_9->field_0x34 & 0xfb |
                 (type_5)(((*(int *)&var_9->field_0x34 << 5 |
                         *(type_6 *)&prVar10[var_4].field_0x4 << 0x14) >> 0x1f) << 2);
LAB_000224b8:
            var_14 = var_9->field_0x34;
LAB_000224bc:
            var_2 = var_2 + 1;
            var_9->field_0x34 = var_14 & 0xfe | 1;
          } while (var_5 != var_2);
        }
LAB_000224d0:
        var_11 = var_16(dfa,var_9,var_3);
        if (var_11 == var_12) {
          return var_9;
        }
        var_17(var_9);
      }
      else {
        (*(type_8 *)PTR_free_000453bc)(var_9);
      }
    }
    *err = _REG_ESPACE;
  }
  return (type_1 *)0x0;
}


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

uint * MASKED(undefined4 *param_1,int *param_2,int param_3)

{
  char cVar1;
  byte bVar2;
  byte bVar3;
  int *piVar4;
  uint uVar5;
  int iVar6;
  int *piVar7;
  undefined4 *puVar8;
  int iVar9;
  uint uVar10;
  uint *puVar11;
  uint uVar12;
  
  uVar10 = *(uint *)(param_3 + 4);
  if (uVar10 == 0) {
    *param_1 = 0;
  }
  else {
    uVar12 = uVar10;
    if (0 < (int)uVar10) {
      piVar4 = *(int **)(param_3 + 8);
      piVar7 = piVar4 + uVar10;
      do {
        iVar6 = *piVar4;
        piVar4 = piVar4 + 1;
        uVar12 = uVar12 + iVar6;
      } while (piVar7 != piVar4);
    }
    piVar4 = (int *)(param_2[8] + (uVar12 & param_2[0x11]) * 0xc);
    iVar9 = *piVar4;
    iVar6 = 0;
    if (0 < iVar9) {
      puVar8 = (undefined4 *)piVar4[2];
LAB_00022394:
      do {
        puVar11 = (uint *)*puVar8;
        if (*puVar11 == uVar12) {
          uVar5 = puVar11[2];
          if (uVar10 != uVar5) {
            iVar6 = iVar6 + 1;
            puVar8 = puVar8 + 1;
            if (iVar6 == iVar9) break;
            goto LAB_00022394;
          }
          do {
            uVar5 = uVar5 - 1;
            if ((int)uVar5 < 0) {
              return puVar11;
            }
          } while (*(int *)(puVar11[3] + uVar5 * 4) == *(int *)(*(int *)(param_3 + 8) + uVar5 * 4));
        }
        iVar6 = iVar6 + 1;
        puVar8 = puVar8 + 1;
      } while (iVar6 != iVar9);
    }
    puVar11 = (uint *)(*(code *)PTR_calloc_0004529c)(0x38,1);
    if (puVar11 != (uint *)0x0) {
      iVar6 = FUN_00021c20(puVar11 + 1,param_3);
      if (iVar6 == 0) {
        iVar6 = *(int *)(param_3 + 4);
        puVar11[10] = (uint)(puVar11 + 1);
        if (0 < iVar6) {
          piVar4 = *(int **)(param_3 + 8);
          iVar9 = *param_2;
          piVar7 = piVar4 + iVar6;
          do {
            while( true ) {
              iVar6 = iVar9 + *piVar4 * 8;
              cVar1 = *(char *)(iVar6 + 4);
              if (cVar1 == '\x01') break;
              uVar10 = *(uint *)(iVar6 + 4);
              bVar2 = *(byte *)(puVar11 + 0xd);
              bVar3 = (byte)(((puVar11[0xd] << 5 | uVar10 << 0x14) >> 0x1f) << 2);
              *(byte *)(puVar11 + 0xd) = bVar2 & 0xfb | bVar3;
              if (cVar1 == '\x02') {
                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf3 | bVar3 | 8;
              }
              else if (cVar1 == '\x04') {
                *(byte *)(puVar11 + 0xd) = bVar2 & 0xf9 | bVar3 | 2;
              }
              else {
                if (cVar1 == '\f') goto LAB_000224b8;
                if ((uVar10 & 0xffc000) != 0) {
                  bVar2 = *(byte *)(puVar11 + 0xd);
                  goto LAB_000224bc;
                }
              }
LAB_00022470:
              piVar4 = piVar4 + 1;
              if (piVar7 == piVar4) goto LAB_000224d0;
            }
            if ((*(uint *)(iVar6 + 4) & 0xffc000) == 0) goto LAB_00022470;
            *(byte *)(puVar11 + 0xd) =
                 *(byte *)(puVar11 + 0xd) & 0xfb |
                 (byte)(((puVar11[0xd] << 5 | *(uint *)(iVar6 + 4) << 0x14) >> 0x1f) << 2);
LAB_000224b8:
            bVar2 = *(byte *)(puVar11 + 0xd);
LAB_000224bc:
            piVar4 = piVar4 + 1;
            *(byte *)(puVar11 + 0xd) = bVar2 & 0xfe | 1;
          } while (piVar7 != piVar4);
        }
LAB_000224d0:
        iVar6 = FUN_0001e7e4(param_2,puVar11,uVar12);
        if (iVar6 == 0) {
          return puVar11;
        }
        FUN_0001fecc(puVar11);
      }
      else {
        (*(code *)PTR_free_000453bc)(puVar11);
      }
    }
    *param_1 = 0xc;
  }
  return (uint *)0x0;
}

