
/* WARNING: Function: __x86.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */

uchar * __regparm3 unw_decode_b3_x4(uchar *dp,uint code,void *arg,uchar *end)

{
  byte bVar1;
  byte *pbVar2;
  uchar *puVar3;
  byte bVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  uint in_stack_00000008;
  void *in_stack_0000000c;
  uint uVar9;
  
  if ((in_stack_00000008 & 0x10) == 0) {
    bVar1 = *end;
    uVar9 = 0;
    uVar5 = bVar1 & 0x7f;
    bVar4 = 0;
    end = end + 1;
    while ((char)bVar1 < '\0') {
      bVar1 = *end;
      bVar4 = bVar4 + 7;
      uVar7 = (bVar1 & 0x7f) << (bVar4 & 0x1f);
      uVar8 = uVar7;
      uVar6 = 0 << (bVar4 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar4 & 0x1f);
      if ((bVar4 & 0x20) != 0) {
        uVar8 = 0;
        uVar6 = uVar7;
      }
      uVar9 = uVar6 | uVar9;
      uVar5 = uVar8 | uVar5;
      end = end + 1;
    }
    bVar1 = *end;
    uVar6 = bVar1 & 0x7f;
    bVar4 = 0;
    while (end = end + 1, (char)bVar1 < '\0') {
      bVar1 = *end;
      bVar4 = bVar4 + 7;
      uVar8 = (bVar1 & 0x7f) << (bVar4 & 0x1f);
      if ((bVar4 & 0x20) != 0) {
        uVar8 = 0;
      }
      uVar6 = uVar8 | uVar6;
    }
    printf("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,uVar5,uVar6,uVar5,uVar9);
  }
  else {
    uVar5 = in_stack_00000008 & 7;
    if (uVar5 == 0) {
      bVar1 = *end;
      uVar5 = bVar1 & 0x7f;
      bVar4 = 0;
      pbVar2 = end + 1;
      while ((char)bVar1 < '\0') {
        bVar1 = *pbVar2;
        bVar4 = bVar4 + 7;
        uVar9 = (bVar1 & 0x7f) << (bVar4 & 0x1f);
        if ((bVar4 & 0x20) != 0) {
          uVar9 = 0;
        }
        uVar5 = uVar9 | uVar5;
        pbVar2 = pbVar2 + 1;
      }
      if ((in_stack_00000008 & 8) != 0) {
        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar5);
        return pbVar2;
      }
      printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar5);
      return pbVar2;
    }
    if (uVar5 == 2) {
      puVar3 = unw_decode_x2(end,code,arg);
      return puVar3;
    }
    if (uVar5 < 3) {
      if (uVar5 == 1) {
        puVar3 = unw_decode_x1(end,in_stack_00000008,in_stack_0000000c);
        return puVar3;
      }
    }
    else {
      if (uVar5 == 3) {
        puVar3 = unw_decode_x3(end,in_stack_00000008,in_stack_0000000c);
        return puVar3;
      }
      if (uVar5 == 4) {
        puVar3 = unw_decode_x4(end,code,arg);
        return puVar3;
      }
    }
    printf("Unknown code 0x%02x\n");
  }
  return end;
}



/* WARNING: Function: __i686.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */

byte * FUN_0004be20(byte *param_1,uint param_2)

{
  byte bVar1;
  byte *pbVar2;
  byte bVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  
  if ((param_2 & 0x10) == 0) {
    bVar1 = *param_1;
    uVar8 = 0;
    uVar4 = bVar1 & 0x7f;
    bVar3 = 0;
    param_1 = param_1 + 1;
    while ((char)bVar1 < '\0') {
      bVar1 = *param_1;
      bVar3 = bVar3 + 7;
      uVar6 = (bVar1 & 0x7f) << (bVar3 & 0x1f);
      uVar7 = uVar6;
      uVar5 = 0 << (bVar3 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f);
      if ((bVar3 & 0x20) != 0) {
        uVar7 = 0;
        uVar5 = uVar6;
      }
      uVar8 = uVar5 | uVar8;
      uVar4 = uVar7 | uVar4;
      param_1 = param_1 + 1;
    }
    bVar1 = *param_1;
    uVar5 = bVar1 & 0x7f;
    bVar3 = 0;
    while (param_1 = param_1 + 1, (char)bVar1 < '\0') {
      bVar1 = *param_1;
      bVar3 = bVar3 + 7;
      uVar7 = (bVar1 & 0x7f) << (bVar3 & 0x1f);
      if ((bVar3 & 0x20) != 0) {
        uVar7 = 0;
      }
      uVar5 = uVar7 | uVar5;
    }
    printf("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,uVar4,uVar5,uVar4,uVar8);
  }
  else {
    uVar4 = param_2 & 7;
    if (uVar4 == 0) {
      bVar1 = *param_1;
      uVar4 = bVar1 & 0x7f;
      bVar3 = 0;
      pbVar2 = param_1 + 1;
      while ((char)bVar1 < '\0') {
        bVar1 = *pbVar2;
        bVar3 = bVar3 + 7;
        uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);
        if ((bVar3 & 0x20) != 0) {
          uVar8 = 0;
        }
        uVar4 = uVar8 | uVar4;
        pbVar2 = pbVar2 + 1;
      }
      if ((param_2 & 8) != 0) {
        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);
        return pbVar2;
      }
      printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4);
      return pbVar2;
    }
    if (uVar4 == 2) {
      pbVar2 = (byte *)FUN_0004bb90();
      return pbVar2;
    }
    if (uVar4 < 3) {
      if (uVar4 == 1) {
        pbVar2 = (byte *)FUN_0004b390();
        return pbVar2;
      }
    }
    else {
      if (uVar4 == 3) {
        pbVar2 = (byte *)FUN_0004b510();
        return pbVar2;
      }
      if (uVar4 == 4) {
        pbVar2 = (byte *)FUN_0004bcd0();
        return pbVar2;
      }
    }
    printf("Unknown code 0x%02x\n",param_2);
  }
  return param_1;
}


CALL 0x0004ab79
ADD EAX,0x681db
PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
SUB ESP,0x2c
MOV dword ptr [ESP + 0x18],EAX
MOV EAX,dword ptr [ESP + 0x44]
MOV EDI,dword ptr [ESP + 0x40]
MOV dword ptr [ESP + 0x14],EAX
AND EAX,0x10
MOV dword ptr [ESP + 0x1c],EAX
JNZ 0x0004bf38
MOVZX EAX,byte ptr [EDI]
LEA EDX,[EDI + 0x1]
MOV dword ptr [ESP + 0x4],0x0
MOV ECX,EAX
AND ECX,0x7f
MOV dword ptr [ESP],ECX
XOR ECX,ECX
TEST AL,AL
JNS 0x0004beb7
LEA ESI,[ESI]
ADD EDX,0x1
MOVZX EAX,byte ptr [EDX + -0x1]
ADD ECX,0x7
XOR EDI,EDI
XOR EBX,EBX
MOV EBP,dword ptr [ESP + 0x4]
MOV ESI,EAX
AND ESI,0x7f
SHLD EDI,ESI,CL
SHL ESI,CL
TEST CL,0x20
CMOVNZ EDI,ESI
CMOVNZ ESI,EBX
MOV dword ptr [ESP + 0xc],EDI
MOV EDI,dword ptr [ESP]
MOV dword ptr [ESP + 0x8],ESI
MOV ESI,dword ptr [ESP + 0xc]
MOV EBX,dword ptr [ESP + 0x8]
OR ESI,EBP
OR EBX,EDI
MOV dword ptr [ESP + 0x4],ESI
MOV dword ptr [ESP],EBX
TEST AL,AL
JS 0x0004be70
MOVZX EAX,byte ptr [EDX]
LEA ESI,[EDX + 0x1]
XOR EBP,EBP
MOV ECX,dword ptr [ESP + 0x1c]
MOV EDX,EAX
AND EDX,0x7f
MOV EDI,EDX
TEST AL,AL
JNS 0x0004bf0b
NOP
ADD ESI,0x1
MOVZX EBX,byte ptr [ESI + -0x1]
ADD ECX,0x7
XOR EDX,EDX
MOV EAX,EBX
AND EAX,0x7f
SHLD EDX,EAX,CL
SHL EAX,CL
TEST CL,0x20
JZ 0x0004beef
MOV EDX,EAX
XOR EAX,EAX
MOV dword ptr [ESP + 0x8],EAX
MOV dword ptr [ESP + 0xc],EDX
MOV EDX,dword ptr [ESP + 0x8]
MOV EAX,dword ptr [ESP + 0xc]
OR EDX,EDI
OR EAX,EBP
MOV EDI,EDX
MOV EBP,EAX
TEST BL,BL
JS 0x0004bed0
PUSH EDI
PUSH dword ptr [ESP + 0x4]
MOV EBX,dword ptr [ESP + 0x20]
LEA EAX,[EBX + 0xfffc802f]
PUSH EAX
LEA EAX,[EBX + 0xfffda844]
PUSH EAX
CALL 0x00013060
ADD ESP,0x10
ADD ESP,0x2c
MOV EAX,ESI
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EBX,dword ptr [ESP + 0x14]
AND EBX,0x7
JNZ 0x0004bfe0
MOVZX EAX,byte ptr [EDI]
LEA ESI,[EDI + 0x1]
MOV dword ptr [ESP + 0x4],0x0
MOV EDX,EAX
AND EDX,0x7f
MOV dword ptr [ESP],EDX
TEST AL,AL
JNS 0x0004bfab
NOP
ADD ESI,0x1
MOVZX EAX,byte ptr [ESI + -0x1]
ADD EBX,0x7
XOR EBP,EBP
MOV ECX,EBX
MOV EDX,EAX
AND EDX,0x7f
MOV EDI,EDX
SHLD EBP,EDX,CL
XOR EDX,EDX
SHL EDI,CL
TEST BL,0x20
CMOVNZ EBP,EDI
CMOVNZ EDI,EDX
MOV dword ptr [ESP + 0xc],EBP
MOV EBP,dword ptr [ESP + 0x4]
MOV dword ptr [ESP + 0x8],EDI
MOV ECX,dword ptr [ESP + 0xc]
MOV EDI,dword ptr [ESP]
MOV EDX,dword ptr [ESP + 0x8]
OR ECX,EBP
OR EDX,EDI
MOV dword ptr [ESP + 0x4],ECX
MOV dword ptr [ESP],EDX
TEST AL,AL
JS 0x0004bf60
TEST byte ptr [ESP + 0x14],0x8
JZ 0x0004c020
SUB ESP,0x4
PUSH dword ptr [ESP + 0x4]
MOV EBX,dword ptr [ESP + 0x20]
LEA EAX,[EBX + 0xfffda71c]
PUSH EAX
LEA EAX,[EBX + 0xfffda5c9]
PUSH EAX
CALL 0x00013060
ADD ESP,0x10
MOV EAX,ESI
ADD ESP,0x2c
POP EBX
POP ESI
POP EDI
POP EBP
RET
CMP EBX,0x2
JZ 0x0004c088
JBE 0x0004c008
CMP EBX,0x3
JZ 0x0004c050
CMP EBX,0x4
JNZ 0x0004c060
ADD ESP,0x2c
MOV EAX,EDI
POP EBX
POP ESI
POP EDI
POP EBP
JMP 0x0004bcd0
CMP EBX,0x1
JNZ 0x0004c060
ADD ESP,0x2c
MOV EAX,EDI
POP EBX
POP ESI
POP EDI
POP EBP
JMP 0x0004b390
SUB ESP,0x4
PUSH dword ptr [ESP + 0x4]
MOV EBX,dword ptr [ESP + 0x20]
LEA EAX,[EBX + 0xfffda71c]
PUSH EAX
LEA EAX,[EBX + 0xfffda5e4]
PUSH EAX
CALL 0x00013060
ADD ESP,0x10
MOV EAX,ESI
ADD ESP,0x2c
POP EBX
POP ESI
POP EDI
POP EBP
RET
ADD ESP,0x2c
MOV EAX,EDI
POP EBX
POP ESI
POP EDI
POP EBP
JMP 0x0004b510
SUB ESP,0x8
MOV ESI,EDI
PUSH dword ptr [ESP + 0x1c]
MOV EBX,dword ptr [ESP + 0x24]
LEA EAX,[EBX + 0xfffda6ca]
PUSH EAX
CALL 0x00013060
ADD ESP,0x10
JMP 0x0004bf2a
ADD ESP,0x2c
MOV EAX,EDI
POP EBX
POP ESI
POP EDI
POP EBP
JMP 0x0004bb90
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */\n\nbyte * FUN_0004be20(byte *param_1,uint param_2)\n\n{\n  byte bVar1;\n  byte *pbVar2;\n  byte bVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  \n  if ((param_2 & 0x10) == 0) {\n    bVar1 = *param_1;\n    uVar8 = 0;\n    uVar4 = bVar1 & 0x7f;\n    bVar3 = 0;\n    param_1 = param_1 + 1;\n    while ((char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar6 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << (bVar3 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      uVar8 = uVar5 | uVar8;\n      uVar4 = uVar7 | uVar4;\n      param_1 = param_1 + 1;\n    }\n    bVar1 = *param_1;\n    uVar5 = bVar1 & 0x7f;\n    bVar3 = 0;\n    while (param_1 = param_1 + 1, (char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar7 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n      }\n      uVar5 = uVar7 | uVar5;\n    }\n    printf("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,uVar4,uVar5,uVar4,uVar8);\n  }\n  else {\n    uVar4 = param_2 & 7;\n    if (uVar4 == 0) {\n      bVar1 = *param_1;\n      uVar4 = bVar1 & 0x7f;\n      bVar3 = 0;\n      pbVar2 = param_1 + 1;\n      while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar3 = bVar3 + 7;\n        uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n        if ((bVar3 & 0x20) != 0) {\n          uVar8 = 0;\n        }\n        uVar4 = uVar8 | uVar4;\n        pbVar2 = pbVar2 + 1;\n      }\n      if ((param_2 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n        return pbVar2;\n      }\n      printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n      return pbVar2;\n    }\n    if (uVar4 == 2) {\n      pbVar2 = (byte *)FUN_0004bb90();\n      return pbVar2;\n    }\n    if (uVar4 < 3) {\n      if (uVar4 == 1) {\n        pbVar2 = (byte *)FUN_0004b390();\n        return pbVar2;\n      }\n    }\n    else {\n      if (uVar4 == 3) {\n        pbVar2 = (byte *)FUN_0004b510();\n        return pbVar2;\n      }\n      if (uVar4 == 4) {\n        pbVar2 = (byte *)FUN_0004bcd0();\n        return pbVar2;\n      }\n    }\n    printf("Unknown code 0x%02x\n",param_2);\n  }\n  return param_1;\n}\n\n" comment (function_definition "byte * FUN_0004be20(byte *param_1,uint param_2)\n\n{\n  byte bVar1;\n  byte *pbVar2;\n  byte bVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  \n  if ((param_2 & 0x10) == 0) {\n    bVar1 = *param_1;\n    uVar8 = 0;\n    uVar4 = bVar1 & 0x7f;\n    bVar3 = 0;\n    param_1 = param_1 + 1;\n    while ((char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar6 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << (bVar3 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      uVar8 = uVar5 | uVar8;\n      uVar4 = uVar7 | uVar4;\n      param_1 = param_1 + 1;\n    }\n    bVar1 = *param_1;\n    uVar5 = bVar1 & 0x7f;\n    bVar3 = 0;\n    while (param_1 = param_1 + 1, (char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar7 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n      }\n      uVar5 = uVar7 | uVar5;\n    }\n    printf("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,uVar4,uVar5,uVar4,uVar8);\n  }\n  else {\n    uVar4 = param_2 & 7;\n    if (uVar4 == 0) {\n      bVar1 = *param_1;\n      uVar4 = bVar1 & 0x7f;\n      bVar3 = 0;\n      pbVar2 = param_1 + 1;\n      while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar3 = bVar3 + 7;\n        uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n        if ((bVar3 & 0x20) != 0) {\n          uVar8 = 0;\n        }\n        uVar4 = uVar8 | uVar4;\n        pbVar2 = pbVar2 + 1;\n      }\n      if ((param_2 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n        return pbVar2;\n      }\n      printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n      return pbVar2;\n    }\n    if (uVar4 == 2) {\n      pbVar2 = (byte *)FUN_0004bb90();\n      return pbVar2;\n    }\n    if (uVar4 < 3) {\n      if (uVar4 == 1) {\n        pbVar2 = (byte *)FUN_0004b390();\n        return pbVar2;\n      }\n    }\n    else {\n      if (uVar4 == 3) {\n        pbVar2 = (byte *)FUN_0004b510();\n        return pbVar2;\n      }\n      if (uVar4 == 4) {\n        pbVar2 = (byte *)FUN_0004bcd0();\n        return pbVar2;\n      }\n    }\n    printf("Unknown code 0x%02x\n",param_2);\n  }\n  return param_1;\n}" type_identifier (pointer_declarator "* FUN_0004be20(byte *param_1,uint param_2)" * (function_declarator "FUN_0004be20(byte *param_1,uint param_2)" identifier (parameter_list "(byte *param_1,uint param_2)" ( (parameter_declaration "byte *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) )))) (compound_statement "{\n  byte bVar1;\n  byte *pbVar2;\n  byte bVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  \n  if ((param_2 & 0x10) == 0) {\n    bVar1 = *param_1;\n    uVar8 = 0;\n    uVar4 = bVar1 & 0x7f;\n    bVar3 = 0;\n    param_1 = param_1 + 1;\n    while ((char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar6 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << (bVar3 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      uVar8 = uVar5 | uVar8;\n      uVar4 = uVar7 | uVar4;\n      param_1 = param_1 + 1;\n    }\n    bVar1 = *param_1;\n    uVar5 = bVar1 & 0x7f;\n    bVar3 = 0;\n    while (param_1 = param_1 + 1, (char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar7 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n      }\n      uVar5 = uVar7 | uVar5;\n    }\n    printf("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,uVar4,uVar5,uVar4,uVar8);\n  }\n  else {\n    uVar4 = param_2 & 7;\n    if (uVar4 == 0) {\n      bVar1 = *param_1;\n      uVar4 = bVar1 & 0x7f;\n      bVar3 = 0;\n      pbVar2 = param_1 + 1;\n      while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar3 = bVar3 + 7;\n        uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n        if ((bVar3 & 0x20) != 0) {\n          uVar8 = 0;\n        }\n        uVar4 = uVar8 | uVar4;\n        pbVar2 = pbVar2 + 1;\n      }\n      if ((param_2 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n        return pbVar2;\n      }\n      printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n      return pbVar2;\n    }\n    if (uVar4 == 2) {\n      pbVar2 = (byte *)FUN_0004bb90();\n      return pbVar2;\n    }\n    if (uVar4 < 3) {\n      if (uVar4 == 1) {\n        pbVar2 = (byte *)FUN_0004b390();\n        return pbVar2;\n      }\n    }\n    else {\n      if (uVar4 == 3) {\n        pbVar2 = (byte *)FUN_0004b510();\n        return pbVar2;\n      }\n      if (uVar4 == 4) {\n        pbVar2 = (byte *)FUN_0004bcd0();\n        return pbVar2;\n      }\n    }\n    printf("Unknown code 0x%02x\n",param_2);\n  }\n  return param_1;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "byte *pbVar2;" type_identifier (pointer_declarator "*pbVar2" * identifier) ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (if_statement "if ((param_2 & 0x10) == 0) {\n    bVar1 = *param_1;\n    uVar8 = 0;\n    uVar4 = bVar1 & 0x7f;\n    bVar3 = 0;\n    param_1 = param_1 + 1;\n    while ((char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar6 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << (bVar3 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      uVar8 = uVar5 | uVar8;\n      uVar4 = uVar7 | uVar4;\n      param_1 = param_1 + 1;\n    }\n    bVar1 = *param_1;\n    uVar5 = bVar1 & 0x7f;\n    bVar3 = 0;\n    while (param_1 = param_1 + 1, (char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar7 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n      }\n      uVar5 = uVar7 | uVar5;\n    }\n    printf("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,uVar4,uVar5,uVar4,uVar8);\n  }\n  else {\n    uVar4 = param_2 & 7;\n    if (uVar4 == 0) {\n      bVar1 = *param_1;\n      uVar4 = bVar1 & 0x7f;\n      bVar3 = 0;\n      pbVar2 = param_1 + 1;\n      while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar3 = bVar3 + 7;\n        uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n        if ((bVar3 & 0x20) != 0) {\n          uVar8 = 0;\n        }\n        uVar4 = uVar8 | uVar4;\n        pbVar2 = pbVar2 + 1;\n      }\n      if ((param_2 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n        return pbVar2;\n      }\n      printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n      return pbVar2;\n    }\n    if (uVar4 == 2) {\n      pbVar2 = (byte *)FUN_0004bb90();\n      return pbVar2;\n    }\n    if (uVar4 < 3) {\n      if (uVar4 == 1) {\n        pbVar2 = (byte *)FUN_0004b390();\n        return pbVar2;\n      }\n    }\n    else {\n      if (uVar4 == 3) {\n        pbVar2 = (byte *)FUN_0004b510();\n        return pbVar2;\n      }\n      if (uVar4 == 4) {\n        pbVar2 = (byte *)FUN_0004bcd0();\n        return pbVar2;\n      }\n    }\n    printf("Unknown code 0x%02x\n",param_2);\n  }" if (parenthesized_expression "((param_2 & 0x10) == 0)" ( (binary_expression "(param_2 & 0x10) == 0" (parenthesized_expression "(param_2 & 0x10)" ( (binary_expression "param_2 & 0x10" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    bVar1 = *param_1;\n    uVar8 = 0;\n    uVar4 = bVar1 & 0x7f;\n    bVar3 = 0;\n    param_1 = param_1 + 1;\n    while ((char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar6 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << (bVar3 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      uVar8 = uVar5 | uVar8;\n      uVar4 = uVar7 | uVar4;\n      param_1 = param_1 + 1;\n    }\n    bVar1 = *param_1;\n    uVar5 = bVar1 & 0x7f;\n    bVar3 = 0;\n    while (param_1 = param_1 + 1, (char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar7 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n      }\n      uVar5 = uVar7 | uVar5;\n    }\n    printf("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,uVar4,uVar5,uVar4,uVar8);\n  }" { (expression_statement "bVar1 = *param_1;" (assignment_expression "bVar1 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" identifier = number_literal) ;) (expression_statement "uVar4 = bVar1 & 0x7f;" (assignment_expression "uVar4 = bVar1 & 0x7f" identifier = (binary_expression "bVar1 & 0x7f" identifier & number_literal)) ;) (expression_statement "bVar3 = 0;" (assignment_expression "bVar3 = 0" identifier = number_literal) ;) (expression_statement "param_1 = param_1 + 1;" (assignment_expression "param_1 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ;) (while_statement "while ((char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar6 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << (bVar3 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      uVar8 = uVar5 | uVar8;\n      uVar4 = uVar7 | uVar4;\n      param_1 = param_1 + 1;\n    }" while (parenthesized_expression "((char)bVar1 < '\0')" ( (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar6 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << (bVar3 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      uVar8 = uVar5 | uVar8;\n      uVar4 = uVar7 | uVar4;\n      param_1 = param_1 + 1;\n    }" { (expression_statement "bVar1 = *param_1;" (assignment_expression "bVar1 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "bVar3 = bVar3 + 7;" (assignment_expression "bVar3 = bVar3 + 7" identifier = (binary_expression "bVar3 + 7" identifier + number_literal)) ;) (expression_statement "uVar6 = (bVar1 & 0x7f) << (bVar3 & 0x1f);" (assignment_expression "uVar6 = (bVar1 & 0x7f) << (bVar3 & 0x1f)" identifier = (binary_expression "(bVar1 & 0x7f) << (bVar3 & 0x1f)" (parenthesized_expression "(bVar1 & 0x7f)" ( (binary_expression "bVar1 & 0x7f" identifier & number_literal) )) << (parenthesized_expression "(bVar3 & 0x1f)" ( (binary_expression "bVar3 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar7 = uVar6;" (assignment_expression "uVar7 = uVar6" identifier = identifier) ;) (expression_statement "uVar5 = 0 << (bVar3 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f);" (assignment_expression "uVar5 = 0 << (bVar3 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f)" identifier = (binary_expression "0 << (bVar3 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f)" (binary_expression "0 << (bVar3 & 0x1f)" number_literal << (parenthesized_expression "(bVar3 & 0x1f)" ( (binary_expression "bVar3 & 0x1f" identifier & number_literal) ))) | (binary_expression "(bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f)" (parenthesized_expression "(bVar1 & 0x7f)" ( (binary_expression "bVar1 & 0x7f" identifier & number_literal) )) >> (binary_expression "0x20 - (bVar3 & 0x1f)" number_literal - (parenthesized_expression "(bVar3 & 0x1f)" ( (binary_expression "bVar3 & 0x1f" identifier & number_literal) )))))) ;) (if_statement "if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }" if (parenthesized_expression "((bVar3 & 0x20) != 0)" ( (binary_expression "(bVar3 & 0x20) != 0" (parenthesized_expression "(bVar3 & 0x20)" ( (binary_expression "bVar3 & 0x20" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }" { (expression_statement "uVar7 = 0;" (assignment_expression "uVar7 = 0" identifier = number_literal) ;) (expression_statement "uVar5 = uVar6;" (assignment_expression "uVar5 = uVar6" identifier = identifier) ;) })) (expression_statement "uVar8 = uVar5 | uVar8;" (assignment_expression "uVar8 = uVar5 | uVar8" identifier = (binary_expression "uVar5 | uVar8" identifier | identifier)) ;) (expression_statement "uVar4 = uVar7 | uVar4;" (assignment_expression "uVar4 = uVar7 | uVar4" identifier = (binary_expression "uVar7 | uVar4" identifier | identifier)) ;) (expression_statement "param_1 = param_1 + 1;" (assignment_expression "param_1 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ;) })) (expression_statement "bVar1 = *param_1;" (assignment_expression "bVar1 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "uVar5 = bVar1 & 0x7f;" (assignment_expression "uVar5 = bVar1 & 0x7f" identifier = (binary_expression "bVar1 & 0x7f" identifier & number_literal)) ;) (expression_statement "bVar3 = 0;" (assignment_expression "bVar3 = 0" identifier = number_literal) ;) (while_statement "while (param_1 = param_1 + 1, (char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar7 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n      }\n      uVar5 = uVar7 | uVar5;\n    }" while (parenthesized_expression "(param_1 = param_1 + 1, (char)bVar1 < '\0')" ( (comma_expression "param_1 = param_1 + 1, (char)bVar1 < '\0'" (assignment_expression "param_1 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) , (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence '))) )) (compound_statement "{\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar7 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n      }\n      uVar5 = uVar7 | uVar5;\n    }" { (expression_statement "bVar1 = *param_1;" (assignment_expression "bVar1 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "bVar3 = bVar3 + 7;" (assignment_expression "bVar3 = bVar3 + 7" identifier = (binary_expression "bVar3 + 7" identifier + number_literal)) ;) (expression_statement "uVar7 = (bVar1 & 0x7f) << (bVar3 & 0x1f);" (assignment_expression "uVar7 = (bVar1 & 0x7f) << (bVar3 & 0x1f)" identifier = (binary_expression "(bVar1 & 0x7f) << (bVar3 & 0x1f)" (parenthesized_expression "(bVar1 & 0x7f)" ( (binary_expression "bVar1 & 0x7f" identifier & number_literal) )) << (parenthesized_expression "(bVar3 & 0x1f)" ( (binary_expression "bVar3 & 0x1f" identifier & number_literal) )))) ;) (if_statement "if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n      }" if (parenthesized_expression "((bVar3 & 0x20) != 0)" ( (binary_expression "(bVar3 & 0x20) != 0" (parenthesized_expression "(bVar3 & 0x20)" ( (binary_expression "bVar3 & 0x20" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        uVar7 = 0;\n      }" { (expression_statement "uVar7 = 0;" (assignment_expression "uVar7 = 0" identifier = number_literal) ;) })) (expression_statement "uVar5 = uVar7 | uVar5;" (assignment_expression "uVar5 = uVar7 | uVar5" identifier = (binary_expression "uVar7 | uVar5" identifier | identifier)) ;) })) (expression_statement "printf("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,uVar4,uVar5,uVar4,uVar8);" (call_expression "printf("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,uVar4,uVar5,uVar4,uVar8)" identifier (argument_list "("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,uVar4,uVar5,uVar4,uVar8)" ( (string_literal ""\t%s:epilogue(t=%lu,ecount=%lu)\n"" " escape_sequence string_content escape_sequence ") , (pointer_expression "&DAT_0007c02f" & identifier) , identifier , identifier , identifier , identifier ))) ;) }) (else_clause "else {\n    uVar4 = param_2 & 7;\n    if (uVar4 == 0) {\n      bVar1 = *param_1;\n      uVar4 = bVar1 & 0x7f;\n      bVar3 = 0;\n      pbVar2 = param_1 + 1;\n      while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar3 = bVar3 + 7;\n        uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n        if ((bVar3 & 0x20) != 0) {\n          uVar8 = 0;\n        }\n        uVar4 = uVar8 | uVar4;\n        pbVar2 = pbVar2 + 1;\n      }\n      if ((param_2 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n        return pbVar2;\n      }\n      printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n      return pbVar2;\n    }\n    if (uVar4 == 2) {\n      pbVar2 = (byte *)FUN_0004bb90();\n      return pbVar2;\n    }\n    if (uVar4 < 3) {\n      if (uVar4 == 1) {\n        pbVar2 = (byte *)FUN_0004b390();\n        return pbVar2;\n      }\n    }\n    else {\n      if (uVar4 == 3) {\n        pbVar2 = (byte *)FUN_0004b510();\n        return pbVar2;\n      }\n      if (uVar4 == 4) {\n        pbVar2 = (byte *)FUN_0004bcd0();\n        return pbVar2;\n      }\n    }\n    printf("Unknown code 0x%02x\n",param_2);\n  }" else (compound_statement "{\n    uVar4 = param_2 & 7;\n    if (uVar4 == 0) {\n      bVar1 = *param_1;\n      uVar4 = bVar1 & 0x7f;\n      bVar3 = 0;\n      pbVar2 = param_1 + 1;\n      while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar3 = bVar3 + 7;\n        uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n        if ((bVar3 & 0x20) != 0) {\n          uVar8 = 0;\n        }\n        uVar4 = uVar8 | uVar4;\n        pbVar2 = pbVar2 + 1;\n      }\n      if ((param_2 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n        return pbVar2;\n      }\n      printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n      return pbVar2;\n    }\n    if (uVar4 == 2) {\n      pbVar2 = (byte *)FUN_0004bb90();\n      return pbVar2;\n    }\n    if (uVar4 < 3) {\n      if (uVar4 == 1) {\n        pbVar2 = (byte *)FUN_0004b390();\n        return pbVar2;\n      }\n    }\n    else {\n      if (uVar4 == 3) {\n        pbVar2 = (byte *)FUN_0004b510();\n        return pbVar2;\n      }\n      if (uVar4 == 4) {\n        pbVar2 = (byte *)FUN_0004bcd0();\n        return pbVar2;\n      }\n    }\n    printf("Unknown code 0x%02x\n",param_2);\n  }" { (expression_statement "uVar4 = param_2 & 7;" (assignment_expression "uVar4 = param_2 & 7" identifier = (binary_expression "param_2 & 7" identifier & number_literal)) ;) (if_statement "if (uVar4 == 0) {\n      bVar1 = *param_1;\n      uVar4 = bVar1 & 0x7f;\n      bVar3 = 0;\n      pbVar2 = param_1 + 1;\n      while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar3 = bVar3 + 7;\n        uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n        if ((bVar3 & 0x20) != 0) {\n          uVar8 = 0;\n        }\n        uVar4 = uVar8 | uVar4;\n        pbVar2 = pbVar2 + 1;\n      }\n      if ((param_2 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n        return pbVar2;\n      }\n      printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n      return pbVar2;\n    }" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (compound_statement "{\n      bVar1 = *param_1;\n      uVar4 = bVar1 & 0x7f;\n      bVar3 = 0;\n      pbVar2 = param_1 + 1;\n      while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar3 = bVar3 + 7;\n        uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n        if ((bVar3 & 0x20) != 0) {\n          uVar8 = 0;\n        }\n        uVar4 = uVar8 | uVar4;\n        pbVar2 = pbVar2 + 1;\n      }\n      if ((param_2 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n        return pbVar2;\n      }\n      printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n      return pbVar2;\n    }" { (expression_statement "bVar1 = *param_1;" (assignment_expression "bVar1 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "uVar4 = bVar1 & 0x7f;" (assignment_expression "uVar4 = bVar1 & 0x7f" identifier = (binary_expression "bVar1 & 0x7f" identifier & number_literal)) ;) (expression_statement "bVar3 = 0;" (assignment_expression "bVar3 = 0" identifier = number_literal) ;) (expression_statement "pbVar2 = param_1 + 1;" (assignment_expression "pbVar2 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ;) (while_statement "while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar3 = bVar3 + 7;\n        uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n        if ((bVar3 & 0x20) != 0) {\n          uVar8 = 0;\n        }\n        uVar4 = uVar8 | uVar4;\n        pbVar2 = pbVar2 + 1;\n      }" while (parenthesized_expression "((char)bVar1 < '\0')" ( (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        bVar1 = *pbVar2;\n        bVar3 = bVar3 + 7;\n        uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n        if ((bVar3 & 0x20) != 0) {\n          uVar8 = 0;\n        }\n        uVar4 = uVar8 | uVar4;\n        pbVar2 = pbVar2 + 1;\n      }" { (expression_statement "bVar1 = *pbVar2;" (assignment_expression "bVar1 = *pbVar2" identifier = (pointer_expression "*pbVar2" * identifier)) ;) (expression_statement "bVar3 = bVar3 + 7;" (assignment_expression "bVar3 = bVar3 + 7" identifier = (binary_expression "bVar3 + 7" identifier + number_literal)) ;) (expression_statement "uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);" (assignment_expression "uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f)" identifier = (binary_expression "(bVar1 & 0x7f) << (bVar3 & 0x1f)" (parenthesized_expression "(bVar1 & 0x7f)" ( (binary_expression "bVar1 & 0x7f" identifier & number_literal) )) << (parenthesized_expression "(bVar3 & 0x1f)" ( (binary_expression "bVar3 & 0x1f" identifier & number_literal) )))) ;) (if_statement "if ((bVar3 & 0x20) != 0) {\n          uVar8 = 0;\n        }" if (parenthesized_expression "((bVar3 & 0x20) != 0)" ( (binary_expression "(bVar3 & 0x20) != 0" (parenthesized_expression "(bVar3 & 0x20)" ( (binary_expression "bVar3 & 0x20" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n          uVar8 = 0;\n        }" { (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" identifier = number_literal) ;) })) (expression_statement "uVar4 = uVar8 | uVar4;" (assignment_expression "uVar4 = uVar8 | uVar4" identifier = (binary_expression "uVar8 | uVar4" identifier | identifier)) ;) (expression_statement "pbVar2 = pbVar2 + 1;" (assignment_expression "pbVar2 = pbVar2 + 1" identifier = (binary_expression "pbVar2 + 1" identifier + number_literal)) ;) })) (if_statement "if ((param_2 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n        return pbVar2;\n      }" if (parenthesized_expression "((param_2 & 8) != 0)" ( (binary_expression "(param_2 & 8) != 0" (parenthesized_expression "(param_2 & 8)" ( (binary_expression "param_2 & 8" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n        return pbVar2;\n      }" { (expression_statement "printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);" (call_expression "printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4)" identifier (argument_list "("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4)" ( (string_literal ""\t%s:copy_state(label=%lu)\n"" " escape_sequence string_content escape_sequence ") , (pointer_expression "&DAT_0008e71c" & identifier) , identifier ))) ;) (return_statement "return pbVar2;" return identifier ;) })) (expression_statement "printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4);" (call_expression "printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4)" identifier (argument_list "("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4)" ( (string_literal ""\t%s:label_state(label=%lu)\n"" " escape_sequence string_content escape_sequence ") , (pointer_expression "&DAT_0008e71c" & identifier) , identifier ))) ;) (return_statement "return pbVar2;" return identifier ;) })) (if_statement "if (uVar4 == 2) {\n      pbVar2 = (byte *)FUN_0004bb90();\n      return pbVar2;\n    }" if (parenthesized_expression "(uVar4 == 2)" ( (binary_expression "uVar4 == 2" identifier == number_literal) )) (compound_statement "{\n      pbVar2 = (byte *)FUN_0004bb90();\n      return pbVar2;\n    }" { (expression_statement "pbVar2 = (byte *)FUN_0004bb90();" (assignment_expression "pbVar2 = (byte *)FUN_0004bb90()" identifier = (cast_expression "(byte *)FUN_0004bb90()" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0004bb90()" identifier (argument_list "()" ( ))))) ;) (return_statement "return pbVar2;" return identifier ;) })) (if_statement "if (uVar4 < 3) {\n      if (uVar4 == 1) {\n        pbVar2 = (byte *)FUN_0004b390();\n        return pbVar2;\n      }\n    }\n    else {\n      if (uVar4 == 3) {\n        pbVar2 = (byte *)FUN_0004b510();\n        return pbVar2;\n      }\n      if (uVar4 == 4) {\n        pbVar2 = (byte *)FUN_0004bcd0();\n        return pbVar2;\n      }\n    }" if (parenthesized_expression "(uVar4 < 3)" ( (binary_expression "uVar4 < 3" identifier < number_literal) )) (compound_statement "{\n      if (uVar4 == 1) {\n        pbVar2 = (byte *)FUN_0004b390();\n        return pbVar2;\n      }\n    }" { (if_statement "if (uVar4 == 1) {\n        pbVar2 = (byte *)FUN_0004b390();\n        return pbVar2;\n      }" if (parenthesized_expression "(uVar4 == 1)" ( (binary_expression "uVar4 == 1" identifier == number_literal) )) (compound_statement "{\n        pbVar2 = (byte *)FUN_0004b390();\n        return pbVar2;\n      }" { (expression_statement "pbVar2 = (byte *)FUN_0004b390();" (assignment_expression "pbVar2 = (byte *)FUN_0004b390()" identifier = (cast_expression "(byte *)FUN_0004b390()" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0004b390()" identifier (argument_list "()" ( ))))) ;) (return_statement "return pbVar2;" return identifier ;) })) }) (else_clause "else {\n      if (uVar4 == 3) {\n        pbVar2 = (byte *)FUN_0004b510();\n        return pbVar2;\n      }\n      if (uVar4 == 4) {\n        pbVar2 = (byte *)FUN_0004bcd0();\n        return pbVar2;\n      }\n    }" else (compound_statement "{\n      if (uVar4 == 3) {\n        pbVar2 = (byte *)FUN_0004b510();\n        return pbVar2;\n      }\n      if (uVar4 == 4) {\n        pbVar2 = (byte *)FUN_0004bcd0();\n        return pbVar2;\n      }\n    }" { (if_statement "if (uVar4 == 3) {\n        pbVar2 = (byte *)FUN_0004b510();\n        return pbVar2;\n      }" if (parenthesized_expression "(uVar4 == 3)" ( (binary_expression "uVar4 == 3" identifier == number_literal) )) (compound_statement "{\n        pbVar2 = (byte *)FUN_0004b510();\n        return pbVar2;\n      }" { (expression_statement "pbVar2 = (byte *)FUN_0004b510();" (assignment_expression "pbVar2 = (byte *)FUN_0004b510()" identifier = (cast_expression "(byte *)FUN_0004b510()" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0004b510()" identifier (argument_list "()" ( ))))) ;) (return_statement "return pbVar2;" return identifier ;) })) (if_statement "if (uVar4 == 4) {\n        pbVar2 = (byte *)FUN_0004bcd0();\n        return pbVar2;\n      }" if (parenthesized_expression "(uVar4 == 4)" ( (binary_expression "uVar4 == 4" identifier == number_literal) )) (compound_statement "{\n        pbVar2 = (byte *)FUN_0004bcd0();\n        return pbVar2;\n      }" { (expression_statement "pbVar2 = (byte *)FUN_0004bcd0();" (assignment_expression "pbVar2 = (byte *)FUN_0004bcd0()" identifier = (cast_expression "(byte *)FUN_0004bcd0()" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0004bcd0()" identifier (argument_list "()" ( ))))) ;) (return_statement "return pbVar2;" return identifier ;) })) }))) (expression_statement "printf("Unknown code 0x%02x\n",param_2);" (call_expression "printf("Unknown code 0x%02x\n",param_2)" identifier (argument_list "("Unknown code 0x%02x\n",param_2)" ( (string_literal ""Unknown code 0x%02x\n"" " string_content escape_sequence ") , identifier ))) ;) }))) (return_statement "return param_1;" return identifier ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */\n\nuchar * __regparm3 unw_decode_b3_x4(uchar *dp,uint code,void *arg,uchar *end)\n\n{\n  byte bVar1;\n  byte *pbVar2;\n  uchar *puVar3;\n  byte bVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint in_stack_00000008;\n  void *in_stack_0000000c;\n  uint uVar9;\n  \n  if ((in_stack_00000008 & 0x10) == 0) {\n    bVar1 = *end;\n    uVar9 = 0;\n    uVar5 = bVar1 & 0x7f;\n    bVar4 = 0;\n    end = end + 1;\n    while ((char)bVar1 < '\0') {\n      bVar1 = *end;\n      bVar4 = bVar4 + 7;\n      uVar7 = (bVar1 & 0x7f) << (bVar4 & 0x1f);\n      uVar8 = uVar7;\n      uVar6 = 0 << (bVar4 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar4 & 0x1f);\n      if ((bVar4 & 0x20) != 0) {\n        uVar8 = 0;\n        uVar6 = uVar7;\n      }\n      uVar9 = uVar6 | uVar9;\n      uVar5 = uVar8 | uVar5;\n      end = end + 1;\n    }\n    bVar1 = *end;\n    uVar6 = bVar1 & 0x7f;\n    bVar4 = 0;\n    while (end = end + 1, (char)bVar1 < '\0') {\n      bVar1 = *end;\n      bVar4 = bVar4 + 7;\n      uVar8 = (bVar1 & 0x7f) << (bVar4 & 0x1f);\n      if ((bVar4 & 0x20) != 0) {\n        uVar8 = 0;\n      }\n      uVar6 = uVar8 | uVar6;\n    }\n    printf("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,uVar5,uVar6,uVar5,uVar9);\n  }\n  else {\n    uVar5 = in_stack_00000008 & 7;\n    if (uVar5 == 0) {\n      bVar1 = *end;\n      uVar5 = bVar1 & 0x7f;\n      bVar4 = 0;\n      pbVar2 = end + 1;\n      while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar4 = bVar4 + 7;\n        uVar9 = (bVar1 & 0x7f) << (bVar4 & 0x1f);\n        if ((bVar4 & 0x20) != 0) {\n          uVar9 = 0;\n        }\n        uVar5 = uVar9 | uVar5;\n        pbVar2 = pbVar2 + 1;\n      }\n      if ((in_stack_00000008 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar5);\n        return pbVar2;\n      }\n      printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar5);\n      return pbVar2;\n    }\n    if (uVar5 == 2) {\n      puVar3 = unw_decode_x2(end,code,arg);\n      return puVar3;\n    }\n    if (uVar5 < 3) {\n      if (uVar5 == 1) {\n        puVar3 = unw_decode_x1(end,in_stack_00000008,in_stack_0000000c);\n        return puVar3;\n      }\n    }\n    else {\n      if (uVar5 == 3) {\n        puVar3 = unw_decode_x3(end,in_stack_00000008,in_stack_0000000c);\n        return puVar3;\n      }\n      if (uVar5 == 4) {\n        puVar3 = unw_decode_x4(end,code,arg);\n        return puVar3;\n      }\n    }\n    printf("Unknown code 0x%02x\n");\n  }\n  return end;\n}\n\n" comment (ERROR "uchar * __regparm3 unw_decode_b3_x4(uchar *dp,uint code,void *arg,uchar *end)" (binary_expression "uchar * __regparm3 unw_decode_b3_x4(uchar *dp,uint code,void *arg,uchar *end)" identifier * (ERROR "__regparm3" identifier) (call_expression "unw_decode_b3_x4(uchar *dp,uint code,void *arg,uchar *end)" identifier (argument_list "(uchar *dp,uint code,void *arg,uchar *end)" ( (binary_expression "uchar *dp" identifier * identifier) , identifier (ERROR "code" identifier) , (binary_expression "void *arg" identifier * identifier) , (binary_expression "uchar *end" identifier * identifier) ))))) (compound_statement "{\n  byte bVar1;\n  byte *pbVar2;\n  uchar *puVar3;\n  byte bVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint in_stack_00000008;\n  void *in_stack_0000000c;\n  uint uVar9;\n  \n  if ((in_stack_00000008 & 0x10) == 0) {\n    bVar1 = *end;\n    uVar9 = 0;\n    uVar5 = bVar1 & 0x7f;\n    bVar4 = 0;\n    end = end + 1;\n    while ((char)bVar1 < '\0') {\n      bVar1 = *end;\n      bVar4 = bVar4 + 7;\n      uVar7 = (bVar1 & 0x7f) << (bVar4 & 0x1f);\n      uVar8 = uVar7;\n      uVar6 = 0 << (bVar4 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar4 & 0x1f);\n      if ((bVar4 & 0x20) != 0) {\n        uVar8 = 0;\n        uVar6 = uVar7;\n      }\n      uVar9 = uVar6 | uVar9;\n      uVar5 = uVar8 | uVar5;\n      end = end + 1;\n    }\n    bVar1 = *end;\n    uVar6 = bVar1 & 0x7f;\n    bVar4 = 0;\n    while (end = end + 1, (char)bVar1 < '\0') {\n      bVar1 = *end;\n      bVar4 = bVar4 + 7;\n      uVar8 = (bVar1 & 0x7f) << (bVar4 & 0x1f);\n      if ((bVar4 & 0x20) != 0) {\n        uVar8 = 0;\n      }\n      uVar6 = uVar8 | uVar6;\n    }\n    printf("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,uVar5,uVar6,uVar5,uVar9);\n  }\n  else {\n    uVar5 = in_stack_00000008 & 7;\n    if (uVar5 == 0) {\n      bVar1 = *end;\n      uVar5 = bVar1 & 0x7f;\n      bVar4 = 0;\n      pbVar2 = end + 1;\n      while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar4 = bVar4 + 7;\n        uVar9 = (bVar1 & 0x7f) << (bVar4 & 0x1f);\n        if ((bVar4 & 0x20) != 0) {\n          uVar9 = 0;\n        }\n        uVar5 = uVar9 | uVar5;\n        pbVar2 = pbVar2 + 1;\n      }\n      if ((in_stack_00000008 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar5);\n        return pbVar2;\n      }\n      printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar5);\n      return pbVar2;\n    }\n    if (uVar5 == 2) {\n      puVar3 = unw_decode_x2(end,code,arg);\n      return puVar3;\n    }\n    if (uVar5 < 3) {\n      if (uVar5 == 1) {\n        puVar3 = unw_decode_x1(end,in_stack_00000008,in_stack_0000000c);\n        return puVar3;\n      }\n    }\n    else {\n      if (uVar5 == 3) {\n        puVar3 = unw_decode_x3(end,in_stack_00000008,in_stack_0000000c);\n        return puVar3;\n      }\n      if (uVar5 == 4) {\n        puVar3 = unw_decode_x4(end,code,arg);\n        return puVar3;\n      }\n    }\n    printf("Unknown code 0x%02x\n");\n  }\n  return end;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "byte *pbVar2;" type_identifier (pointer_declarator "*pbVar2" * identifier) ;) (declaration "uchar *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "byte bVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "uint in_stack_00000008;" type_identifier identifier ;) (declaration "void *in_stack_0000000c;" primitive_type (pointer_declarator "*in_stack_0000000c" * identifier) ;) (declaration "uint uVar9;" type_identifier identifier ;) (if_statement "if ((in_stack_00000008 & 0x10) == 0) {\n    bVar1 = *end;\n    uVar9 = 0;\n    uVar5 = bVar1 & 0x7f;\n    bVar4 = 0;\n    end = end + 1;\n    while ((char)bVar1 < '\0') {\n      bVar1 = *end;\n      bVar4 = bVar4 + 7;\n      uVar7 = (bVar1 & 0x7f) << (bVar4 & 0x1f);\n      uVar8 = uVar7;\n      uVar6 = 0 << (bVar4 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar4 & 0x1f);\n      if ((bVar4 & 0x20) != 0) {\n        uVar8 = 0;\n        uVar6 = uVar7;\n      }\n      uVar9 = uVar6 | uVar9;\n      uVar5 = uVar8 | uVar5;\n      end = end + 1;\n    }\n    bVar1 = *end;\n    uVar6 = bVar1 & 0x7f;\n    bVar4 = 0;\n    while (end = end + 1, (char)bVar1 < '\0') {\n      bVar1 = *end;\n      bVar4 = bVar4 + 7;\n      uVar8 = (bVar1 & 0x7f) << (bVar4 & 0x1f);\n      if ((bVar4 & 0x20) != 0) {\n        uVar8 = 0;\n      }\n      uVar6 = uVar8 | uVar6;\n    }\n    printf("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,uVar5,uVar6,uVar5,uVar9);\n  }\n  else {\n    uVar5 = in_stack_00000008 & 7;\n    if (uVar5 == 0) {\n      bVar1 = *end;\n      uVar5 = bVar1 & 0x7f;\n      bVar4 = 0;\n      pbVar2 = end + 1;\n      while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar4 = bVar4 + 7;\n        uVar9 = (bVar1 & 0x7f) << (bVar4 & 0x1f);\n        if ((bVar4 & 0x20) != 0) {\n          uVar9 = 0;\n        }\n        uVar5 = uVar9 | uVar5;\n        pbVar2 = pbVar2 + 1;\n      }\n      if ((in_stack_00000008 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar5);\n        return pbVar2;\n      }\n      printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar5);\n      return pbVar2;\n    }\n    if (uVar5 == 2) {\n      puVar3 = unw_decode_x2(end,code,arg);\n      return puVar3;\n    }\n    if (uVar5 < 3) {\n      if (uVar5 == 1) {\n        puVar3 = unw_decode_x1(end,in_stack_00000008,in_stack_0000000c);\n        return puVar3;\n      }\n    }\n    else {\n      if (uVar5 == 3) {\n        puVar3 = unw_decode_x3(end,in_stack_00000008,in_stack_0000000c);\n        return puVar3;\n      }\n      if (uVar5 == 4) {\n        puVar3 = unw_decode_x4(end,code,arg);\n        return puVar3;\n      }\n    }\n    printf("Unknown code 0x%02x\n");\n  }" if (parenthesized_expression "((in_stack_00000008 & 0x10) == 0)" ( (binary_expression "(in_stack_00000008 & 0x10) == 0" (parenthesized_expression "(in_stack_00000008 & 0x10)" ( (binary_expression "in_stack_00000008 & 0x10" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    bVar1 = *end;\n    uVar9 = 0;\n    uVar5 = bVar1 & 0x7f;\n    bVar4 = 0;\n    end = end + 1;\n    while ((char)bVar1 < '\0') {\n      bVar1 = *end;\n      bVar4 = bVar4 + 7;\n      uVar7 = (bVar1 & 0x7f) << (bVar4 & 0x1f);\n      uVar8 = uVar7;\n      uVar6 = 0 << (bVar4 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar4 & 0x1f);\n      if ((bVar4 & 0x20) != 0) {\n        uVar8 = 0;\n        uVar6 = uVar7;\n      }\n      uVar9 = uVar6 | uVar9;\n      uVar5 = uVar8 | uVar5;\n      end = end + 1;\n    }\n    bVar1 = *end;\n    uVar6 = bVar1 & 0x7f;\n    bVar4 = 0;\n    while (end = end + 1, (char)bVar1 < '\0') {\n      bVar1 = *end;\n      bVar4 = bVar4 + 7;\n      uVar8 = (bVar1 & 0x7f) << (bVar4 & 0x1f);\n      if ((bVar4 & 0x20) != 0) {\n        uVar8 = 0;\n      }\n      uVar6 = uVar8 | uVar6;\n    }\n    printf("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,uVar5,uVar6,uVar5,uVar9);\n  }" { (expression_statement "bVar1 = *end;" (assignment_expression "bVar1 = *end" identifier = (pointer_expression "*end" * identifier)) ;) (expression_statement "uVar9 = 0;" (assignment_expression "uVar9 = 0" identifier = number_literal) ;) (expression_statement "uVar5 = bVar1 & 0x7f;" (assignment_expression "uVar5 = bVar1 & 0x7f" identifier = (binary_expression "bVar1 & 0x7f" identifier & number_literal)) ;) (expression_statement "bVar4 = 0;" (assignment_expression "bVar4 = 0" identifier = number_literal) ;) (expression_statement "end = end + 1;" (assignment_expression "end = end + 1" identifier = (binary_expression "end + 1" identifier + number_literal)) ;) (while_statement "while ((char)bVar1 < '\0') {\n      bVar1 = *end;\n      bVar4 = bVar4 + 7;\n      uVar7 = (bVar1 & 0x7f) << (bVar4 & 0x1f);\n      uVar8 = uVar7;\n      uVar6 = 0 << (bVar4 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar4 & 0x1f);\n      if ((bVar4 & 0x20) != 0) {\n        uVar8 = 0;\n        uVar6 = uVar7;\n      }\n      uVar9 = uVar6 | uVar9;\n      uVar5 = uVar8 | uVar5;\n      end = end + 1;\n    }" while (parenthesized_expression "((char)bVar1 < '\0')" ( (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      bVar1 = *end;\n      bVar4 = bVar4 + 7;\n      uVar7 = (bVar1 & 0x7f) << (bVar4 & 0x1f);\n      uVar8 = uVar7;\n      uVar6 = 0 << (bVar4 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar4 & 0x1f);\n      if ((bVar4 & 0x20) != 0) {\n        uVar8 = 0;\n        uVar6 = uVar7;\n      }\n      uVar9 = uVar6 | uVar9;\n      uVar5 = uVar8 | uVar5;\n      end = end + 1;\n    }" { (expression_statement "bVar1 = *end;" (assignment_expression "bVar1 = *end" identifier = (pointer_expression "*end" * identifier)) ;) (expression_statement "bVar4 = bVar4 + 7;" (assignment_expression "bVar4 = bVar4 + 7" identifier = (binary_expression "bVar4 + 7" identifier + number_literal)) ;) (expression_statement "uVar7 = (bVar1 & 0x7f) << (bVar4 & 0x1f);" (assignment_expression "uVar7 = (bVar1 & 0x7f) << (bVar4 & 0x1f)" identifier = (binary_expression "(bVar1 & 0x7f) << (bVar4 & 0x1f)" (parenthesized_expression "(bVar1 & 0x7f)" ( (binary_expression "bVar1 & 0x7f" identifier & number_literal) )) << (parenthesized_expression "(bVar4 & 0x1f)" ( (binary_expression "bVar4 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar8 = uVar7;" (assignment_expression "uVar8 = uVar7" identifier = identifier) ;) (expression_statement "uVar6 = 0 << (bVar4 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar4 & 0x1f);" (assignment_expression "uVar6 = 0 << (bVar4 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar4 & 0x1f)" identifier = (binary_expression "0 << (bVar4 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar4 & 0x1f)" (binary_expression "0 << (bVar4 & 0x1f)" number_literal << (parenthesized_expression "(bVar4 & 0x1f)" ( (binary_expression "bVar4 & 0x1f" identifier & number_literal) ))) | (binary_expression "(bVar1 & 0x7f) >> 0x20 - (bVar4 & 0x1f)" (parenthesized_expression "(bVar1 & 0x7f)" ( (binary_expression "bVar1 & 0x7f" identifier & number_literal) )) >> (binary_expression "0x20 - (bVar4 & 0x1f)" number_literal - (parenthesized_expression "(bVar4 & 0x1f)" ( (binary_expression "bVar4 & 0x1f" identifier & number_literal) )))))) ;) (if_statement "if ((bVar4 & 0x20) != 0) {\n        uVar8 = 0;\n        uVar6 = uVar7;\n      }" if (parenthesized_expression "((bVar4 & 0x20) != 0)" ( (binary_expression "(bVar4 & 0x20) != 0" (parenthesized_expression "(bVar4 & 0x20)" ( (binary_expression "bVar4 & 0x20" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        uVar8 = 0;\n        uVar6 = uVar7;\n      }" { (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" identifier = number_literal) ;) (expression_statement "uVar6 = uVar7;" (assignment_expression "uVar6 = uVar7" identifier = identifier) ;) })) (expression_statement "uVar9 = uVar6 | uVar9;" (assignment_expression "uVar9 = uVar6 | uVar9" identifier = (binary_expression "uVar6 | uVar9" identifier | identifier)) ;) (expression_statement "uVar5 = uVar8 | uVar5;" (assignment_expression "uVar5 = uVar8 | uVar5" identifier = (binary_expression "uVar8 | uVar5" identifier | identifier)) ;) (expression_statement "end = end + 1;" (assignment_expression "end = end + 1" identifier = (binary_expression "end + 1" identifier + number_literal)) ;) })) (expression_statement "bVar1 = *end;" (assignment_expression "bVar1 = *end" identifier = (pointer_expression "*end" * identifier)) ;) (expression_statement "uVar6 = bVar1 & 0x7f;" (assignment_expression "uVar6 = bVar1 & 0x7f" identifier = (binary_expression "bVar1 & 0x7f" identifier & number_literal)) ;) (expression_statement "bVar4 = 0;" (assignment_expression "bVar4 = 0" identifier = number_literal) ;) (while_statement "while (end = end + 1, (char)bVar1 < '\0') {\n      bVar1 = *end;\n      bVar4 = bVar4 + 7;\n      uVar8 = (bVar1 & 0x7f) << (bVar4 & 0x1f);\n      if ((bVar4 & 0x20) != 0) {\n        uVar8 = 0;\n      }\n      uVar6 = uVar8 | uVar6;\n    }" while (parenthesized_expression "(end = end + 1, (char)bVar1 < '\0')" ( (comma_expression "end = end + 1, (char)bVar1 < '\0'" (assignment_expression "end = end + 1" identifier = (binary_expression "end + 1" identifier + number_literal)) , (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence '))) )) (compound_statement "{\n      bVar1 = *end;\n      bVar4 = bVar4 + 7;\n      uVar8 = (bVar1 & 0x7f) << (bVar4 & 0x1f);\n      if ((bVar4 & 0x20) != 0) {\n        uVar8 = 0;\n      }\n      uVar6 = uVar8 | uVar6;\n    }" { (expression_statement "bVar1 = *end;" (assignment_expression "bVar1 = *end" identifier = (pointer_expression "*end" * identifier)) ;) (expression_statement "bVar4 = bVar4 + 7;" (assignment_expression "bVar4 = bVar4 + 7" identifier = (binary_expression "bVar4 + 7" identifier + number_literal)) ;) (expression_statement "uVar8 = (bVar1 & 0x7f) << (bVar4 & 0x1f);" (assignment_expression "uVar8 = (bVar1 & 0x7f) << (bVar4 & 0x1f)" identifier = (binary_expression "(bVar1 & 0x7f) << (bVar4 & 0x1f)" (parenthesized_expression "(bVar1 & 0x7f)" ( (binary_expression "bVar1 & 0x7f" identifier & number_literal) )) << (parenthesized_expression "(bVar4 & 0x1f)" ( (binary_expression "bVar4 & 0x1f" identifier & number_literal) )))) ;) (if_statement "if ((bVar4 & 0x20) != 0) {\n        uVar8 = 0;\n      }" if (parenthesized_expression "((bVar4 & 0x20) != 0)" ( (binary_expression "(bVar4 & 0x20) != 0" (parenthesized_expression "(bVar4 & 0x20)" ( (binary_expression "bVar4 & 0x20" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        uVar8 = 0;\n      }" { (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" identifier = number_literal) ;) })) (expression_statement "uVar6 = uVar8 | uVar6;" (assignment_expression "uVar6 = uVar8 | uVar6" identifier = (binary_expression "uVar8 | uVar6" identifier | identifier)) ;) })) (expression_statement "printf("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,uVar5,uVar6,uVar5,uVar9);" (call_expression "printf("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,uVar5,uVar6,uVar5,uVar9)" identifier (argument_list "("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,uVar5,uVar6,uVar5,uVar9)" ( (string_literal ""\t%s:epilogue(t=%lu,ecount=%lu)\n"" " escape_sequence string_content escape_sequence ") , (pointer_expression "&DAT_0007c02f" & identifier) , identifier , identifier , identifier , identifier ))) ;) }) (else_clause "else {\n    uVar5 = in_stack_00000008 & 7;\n    if (uVar5 == 0) {\n      bVar1 = *end;\n      uVar5 = bVar1 & 0x7f;\n      bVar4 = 0;\n      pbVar2 = end + 1;\n      while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar4 = bVar4 + 7;\n        uVar9 = (bVar1 & 0x7f) << (bVar4 & 0x1f);\n        if ((bVar4 & 0x20) != 0) {\n          uVar9 = 0;\n        }\n        uVar5 = uVar9 | uVar5;\n        pbVar2 = pbVar2 + 1;\n      }\n      if ((in_stack_00000008 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar5);\n        return pbVar2;\n      }\n      printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar5);\n      return pbVar2;\n    }\n    if (uVar5 == 2) {\n      puVar3 = unw_decode_x2(end,code,arg);\n      return puVar3;\n    }\n    if (uVar5 < 3) {\n      if (uVar5 == 1) {\n        puVar3 = unw_decode_x1(end,in_stack_00000008,in_stack_0000000c);\n        return puVar3;\n      }\n    }\n    else {\n      if (uVar5 == 3) {\n        puVar3 = unw_decode_x3(end,in_stack_00000008,in_stack_0000000c);\n        return puVar3;\n      }\n      if (uVar5 == 4) {\n        puVar3 = unw_decode_x4(end,code,arg);\n        return puVar3;\n      }\n    }\n    printf("Unknown code 0x%02x\n");\n  }" else (compound_statement "{\n    uVar5 = in_stack_00000008 & 7;\n    if (uVar5 == 0) {\n      bVar1 = *end;\n      uVar5 = bVar1 & 0x7f;\n      bVar4 = 0;\n      pbVar2 = end + 1;\n      while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar4 = bVar4 + 7;\n        uVar9 = (bVar1 & 0x7f) << (bVar4 & 0x1f);\n        if ((bVar4 & 0x20) != 0) {\n          uVar9 = 0;\n        }\n        uVar5 = uVar9 | uVar5;\n        pbVar2 = pbVar2 + 1;\n      }\n      if ((in_stack_00000008 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar5);\n        return pbVar2;\n      }\n      printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar5);\n      return pbVar2;\n    }\n    if (uVar5 == 2) {\n      puVar3 = unw_decode_x2(end,code,arg);\n      return puVar3;\n    }\n    if (uVar5 < 3) {\n      if (uVar5 == 1) {\n        puVar3 = unw_decode_x1(end,in_stack_00000008,in_stack_0000000c);\n        return puVar3;\n      }\n    }\n    else {\n      if (uVar5 == 3) {\n        puVar3 = unw_decode_x3(end,in_stack_00000008,in_stack_0000000c);\n        return puVar3;\n      }\n      if (uVar5 == 4) {\n        puVar3 = unw_decode_x4(end,code,arg);\n        return puVar3;\n      }\n    }\n    printf("Unknown code 0x%02x\n");\n  }" { (expression_statement "uVar5 = in_stack_00000008 & 7;" (assignment_expression "uVar5 = in_stack_00000008 & 7" identifier = (binary_expression "in_stack_00000008 & 7" identifier & number_literal)) ;) (if_statement "if (uVar5 == 0) {\n      bVar1 = *end;\n      uVar5 = bVar1 & 0x7f;\n      bVar4 = 0;\n      pbVar2 = end + 1;\n      while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar4 = bVar4 + 7;\n        uVar9 = (bVar1 & 0x7f) << (bVar4 & 0x1f);\n        if ((bVar4 & 0x20) != 0) {\n          uVar9 = 0;\n        }\n        uVar5 = uVar9 | uVar5;\n        pbVar2 = pbVar2 + 1;\n      }\n      if ((in_stack_00000008 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar5);\n        return pbVar2;\n      }\n      printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar5);\n      return pbVar2;\n    }" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (compound_statement "{\n      bVar1 = *end;\n      uVar5 = bVar1 & 0x7f;\n      bVar4 = 0;\n      pbVar2 = end + 1;\n      while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar4 = bVar4 + 7;\n        uVar9 = (bVar1 & 0x7f) << (bVar4 & 0x1f);\n        if ((bVar4 & 0x20) != 0) {\n          uVar9 = 0;\n        }\n        uVar5 = uVar9 | uVar5;\n        pbVar2 = pbVar2 + 1;\n      }\n      if ((in_stack_00000008 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar5);\n        return pbVar2;\n      }\n      printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar5);\n      return pbVar2;\n    }" { (expression_statement "bVar1 = *end;" (assignment_expression "bVar1 = *end" identifier = (pointer_expression "*end" * identifier)) ;) (expression_statement "uVar5 = bVar1 & 0x7f;" (assignment_expression "uVar5 = bVar1 & 0x7f" identifier = (binary_expression "bVar1 & 0x7f" identifier & number_literal)) ;) (expression_statement "bVar4 = 0;" (assignment_expression "bVar4 = 0" identifier = number_literal) ;) (expression_statement "pbVar2 = end + 1;" (assignment_expression "pbVar2 = end + 1" identifier = (binary_expression "end + 1" identifier + number_literal)) ;) (while_statement "while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar4 = bVar4 + 7;\n        uVar9 = (bVar1 & 0x7f) << (bVar4 & 0x1f);\n        if ((bVar4 & 0x20) != 0) {\n          uVar9 = 0;\n        }\n        uVar5 = uVar9 | uVar5;\n        pbVar2 = pbVar2 + 1;\n      }" while (parenthesized_expression "((char)bVar1 < '\0')" ( (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        bVar1 = *pbVar2;\n        bVar4 = bVar4 + 7;\n        uVar9 = (bVar1 & 0x7f) << (bVar4 & 0x1f);\n        if ((bVar4 & 0x20) != 0) {\n          uVar9 = 0;\n        }\n        uVar5 = uVar9 | uVar5;\n        pbVar2 = pbVar2 + 1;\n      }" { (expression_statement "bVar1 = *pbVar2;" (assignment_expression "bVar1 = *pbVar2" identifier = (pointer_expression "*pbVar2" * identifier)) ;) (expression_statement "bVar4 = bVar4 + 7;" (assignment_expression "bVar4 = bVar4 + 7" identifier = (binary_expression "bVar4 + 7" identifier + number_literal)) ;) (expression_statement "uVar9 = (bVar1 & 0x7f) << (bVar4 & 0x1f);" (assignment_expression "uVar9 = (bVar1 & 0x7f) << (bVar4 & 0x1f)" identifier = (binary_expression "(bVar1 & 0x7f) << (bVar4 & 0x1f)" (parenthesized_expression "(bVar1 & 0x7f)" ( (binary_expression "bVar1 & 0x7f" identifier & number_literal) )) << (parenthesized_expression "(bVar4 & 0x1f)" ( (binary_expression "bVar4 & 0x1f" identifier & number_literal) )))) ;) (if_statement "if ((bVar4 & 0x20) != 0) {\n          uVar9 = 0;\n        }" if (parenthesized_expression "((bVar4 & 0x20) != 0)" ( (binary_expression "(bVar4 & 0x20) != 0" (parenthesized_expression "(bVar4 & 0x20)" ( (binary_expression "bVar4 & 0x20" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n          uVar9 = 0;\n        }" { (expression_statement "uVar9 = 0;" (assignment_expression "uVar9 = 0" identifier = number_literal) ;) })) (expression_statement "uVar5 = uVar9 | uVar5;" (assignment_expression "uVar5 = uVar9 | uVar5" identifier = (binary_expression "uVar9 | uVar5" identifier | identifier)) ;) (expression_statement "pbVar2 = pbVar2 + 1;" (assignment_expression "pbVar2 = pbVar2 + 1" identifier = (binary_expression "pbVar2 + 1" identifier + number_literal)) ;) })) (if_statement "if ((in_stack_00000008 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar5);\n        return pbVar2;\n      }" if (parenthesized_expression "((in_stack_00000008 & 8) != 0)" ( (binary_expression "(in_stack_00000008 & 8) != 0" (parenthesized_expression "(in_stack_00000008 & 8)" ( (binary_expression "in_stack_00000008 & 8" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar5);\n        return pbVar2;\n      }" { (expression_statement "printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar5);" (call_expression "printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar5)" identifier (argument_list "("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar5)" ( (string_literal ""\t%s:copy_state(label=%lu)\n"" " escape_sequence string_content escape_sequence ") , (pointer_expression "&DAT_0008e71c" & identifier) , identifier ))) ;) (return_statement "return pbVar2;" return identifier ;) })) (expression_statement "printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar5);" (call_expression "printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar5)" identifier (argument_list "("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar5)" ( (string_literal ""\t%s:label_state(label=%lu)\n"" " escape_sequence string_content escape_sequence ") , (pointer_expression "&DAT_0008e71c" & identifier) , identifier ))) ;) (return_statement "return pbVar2;" return identifier ;) })) (if_statement "if (uVar5 == 2) {\n      puVar3 = unw_decode_x2(end,code,arg);\n      return puVar3;\n    }" if (parenthesized_expression "(uVar5 == 2)" ( (binary_expression "uVar5 == 2" identifier == number_literal) )) (compound_statement "{\n      puVar3 = unw_decode_x2(end,code,arg);\n      return puVar3;\n    }" { (expression_statement "puVar3 = unw_decode_x2(end,code,arg);" (assignment_expression "puVar3 = unw_decode_x2(end,code,arg)" identifier = (call_expression "unw_decode_x2(end,code,arg)" identifier (argument_list "(end,code,arg)" ( identifier , identifier , identifier )))) ;) (return_statement "return puVar3;" return identifier ;) })) (if_statement "if (uVar5 < 3) {\n      if (uVar5 == 1) {\n        puVar3 = unw_decode_x1(end,in_stack_00000008,in_stack_0000000c);\n        return puVar3;\n      }\n    }\n    else {\n      if (uVar5 == 3) {\n        puVar3 = unw_decode_x3(end,in_stack_00000008,in_stack_0000000c);\n        return puVar3;\n      }\n      if (uVar5 == 4) {\n        puVar3 = unw_decode_x4(end,code,arg);\n        return puVar3;\n      }\n    }" if (parenthesized_expression "(uVar5 < 3)" ( (binary_expression "uVar5 < 3" identifier < number_literal) )) (compound_statement "{\n      if (uVar5 == 1) {\n        puVar3 = unw_decode_x1(end,in_stack_00000008,in_stack_0000000c);\n        return puVar3;\n      }\n    }" { (if_statement "if (uVar5 == 1) {\n        puVar3 = unw_decode_x1(end,in_stack_00000008,in_stack_0000000c);\n        return puVar3;\n      }" if (parenthesized_expression "(uVar5 == 1)" ( (binary_expression "uVar5 == 1" identifier == number_literal) )) (compound_statement "{\n        puVar3 = unw_decode_x1(end,in_stack_00000008,in_stack_0000000c);\n        return puVar3;\n      }" { (expression_statement "puVar3 = unw_decode_x1(end,in_stack_00000008,in_stack_0000000c);" (assignment_expression "puVar3 = unw_decode_x1(end,in_stack_00000008,in_stack_0000000c)" identifier = (call_expression "unw_decode_x1(end,in_stack_00000008,in_stack_0000000c)" identifier (argument_list "(end,in_stack_00000008,in_stack_0000000c)" ( identifier , identifier , identifier )))) ;) (return_statement "return puVar3;" return identifier ;) })) }) (else_clause "else {\n      if (uVar5 == 3) {\n        puVar3 = unw_decode_x3(end,in_stack_00000008,in_stack_0000000c);\n        return puVar3;\n      }\n      if (uVar5 == 4) {\n        puVar3 = unw_decode_x4(end,code,arg);\n        return puVar3;\n      }\n    }" else (compound_statement "{\n      if (uVar5 == 3) {\n        puVar3 = unw_decode_x3(end,in_stack_00000008,in_stack_0000000c);\n        return puVar3;\n      }\n      if (uVar5 == 4) {\n        puVar3 = unw_decode_x4(end,code,arg);\n        return puVar3;\n      }\n    }" { (if_statement "if (uVar5 == 3) {\n        puVar3 = unw_decode_x3(end,in_stack_00000008,in_stack_0000000c);\n        return puVar3;\n      }" if (parenthesized_expression "(uVar5 == 3)" ( (binary_expression "uVar5 == 3" identifier == number_literal) )) (compound_statement "{\n        puVar3 = unw_decode_x3(end,in_stack_00000008,in_stack_0000000c);\n        return puVar3;\n      }" { (expression_statement "puVar3 = unw_decode_x3(end,in_stack_00000008,in_stack_0000000c);" (assignment_expression "puVar3 = unw_decode_x3(end,in_stack_00000008,in_stack_0000000c)" identifier = (call_expression "unw_decode_x3(end,in_stack_00000008,in_stack_0000000c)" identifier (argument_list "(end,in_stack_00000008,in_stack_0000000c)" ( identifier , identifier , identifier )))) ;) (return_statement "return puVar3;" return identifier ;) })) (if_statement "if (uVar5 == 4) {\n        puVar3 = unw_decode_x4(end,code,arg);\n        return puVar3;\n      }" if (parenthesized_expression "(uVar5 == 4)" ( (binary_expression "uVar5 == 4" identifier == number_literal) )) (compound_statement "{\n        puVar3 = unw_decode_x4(end,code,arg);\n        return puVar3;\n      }" { (expression_statement "puVar3 = unw_decode_x4(end,code,arg);" (assignment_expression "puVar3 = unw_decode_x4(end,code,arg)" identifier = (call_expression "unw_decode_x4(end,code,arg)" identifier (argument_list "(end,code,arg)" ( identifier , identifier , identifier )))) ;) (return_statement "return puVar3;" return identifier ;) })) }))) (expression_statement "printf("Unknown code 0x%02x\n");" (call_expression "printf("Unknown code 0x%02x\n")" identifier (argument_list "("Unknown code 0x%02x\n")" ( (string_literal ""Unknown code 0x%02x\n"" " string_content escape_sequence ") ))) ;) }))) (return_statement "return end;" return identifier ;) }))
(translation_unit "byte * FUN_0004be20(byte *param_1,uint param_2)\n\n{\n  byte bVar1;\n  byte *pbVar2;\n  byte bVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  \n  if ((param_2 & 0x10) == 0) {\n    bVar1 = *param_1;\n    uVar8 = 0;\n    uVar4 = bVar1 & 0x7f;\n    bVar3 = 0;\n    param_1 = param_1 + 1;\n    while ((char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar6 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << (bVar3 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      uVar8 = uVar5 | uVar8;\n      uVar4 = uVar7 | uVar4;\n      param_1 = param_1 + 1;\n    }\n    bVar1 = *param_1;\n    uVar5 = bVar1 & 0x7f;\n    bVar3 = 0;\n    while (param_1 = param_1 + 1, (char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar7 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n      }\n      uVar5 = uVar7 | uVar5;\n    }\n    printf("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,uVar4,uVar5,uVar4,uVar8);\n  }\n  else {\n    uVar4 = param_2 & 7;\n    if (uVar4 == 0) {\n      bVar1 = *param_1;\n      uVar4 = bVar1 & 0x7f;\n      bVar3 = 0;\n      pbVar2 = param_1 + 1;\n      while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar3 = bVar3 + 7;\n        uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n        if ((bVar3 & 0x20) != 0) {\n          uVar8 = 0;\n        }\n        uVar4 = uVar8 | uVar4;\n        pbVar2 = pbVar2 + 1;\n      }\n      if ((param_2 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n        return pbVar2;\n      }\n      printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n      return pbVar2;\n    }\n    if (uVar4 == 2) {\n      pbVar2 = (byte *)FUN_0004bb90();\n      return pbVar2;\n    }\n    if (uVar4 < 3) {\n      if (uVar4 == 1) {\n        pbVar2 = (byte *)FUN_0004b390();\n        return pbVar2;\n      }\n    }\n    else {\n      if (uVar4 == 3) {\n        pbVar2 = (byte *)FUN_0004b510();\n        return pbVar2;\n      }\n      if (uVar4 == 4) {\n        pbVar2 = (byte *)FUN_0004bcd0();\n        return pbVar2;\n      }\n    }\n    printf("Unknown code 0x%02x\n",param_2);\n  }\n  return param_1;\n}\n\n" (function_definition "byte * FUN_0004be20(byte *param_1,uint param_2)\n\n{\n  byte bVar1;\n  byte *pbVar2;\n  byte bVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  \n  if ((param_2 & 0x10) == 0) {\n    bVar1 = *param_1;\n    uVar8 = 0;\n    uVar4 = bVar1 & 0x7f;\n    bVar3 = 0;\n    param_1 = param_1 + 1;\n    while ((char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar6 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << (bVar3 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      uVar8 = uVar5 | uVar8;\n      uVar4 = uVar7 | uVar4;\n      param_1 = param_1 + 1;\n    }\n    bVar1 = *param_1;\n    uVar5 = bVar1 & 0x7f;\n    bVar3 = 0;\n    while (param_1 = param_1 + 1, (char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar7 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n      }\n      uVar5 = uVar7 | uVar5;\n    }\n    printf("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,uVar4,uVar5,uVar4,uVar8);\n  }\n  else {\n    uVar4 = param_2 & 7;\n    if (uVar4 == 0) {\n      bVar1 = *param_1;\n      uVar4 = bVar1 & 0x7f;\n      bVar3 = 0;\n      pbVar2 = param_1 + 1;\n      while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar3 = bVar3 + 7;\n        uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n        if ((bVar3 & 0x20) != 0) {\n          uVar8 = 0;\n        }\n        uVar4 = uVar8 | uVar4;\n        pbVar2 = pbVar2 + 1;\n      }\n      if ((param_2 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n        return pbVar2;\n      }\n      printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n      return pbVar2;\n    }\n    if (uVar4 == 2) {\n      pbVar2 = (byte *)FUN_0004bb90();\n      return pbVar2;\n    }\n    if (uVar4 < 3) {\n      if (uVar4 == 1) {\n        pbVar2 = (byte *)FUN_0004b390();\n        return pbVar2;\n      }\n    }\n    else {\n      if (uVar4 == 3) {\n        pbVar2 = (byte *)FUN_0004b510();\n        return pbVar2;\n      }\n      if (uVar4 == 4) {\n        pbVar2 = (byte *)FUN_0004bcd0();\n        return pbVar2;\n      }\n    }\n    printf("Unknown code 0x%02x\n",param_2);\n  }\n  return param_1;\n}" type_identifier (pointer_declarator "* FUN_0004be20(byte *param_1,uint param_2)" * (function_declarator "FUN_0004be20(byte *param_1,uint param_2)" identifier (parameter_list "(byte *param_1,uint param_2)" ( (parameter_declaration "byte *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) )))) (compound_statement "{\n  byte bVar1;\n  byte *pbVar2;\n  byte bVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  \n  if ((param_2 & 0x10) == 0) {\n    bVar1 = *param_1;\n    uVar8 = 0;\n    uVar4 = bVar1 & 0x7f;\n    bVar3 = 0;\n    param_1 = param_1 + 1;\n    while ((char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar6 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << (bVar3 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      uVar8 = uVar5 | uVar8;\n      uVar4 = uVar7 | uVar4;\n      param_1 = param_1 + 1;\n    }\n    bVar1 = *param_1;\n    uVar5 = bVar1 & 0x7f;\n    bVar3 = 0;\n    while (param_1 = param_1 + 1, (char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar7 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n      }\n      uVar5 = uVar7 | uVar5;\n    }\n    printf("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,uVar4,uVar5,uVar4,uVar8);\n  }\n  else {\n    uVar4 = param_2 & 7;\n    if (uVar4 == 0) {\n      bVar1 = *param_1;\n      uVar4 = bVar1 & 0x7f;\n      bVar3 = 0;\n      pbVar2 = param_1 + 1;\n      while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar3 = bVar3 + 7;\n        uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n        if ((bVar3 & 0x20) != 0) {\n          uVar8 = 0;\n        }\n        uVar4 = uVar8 | uVar4;\n        pbVar2 = pbVar2 + 1;\n      }\n      if ((param_2 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n        return pbVar2;\n      }\n      printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n      return pbVar2;\n    }\n    if (uVar4 == 2) {\n      pbVar2 = (byte *)FUN_0004bb90();\n      return pbVar2;\n    }\n    if (uVar4 < 3) {\n      if (uVar4 == 1) {\n        pbVar2 = (byte *)FUN_0004b390();\n        return pbVar2;\n      }\n    }\n    else {\n      if (uVar4 == 3) {\n        pbVar2 = (byte *)FUN_0004b510();\n        return pbVar2;\n      }\n      if (uVar4 == 4) {\n        pbVar2 = (byte *)FUN_0004bcd0();\n        return pbVar2;\n      }\n    }\n    printf("Unknown code 0x%02x\n",param_2);\n  }\n  return param_1;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "byte *pbVar2;" type_identifier (pointer_declarator "*pbVar2" * identifier) ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (if_statement "if ((param_2 & 0x10) == 0) {\n    bVar1 = *param_1;\n    uVar8 = 0;\n    uVar4 = bVar1 & 0x7f;\n    bVar3 = 0;\n    param_1 = param_1 + 1;\n    while ((char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar6 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << (bVar3 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      uVar8 = uVar5 | uVar8;\n      uVar4 = uVar7 | uVar4;\n      param_1 = param_1 + 1;\n    }\n    bVar1 = *param_1;\n    uVar5 = bVar1 & 0x7f;\n    bVar3 = 0;\n    while (param_1 = param_1 + 1, (char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar7 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n      }\n      uVar5 = uVar7 | uVar5;\n    }\n    printf("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,uVar4,uVar5,uVar4,uVar8);\n  }\n  else {\n    uVar4 = param_2 & 7;\n    if (uVar4 == 0) {\n      bVar1 = *param_1;\n      uVar4 = bVar1 & 0x7f;\n      bVar3 = 0;\n      pbVar2 = param_1 + 1;\n      while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar3 = bVar3 + 7;\n        uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n        if ((bVar3 & 0x20) != 0) {\n          uVar8 = 0;\n        }\n        uVar4 = uVar8 | uVar4;\n        pbVar2 = pbVar2 + 1;\n      }\n      if ((param_2 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n        return pbVar2;\n      }\n      printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n      return pbVar2;\n    }\n    if (uVar4 == 2) {\n      pbVar2 = (byte *)FUN_0004bb90();\n      return pbVar2;\n    }\n    if (uVar4 < 3) {\n      if (uVar4 == 1) {\n        pbVar2 = (byte *)FUN_0004b390();\n        return pbVar2;\n      }\n    }\n    else {\n      if (uVar4 == 3) {\n        pbVar2 = (byte *)FUN_0004b510();\n        return pbVar2;\n      }\n      if (uVar4 == 4) {\n        pbVar2 = (byte *)FUN_0004bcd0();\n        return pbVar2;\n      }\n    }\n    printf("Unknown code 0x%02x\n",param_2);\n  }" if (parenthesized_expression "((param_2 & 0x10) == 0)" ( (binary_expression "(param_2 & 0x10) == 0" (parenthesized_expression "(param_2 & 0x10)" ( (binary_expression "param_2 & 0x10" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    bVar1 = *param_1;\n    uVar8 = 0;\n    uVar4 = bVar1 & 0x7f;\n    bVar3 = 0;\n    param_1 = param_1 + 1;\n    while ((char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar6 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << (bVar3 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      uVar8 = uVar5 | uVar8;\n      uVar4 = uVar7 | uVar4;\n      param_1 = param_1 + 1;\n    }\n    bVar1 = *param_1;\n    uVar5 = bVar1 & 0x7f;\n    bVar3 = 0;\n    while (param_1 = param_1 + 1, (char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar7 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n      }\n      uVar5 = uVar7 | uVar5;\n    }\n    printf("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,uVar4,uVar5,uVar4,uVar8);\n  }" { (expression_statement "bVar1 = *param_1;" (assignment_expression "bVar1 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" identifier = number_literal) ;) (expression_statement "uVar4 = bVar1 & 0x7f;" (assignment_expression "uVar4 = bVar1 & 0x7f" identifier = (binary_expression "bVar1 & 0x7f" identifier & number_literal)) ;) (expression_statement "bVar3 = 0;" (assignment_expression "bVar3 = 0" identifier = number_literal) ;) (expression_statement "param_1 = param_1 + 1;" (assignment_expression "param_1 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ;) (while_statement "while ((char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar6 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << (bVar3 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      uVar8 = uVar5 | uVar8;\n      uVar4 = uVar7 | uVar4;\n      param_1 = param_1 + 1;\n    }" while (parenthesized_expression "((char)bVar1 < '\0')" ( (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar6 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << (bVar3 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      uVar8 = uVar5 | uVar8;\n      uVar4 = uVar7 | uVar4;\n      param_1 = param_1 + 1;\n    }" { (expression_statement "bVar1 = *param_1;" (assignment_expression "bVar1 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "bVar3 = bVar3 + 7;" (assignment_expression "bVar3 = bVar3 + 7" identifier = (binary_expression "bVar3 + 7" identifier + number_literal)) ;) (expression_statement "uVar6 = (bVar1 & 0x7f) << (bVar3 & 0x1f);" (assignment_expression "uVar6 = (bVar1 & 0x7f) << (bVar3 & 0x1f)" identifier = (binary_expression "(bVar1 & 0x7f) << (bVar3 & 0x1f)" (parenthesized_expression "(bVar1 & 0x7f)" ( (binary_expression "bVar1 & 0x7f" identifier & number_literal) )) << (parenthesized_expression "(bVar3 & 0x1f)" ( (binary_expression "bVar3 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar7 = uVar6;" (assignment_expression "uVar7 = uVar6" identifier = identifier) ;) (expression_statement "uVar5 = 0 << (bVar3 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f);" (assignment_expression "uVar5 = 0 << (bVar3 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f)" identifier = (binary_expression "0 << (bVar3 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f)" (binary_expression "0 << (bVar3 & 0x1f)" number_literal << (parenthesized_expression "(bVar3 & 0x1f)" ( (binary_expression "bVar3 & 0x1f" identifier & number_literal) ))) | (binary_expression "(bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f)" (parenthesized_expression "(bVar1 & 0x7f)" ( (binary_expression "bVar1 & 0x7f" identifier & number_literal) )) >> (binary_expression "0x20 - (bVar3 & 0x1f)" number_literal - (parenthesized_expression "(bVar3 & 0x1f)" ( (binary_expression "bVar3 & 0x1f" identifier & number_literal) )))))) ;) (if_statement "if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }" if (parenthesized_expression "((bVar3 & 0x20) != 0)" ( (binary_expression "(bVar3 & 0x20) != 0" (parenthesized_expression "(bVar3 & 0x20)" ( (binary_expression "bVar3 & 0x20" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }" { (expression_statement "uVar7 = 0;" (assignment_expression "uVar7 = 0" identifier = number_literal) ;) (expression_statement "uVar5 = uVar6;" (assignment_expression "uVar5 = uVar6" identifier = identifier) ;) })) (expression_statement "uVar8 = uVar5 | uVar8;" (assignment_expression "uVar8 = uVar5 | uVar8" identifier = (binary_expression "uVar5 | uVar8" identifier | identifier)) ;) (expression_statement "uVar4 = uVar7 | uVar4;" (assignment_expression "uVar4 = uVar7 | uVar4" identifier = (binary_expression "uVar7 | uVar4" identifier | identifier)) ;) (expression_statement "param_1 = param_1 + 1;" (assignment_expression "param_1 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ;) })) (expression_statement "bVar1 = *param_1;" (assignment_expression "bVar1 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "uVar5 = bVar1 & 0x7f;" (assignment_expression "uVar5 = bVar1 & 0x7f" identifier = (binary_expression "bVar1 & 0x7f" identifier & number_literal)) ;) (expression_statement "bVar3 = 0;" (assignment_expression "bVar3 = 0" identifier = number_literal) ;) (while_statement "while (param_1 = param_1 + 1, (char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar7 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n      }\n      uVar5 = uVar7 | uVar5;\n    }" while (parenthesized_expression "(param_1 = param_1 + 1, (char)bVar1 < '\0')" ( (comma_expression "param_1 = param_1 + 1, (char)bVar1 < '\0'" (assignment_expression "param_1 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) , (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence '))) )) (compound_statement "{\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar7 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n      }\n      uVar5 = uVar7 | uVar5;\n    }" { (expression_statement "bVar1 = *param_1;" (assignment_expression "bVar1 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "bVar3 = bVar3 + 7;" (assignment_expression "bVar3 = bVar3 + 7" identifier = (binary_expression "bVar3 + 7" identifier + number_literal)) ;) (expression_statement "uVar7 = (bVar1 & 0x7f) << (bVar3 & 0x1f);" (assignment_expression "uVar7 = (bVar1 & 0x7f) << (bVar3 & 0x1f)" identifier = (binary_expression "(bVar1 & 0x7f) << (bVar3 & 0x1f)" (parenthesized_expression "(bVar1 & 0x7f)" ( (binary_expression "bVar1 & 0x7f" identifier & number_literal) )) << (parenthesized_expression "(bVar3 & 0x1f)" ( (binary_expression "bVar3 & 0x1f" identifier & number_literal) )))) ;) (if_statement "if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n      }" if (parenthesized_expression "((bVar3 & 0x20) != 0)" ( (binary_expression "(bVar3 & 0x20) != 0" (parenthesized_expression "(bVar3 & 0x20)" ( (binary_expression "bVar3 & 0x20" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        uVar7 = 0;\n      }" { (expression_statement "uVar7 = 0;" (assignment_expression "uVar7 = 0" identifier = number_literal) ;) })) (expression_statement "uVar5 = uVar7 | uVar5;" (assignment_expression "uVar5 = uVar7 | uVar5" identifier = (binary_expression "uVar7 | uVar5" identifier | identifier)) ;) })) (expression_statement "printf("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,uVar4,uVar5,uVar4,uVar8);" (call_expression "printf("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,uVar4,uVar5,uVar4,uVar8)" identifier (argument_list "("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,uVar4,uVar5,uVar4,uVar8)" ( (string_literal ""\t%s:epilogue(t=%lu,ecount=%lu)\n"" " escape_sequence string_content escape_sequence ") , (pointer_expression "&DAT_0007c02f" & identifier) , identifier , identifier , identifier , identifier ))) ;) }) (else_clause "else {\n    uVar4 = param_2 & 7;\n    if (uVar4 == 0) {\n      bVar1 = *param_1;\n      uVar4 = bVar1 & 0x7f;\n      bVar3 = 0;\n      pbVar2 = param_1 + 1;\n      while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar3 = bVar3 + 7;\n        uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n        if ((bVar3 & 0x20) != 0) {\n          uVar8 = 0;\n        }\n        uVar4 = uVar8 | uVar4;\n        pbVar2 = pbVar2 + 1;\n      }\n      if ((param_2 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n        return pbVar2;\n      }\n      printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n      return pbVar2;\n    }\n    if (uVar4 == 2) {\n      pbVar2 = (byte *)FUN_0004bb90();\n      return pbVar2;\n    }\n    if (uVar4 < 3) {\n      if (uVar4 == 1) {\n        pbVar2 = (byte *)FUN_0004b390();\n        return pbVar2;\n      }\n    }\n    else {\n      if (uVar4 == 3) {\n        pbVar2 = (byte *)FUN_0004b510();\n        return pbVar2;\n      }\n      if (uVar4 == 4) {\n        pbVar2 = (byte *)FUN_0004bcd0();\n        return pbVar2;\n      }\n    }\n    printf("Unknown code 0x%02x\n",param_2);\n  }" else (compound_statement "{\n    uVar4 = param_2 & 7;\n    if (uVar4 == 0) {\n      bVar1 = *param_1;\n      uVar4 = bVar1 & 0x7f;\n      bVar3 = 0;\n      pbVar2 = param_1 + 1;\n      while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar3 = bVar3 + 7;\n        uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n        if ((bVar3 & 0x20) != 0) {\n          uVar8 = 0;\n        }\n        uVar4 = uVar8 | uVar4;\n        pbVar2 = pbVar2 + 1;\n      }\n      if ((param_2 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n        return pbVar2;\n      }\n      printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n      return pbVar2;\n    }\n    if (uVar4 == 2) {\n      pbVar2 = (byte *)FUN_0004bb90();\n      return pbVar2;\n    }\n    if (uVar4 < 3) {\n      if (uVar4 == 1) {\n        pbVar2 = (byte *)FUN_0004b390();\n        return pbVar2;\n      }\n    }\n    else {\n      if (uVar4 == 3) {\n        pbVar2 = (byte *)FUN_0004b510();\n        return pbVar2;\n      }\n      if (uVar4 == 4) {\n        pbVar2 = (byte *)FUN_0004bcd0();\n        return pbVar2;\n      }\n    }\n    printf("Unknown code 0x%02x\n",param_2);\n  }" { (expression_statement "uVar4 = param_2 & 7;" (assignment_expression "uVar4 = param_2 & 7" identifier = (binary_expression "param_2 & 7" identifier & number_literal)) ;) (if_statement "if (uVar4 == 0) {\n      bVar1 = *param_1;\n      uVar4 = bVar1 & 0x7f;\n      bVar3 = 0;\n      pbVar2 = param_1 + 1;\n      while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar3 = bVar3 + 7;\n        uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n        if ((bVar3 & 0x20) != 0) {\n          uVar8 = 0;\n        }\n        uVar4 = uVar8 | uVar4;\n        pbVar2 = pbVar2 + 1;\n      }\n      if ((param_2 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n        return pbVar2;\n      }\n      printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n      return pbVar2;\n    }" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (compound_statement "{\n      bVar1 = *param_1;\n      uVar4 = bVar1 & 0x7f;\n      bVar3 = 0;\n      pbVar2 = param_1 + 1;\n      while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar3 = bVar3 + 7;\n        uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n        if ((bVar3 & 0x20) != 0) {\n          uVar8 = 0;\n        }\n        uVar4 = uVar8 | uVar4;\n        pbVar2 = pbVar2 + 1;\n      }\n      if ((param_2 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n        return pbVar2;\n      }\n      printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n      return pbVar2;\n    }" { (expression_statement "bVar1 = *param_1;" (assignment_expression "bVar1 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "uVar4 = bVar1 & 0x7f;" (assignment_expression "uVar4 = bVar1 & 0x7f" identifier = (binary_expression "bVar1 & 0x7f" identifier & number_literal)) ;) (expression_statement "bVar3 = 0;" (assignment_expression "bVar3 = 0" identifier = number_literal) ;) (expression_statement "pbVar2 = param_1 + 1;" (assignment_expression "pbVar2 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ;) (while_statement "while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar3 = bVar3 + 7;\n        uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n        if ((bVar3 & 0x20) != 0) {\n          uVar8 = 0;\n        }\n        uVar4 = uVar8 | uVar4;\n        pbVar2 = pbVar2 + 1;\n      }" while (parenthesized_expression "((char)bVar1 < '\0')" ( (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        bVar1 = *pbVar2;\n        bVar3 = bVar3 + 7;\n        uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n        if ((bVar3 & 0x20) != 0) {\n          uVar8 = 0;\n        }\n        uVar4 = uVar8 | uVar4;\n        pbVar2 = pbVar2 + 1;\n      }" { (expression_statement "bVar1 = *pbVar2;" (assignment_expression "bVar1 = *pbVar2" identifier = (pointer_expression "*pbVar2" * identifier)) ;) (expression_statement "bVar3 = bVar3 + 7;" (assignment_expression "bVar3 = bVar3 + 7" identifier = (binary_expression "bVar3 + 7" identifier + number_literal)) ;) (expression_statement "uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);" (assignment_expression "uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f)" identifier = (binary_expression "(bVar1 & 0x7f) << (bVar3 & 0x1f)" (parenthesized_expression "(bVar1 & 0x7f)" ( (binary_expression "bVar1 & 0x7f" identifier & number_literal) )) << (parenthesized_expression "(bVar3 & 0x1f)" ( (binary_expression "bVar3 & 0x1f" identifier & number_literal) )))) ;) (if_statement "if ((bVar3 & 0x20) != 0) {\n          uVar8 = 0;\n        }" if (parenthesized_expression "((bVar3 & 0x20) != 0)" ( (binary_expression "(bVar3 & 0x20) != 0" (parenthesized_expression "(bVar3 & 0x20)" ( (binary_expression "bVar3 & 0x20" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n          uVar8 = 0;\n        }" { (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" identifier = number_literal) ;) })) (expression_statement "uVar4 = uVar8 | uVar4;" (assignment_expression "uVar4 = uVar8 | uVar4" identifier = (binary_expression "uVar8 | uVar4" identifier | identifier)) ;) (expression_statement "pbVar2 = pbVar2 + 1;" (assignment_expression "pbVar2 = pbVar2 + 1" identifier = (binary_expression "pbVar2 + 1" identifier + number_literal)) ;) })) (if_statement "if ((param_2 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n        return pbVar2;\n      }" if (parenthesized_expression "((param_2 & 8) != 0)" ( (binary_expression "(param_2 & 8) != 0" (parenthesized_expression "(param_2 & 8)" ( (binary_expression "param_2 & 8" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n        return pbVar2;\n      }" { (expression_statement "printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);" (call_expression "printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4)" identifier (argument_list "("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4)" ( (string_literal ""\t%s:copy_state(label=%lu)\n"" " escape_sequence string_content escape_sequence ") , (pointer_expression "&DAT_0008e71c" & identifier) , identifier ))) ;) (return_statement "return pbVar2;" return identifier ;) })) (expression_statement "printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4);" (call_expression "printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4)" identifier (argument_list "("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4)" ( (string_literal ""\t%s:label_state(label=%lu)\n"" " escape_sequence string_content escape_sequence ") , (pointer_expression "&DAT_0008e71c" & identifier) , identifier ))) ;) (return_statement "return pbVar2;" return identifier ;) })) (if_statement "if (uVar4 == 2) {\n      pbVar2 = (byte *)FUN_0004bb90();\n      return pbVar2;\n    }" if (parenthesized_expression "(uVar4 == 2)" ( (binary_expression "uVar4 == 2" identifier == number_literal) )) (compound_statement "{\n      pbVar2 = (byte *)FUN_0004bb90();\n      return pbVar2;\n    }" { (expression_statement "pbVar2 = (byte *)FUN_0004bb90();" (assignment_expression "pbVar2 = (byte *)FUN_0004bb90()" identifier = (cast_expression "(byte *)FUN_0004bb90()" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0004bb90()" identifier (argument_list "()" ( ))))) ;) (return_statement "return pbVar2;" return identifier ;) })) (if_statement "if (uVar4 < 3) {\n      if (uVar4 == 1) {\n        pbVar2 = (byte *)FUN_0004b390();\n        return pbVar2;\n      }\n    }\n    else {\n      if (uVar4 == 3) {\n        pbVar2 = (byte *)FUN_0004b510();\n        return pbVar2;\n      }\n      if (uVar4 == 4) {\n        pbVar2 = (byte *)FUN_0004bcd0();\n        return pbVar2;\n      }\n    }" if (parenthesized_expression "(uVar4 < 3)" ( (binary_expression "uVar4 < 3" identifier < number_literal) )) (compound_statement "{\n      if (uVar4 == 1) {\n        pbVar2 = (byte *)FUN_0004b390();\n        return pbVar2;\n      }\n    }" { (if_statement "if (uVar4 == 1) {\n        pbVar2 = (byte *)FUN_0004b390();\n        return pbVar2;\n      }" if (parenthesized_expression "(uVar4 == 1)" ( (binary_expression "uVar4 == 1" identifier == number_literal) )) (compound_statement "{\n        pbVar2 = (byte *)FUN_0004b390();\n        return pbVar2;\n      }" { (expression_statement "pbVar2 = (byte *)FUN_0004b390();" (assignment_expression "pbVar2 = (byte *)FUN_0004b390()" identifier = (cast_expression "(byte *)FUN_0004b390()" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0004b390()" identifier (argument_list "()" ( ))))) ;) (return_statement "return pbVar2;" return identifier ;) })) }) (else_clause "else {\n      if (uVar4 == 3) {\n        pbVar2 = (byte *)FUN_0004b510();\n        return pbVar2;\n      }\n      if (uVar4 == 4) {\n        pbVar2 = (byte *)FUN_0004bcd0();\n        return pbVar2;\n      }\n    }" else (compound_statement "{\n      if (uVar4 == 3) {\n        pbVar2 = (byte *)FUN_0004b510();\n        return pbVar2;\n      }\n      if (uVar4 == 4) {\n        pbVar2 = (byte *)FUN_0004bcd0();\n        return pbVar2;\n      }\n    }" { (if_statement "if (uVar4 == 3) {\n        pbVar2 = (byte *)FUN_0004b510();\n        return pbVar2;\n      }" if (parenthesized_expression "(uVar4 == 3)" ( (binary_expression "uVar4 == 3" identifier == number_literal) )) (compound_statement "{\n        pbVar2 = (byte *)FUN_0004b510();\n        return pbVar2;\n      }" { (expression_statement "pbVar2 = (byte *)FUN_0004b510();" (assignment_expression "pbVar2 = (byte *)FUN_0004b510()" identifier = (cast_expression "(byte *)FUN_0004b510()" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0004b510()" identifier (argument_list "()" ( ))))) ;) (return_statement "return pbVar2;" return identifier ;) })) (if_statement "if (uVar4 == 4) {\n        pbVar2 = (byte *)FUN_0004bcd0();\n        return pbVar2;\n      }" if (parenthesized_expression "(uVar4 == 4)" ( (binary_expression "uVar4 == 4" identifier == number_literal) )) (compound_statement "{\n        pbVar2 = (byte *)FUN_0004bcd0();\n        return pbVar2;\n      }" { (expression_statement "pbVar2 = (byte *)FUN_0004bcd0();" (assignment_expression "pbVar2 = (byte *)FUN_0004bcd0()" identifier = (cast_expression "(byte *)FUN_0004bcd0()" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0004bcd0()" identifier (argument_list "()" ( ))))) ;) (return_statement "return pbVar2;" return identifier ;) })) }))) (expression_statement "printf("Unknown code 0x%02x\n",param_2);" (call_expression "printf("Unknown code 0x%02x\n",param_2)" identifier (argument_list "("Unknown code 0x%02x\n",param_2)" ( (string_literal ""Unknown code 0x%02x\n"" " string_content escape_sequence ") , identifier ))) ;) }))) (return_statement "return param_1;" return identifier ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) )))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (while_statement while (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (char_literal ' escape_sequence ')) )) (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 (parenthesized_expression ( (binary_expression IDENT & LIT) )) << (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression LIT << (parenthesized_expression ( (binary_expression IDENT & LIT) ))) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> (binary_expression LIT - (parenthesized_expression ( (binary_expression IDENT & LIT) )))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT | IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT | IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (while_statement while (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression IDENT + LIT)) , (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (char_literal ' escape_sequence '))) )) (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 (parenthesized_expression ( (binary_expression IDENT & LIT) )) << (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT | IDENT)) ;) })) (expression_statement (call_expression IDENT (argument_list ( (string_literal " escape_sequence string_content escape_sequence ") , (pointer_expression & IDENT) , IDENT , IDENT , IDENT , IDENT ))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (while_statement while (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (char_literal ' escape_sequence ')) )) (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 (parenthesized_expression ( (binary_expression IDENT & LIT) )) << (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT | IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " escape_sequence string_content escape_sequence ") , (pointer_expression & IDENT) , IDENT ))) ;) (return_statement return IDENT ;) })) (expression_statement (call_expression IDENT (argument_list ( (string_literal " escape_sequence string_content escape_sequence ") , (pointer_expression & IDENT) , IDENT ))) ;) (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( ))))) ;) (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( ))))) ;) (return_statement return IDENT ;) })) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( ))))) ;) (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( ))))) ;) (return_statement return IDENT ;) })) }))) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence ") , IDENT ))) ;) }))) (return_statement return IDENT ;) })))
(function_definition "byte * FUN_0004be20(byte *param_1,uint param_2)\n\n{\n  byte bVar1;\n  byte *pbVar2;\n  byte bVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  \n  if ((param_2 & 0x10) == 0) {\n    bVar1 = *param_1;\n    uVar8 = 0;\n    uVar4 = bVar1 & 0x7f;\n    bVar3 = 0;\n    param_1 = param_1 + 1;\n    while ((char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar6 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << (bVar3 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      uVar8 = uVar5 | uVar8;\n      uVar4 = uVar7 | uVar4;\n      param_1 = param_1 + 1;\n    }\n    bVar1 = *param_1;\n    uVar5 = bVar1 & 0x7f;\n    bVar3 = 0;\n    while (param_1 = param_1 + 1, (char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar7 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n      }\n      uVar5 = uVar7 | uVar5;\n    }\n    printf("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,uVar4,uVar5,uVar4,uVar8);\n  }\n  else {\n    uVar4 = param_2 & 7;\n    if (uVar4 == 0) {\n      bVar1 = *param_1;\n      uVar4 = bVar1 & 0x7f;\n      bVar3 = 0;\n      pbVar2 = param_1 + 1;\n      while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar3 = bVar3 + 7;\n        uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n        if ((bVar3 & 0x20) != 0) {\n          uVar8 = 0;\n        }\n        uVar4 = uVar8 | uVar4;\n        pbVar2 = pbVar2 + 1;\n      }\n      if ((param_2 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n        return pbVar2;\n      }\n      printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n      return pbVar2;\n    }\n    if (uVar4 == 2) {\n      pbVar2 = (byte *)FUN_0004bb90();\n      return pbVar2;\n    }\n    if (uVar4 < 3) {\n      if (uVar4 == 1) {\n        pbVar2 = (byte *)FUN_0004b390();\n        return pbVar2;\n      }\n    }\n    else {\n      if (uVar4 == 3) {\n        pbVar2 = (byte *)FUN_0004b510();\n        return pbVar2;\n      }\n      if (uVar4 == 4) {\n        pbVar2 = (byte *)FUN_0004bcd0();\n        return pbVar2;\n      }\n    }\n    printf("Unknown code 0x%02x\n",param_2);\n  }\n  return param_1;\n}" (type_identifier "byte") (pointer_declarator "* FUN_0004be20(byte *param_1,uint param_2)" (* "*") (function_declarator "FUN_0004be20(byte *param_1,uint param_2)" (identifier "FUN_0004be20") (parameter_list "(byte *param_1,uint param_2)" (( "(") (parameter_declaration "byte *param_1" (type_identifier "byte") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (identifier "param_2")) () ")")))) (compound_statement "{\n  byte bVar1;\n  byte *pbVar2;\n  byte bVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  \n  if ((param_2 & 0x10) == 0) {\n    bVar1 = *param_1;\n    uVar8 = 0;\n    uVar4 = bVar1 & 0x7f;\n    bVar3 = 0;\n    param_1 = param_1 + 1;\n    while ((char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar6 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << (bVar3 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      uVar8 = uVar5 | uVar8;\n      uVar4 = uVar7 | uVar4;\n      param_1 = param_1 + 1;\n    }\n    bVar1 = *param_1;\n    uVar5 = bVar1 & 0x7f;\n    bVar3 = 0;\n    while (param_1 = param_1 + 1, (char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar7 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n      }\n      uVar5 = uVar7 | uVar5;\n    }\n    printf("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,uVar4,uVar5,uVar4,uVar8);\n  }\n  else {\n    uVar4 = param_2 & 7;\n    if (uVar4 == 0) {\n      bVar1 = *param_1;\n      uVar4 = bVar1 & 0x7f;\n      bVar3 = 0;\n      pbVar2 = param_1 + 1;\n      while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar3 = bVar3 + 7;\n        uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n        if ((bVar3 & 0x20) != 0) {\n          uVar8 = 0;\n        }\n        uVar4 = uVar8 | uVar4;\n        pbVar2 = pbVar2 + 1;\n      }\n      if ((param_2 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n        return pbVar2;\n      }\n      printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n      return pbVar2;\n    }\n    if (uVar4 == 2) {\n      pbVar2 = (byte *)FUN_0004bb90();\n      return pbVar2;\n    }\n    if (uVar4 < 3) {\n      if (uVar4 == 1) {\n        pbVar2 = (byte *)FUN_0004b390();\n        return pbVar2;\n      }\n    }\n    else {\n      if (uVar4 == 3) {\n        pbVar2 = (byte *)FUN_0004b510();\n        return pbVar2;\n      }\n      if (uVar4 == 4) {\n        pbVar2 = (byte *)FUN_0004bcd0();\n        return pbVar2;\n      }\n    }\n    printf("Unknown code 0x%02x\n",param_2);\n  }\n  return param_1;\n}" ({ "{") (declaration "byte bVar1;" (type_identifier "byte") (identifier "bVar1") (; ";")) (declaration "byte *pbVar2;" (type_identifier "byte") (pointer_declarator "*pbVar2" (* "*") (identifier "pbVar2")) (; ";")) (declaration "byte bVar3;" (type_identifier "byte") (identifier "bVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "uint uVar6;" (type_identifier "uint") (identifier "uVar6") (; ";")) (declaration "uint uVar7;" (type_identifier "uint") (identifier "uVar7") (; ";")) (declaration "uint uVar8;" (type_identifier "uint") (identifier "uVar8") (; ";")) (if_statement "if ((param_2 & 0x10) == 0) {\n    bVar1 = *param_1;\n    uVar8 = 0;\n    uVar4 = bVar1 & 0x7f;\n    bVar3 = 0;\n    param_1 = param_1 + 1;\n    while ((char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar6 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << (bVar3 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      uVar8 = uVar5 | uVar8;\n      uVar4 = uVar7 | uVar4;\n      param_1 = param_1 + 1;\n    }\n    bVar1 = *param_1;\n    uVar5 = bVar1 & 0x7f;\n    bVar3 = 0;\n    while (param_1 = param_1 + 1, (char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar7 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n      }\n      uVar5 = uVar7 | uVar5;\n    }\n    printf("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,uVar4,uVar5,uVar4,uVar8);\n  }\n  else {\n    uVar4 = param_2 & 7;\n    if (uVar4 == 0) {\n      bVar1 = *param_1;\n      uVar4 = bVar1 & 0x7f;\n      bVar3 = 0;\n      pbVar2 = param_1 + 1;\n      while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar3 = bVar3 + 7;\n        uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n        if ((bVar3 & 0x20) != 0) {\n          uVar8 = 0;\n        }\n        uVar4 = uVar8 | uVar4;\n        pbVar2 = pbVar2 + 1;\n      }\n      if ((param_2 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n        return pbVar2;\n      }\n      printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n      return pbVar2;\n    }\n    if (uVar4 == 2) {\n      pbVar2 = (byte *)FUN_0004bb90();\n      return pbVar2;\n    }\n    if (uVar4 < 3) {\n      if (uVar4 == 1) {\n        pbVar2 = (byte *)FUN_0004b390();\n        return pbVar2;\n      }\n    }\n    else {\n      if (uVar4 == 3) {\n        pbVar2 = (byte *)FUN_0004b510();\n        return pbVar2;\n      }\n      if (uVar4 == 4) {\n        pbVar2 = (byte *)FUN_0004bcd0();\n        return pbVar2;\n      }\n    }\n    printf("Unknown code 0x%02x\n",param_2);\n  }" (if "if") (parenthesized_expression "((param_2 & 0x10) == 0)" (( "(") (binary_expression "(param_2 & 0x10) == 0" (parenthesized_expression "(param_2 & 0x10)" (( "(") (binary_expression "param_2 & 0x10" (identifier "param_2") (& "&") (number_literal "0x10")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    bVar1 = *param_1;\n    uVar8 = 0;\n    uVar4 = bVar1 & 0x7f;\n    bVar3 = 0;\n    param_1 = param_1 + 1;\n    while ((char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar6 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << (bVar3 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      uVar8 = uVar5 | uVar8;\n      uVar4 = uVar7 | uVar4;\n      param_1 = param_1 + 1;\n    }\n    bVar1 = *param_1;\n    uVar5 = bVar1 & 0x7f;\n    bVar3 = 0;\n    while (param_1 = param_1 + 1, (char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar7 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n      }\n      uVar5 = uVar7 | uVar5;\n    }\n    printf("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,uVar4,uVar5,uVar4,uVar8);\n  }" ({ "{") (expression_statement "bVar1 = *param_1;" (assignment_expression "bVar1 = *param_1" (identifier "bVar1") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" (identifier "uVar8") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar4 = bVar1 & 0x7f;" (assignment_expression "uVar4 = bVar1 & 0x7f" (identifier "uVar4") (= "=") (binary_expression "bVar1 & 0x7f" (identifier "bVar1") (& "&") (number_literal "0x7f"))) (; ";")) (expression_statement "bVar3 = 0;" (assignment_expression "bVar3 = 0" (identifier "bVar3") (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1 = param_1 + 1;" (assignment_expression "param_1 = param_1 + 1" (identifier "param_1") (= "=") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1"))) (; ";")) (while_statement "while ((char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar6 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << (bVar3 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      uVar8 = uVar5 | uVar8;\n      uVar4 = uVar7 | uVar4;\n      param_1 = param_1 + 1;\n    }" (while "while") (parenthesized_expression "((char)bVar1 < '\0')" (( "(") (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "bVar1")) (< "<") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar6 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << (bVar3 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      uVar8 = uVar5 | uVar8;\n      uVar4 = uVar7 | uVar4;\n      param_1 = param_1 + 1;\n    }" ({ "{") (expression_statement "bVar1 = *param_1;" (assignment_expression "bVar1 = *param_1" (identifier "bVar1") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "bVar3 = bVar3 + 7;" (assignment_expression "bVar3 = bVar3 + 7" (identifier "bVar3") (= "=") (binary_expression "bVar3 + 7" (identifier "bVar3") (+ "+") (number_literal "7"))) (; ";")) (expression_statement "uVar6 = (bVar1 & 0x7f) << (bVar3 & 0x1f);" (assignment_expression "uVar6 = (bVar1 & 0x7f) << (bVar3 & 0x1f)" (identifier "uVar6") (= "=") (binary_expression "(bVar1 & 0x7f) << (bVar3 & 0x1f)" (parenthesized_expression "(bVar1 & 0x7f)" (( "(") (binary_expression "bVar1 & 0x7f" (identifier "bVar1") (& "&") (number_literal "0x7f")) () ")")) (<< "<<") (parenthesized_expression "(bVar3 & 0x1f)" (( "(") (binary_expression "bVar3 & 0x1f" (identifier "bVar3") (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "uVar7 = uVar6;" (assignment_expression "uVar7 = uVar6" (identifier "uVar7") (= "=") (identifier "uVar6")) (; ";")) (expression_statement "uVar5 = 0 << (bVar3 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f);" (assignment_expression "uVar5 = 0 << (bVar3 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f)" (identifier "uVar5") (= "=") (binary_expression "0 << (bVar3 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f)" (binary_expression "0 << (bVar3 & 0x1f)" (number_literal "0") (<< "<<") (parenthesized_expression "(bVar3 & 0x1f)" (( "(") (binary_expression "bVar3 & 0x1f" (identifier "bVar3") (& "&") (number_literal "0x1f")) () ")"))) (| "|") (binary_expression "(bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f)" (parenthesized_expression "(bVar1 & 0x7f)" (( "(") (binary_expression "bVar1 & 0x7f" (identifier "bVar1") (& "&") (number_literal "0x7f")) () ")")) (>> ">>") (binary_expression "0x20 - (bVar3 & 0x1f)" (number_literal "0x20") (- "-") (parenthesized_expression "(bVar3 & 0x1f)" (( "(") (binary_expression "bVar3 & 0x1f" (identifier "bVar3") (& "&") (number_literal "0x1f")) () ")")))))) (; ";")) (if_statement "if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }" (if "if") (parenthesized_expression "((bVar3 & 0x20) != 0)" (( "(") (binary_expression "(bVar3 & 0x20) != 0" (parenthesized_expression "(bVar3 & 0x20)" (( "(") (binary_expression "bVar3 & 0x20" (identifier "bVar3") (& "&") (number_literal "0x20")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }" ({ "{") (expression_statement "uVar7 = 0;" (assignment_expression "uVar7 = 0" (identifier "uVar7") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar5 = uVar6;" (assignment_expression "uVar5 = uVar6" (identifier "uVar5") (= "=") (identifier "uVar6")) (; ";")) (} "}"))) (expression_statement "uVar8 = uVar5 | uVar8;" (assignment_expression "uVar8 = uVar5 | uVar8" (identifier "uVar8") (= "=") (binary_expression "uVar5 | uVar8" (identifier "uVar5") (| "|") (identifier "uVar8"))) (; ";")) (expression_statement "uVar4 = uVar7 | uVar4;" (assignment_expression "uVar4 = uVar7 | uVar4" (identifier "uVar4") (= "=") (binary_expression "uVar7 | uVar4" (identifier "uVar7") (| "|") (identifier "uVar4"))) (; ";")) (expression_statement "param_1 = param_1 + 1;" (assignment_expression "param_1 = param_1 + 1" (identifier "param_1") (= "=") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (expression_statement "bVar1 = *param_1;" (assignment_expression "bVar1 = *param_1" (identifier "bVar1") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "uVar5 = bVar1 & 0x7f;" (assignment_expression "uVar5 = bVar1 & 0x7f" (identifier "uVar5") (= "=") (binary_expression "bVar1 & 0x7f" (identifier "bVar1") (& "&") (number_literal "0x7f"))) (; ";")) (expression_statement "bVar3 = 0;" (assignment_expression "bVar3 = 0" (identifier "bVar3") (= "=") (number_literal "0")) (; ";")) (while_statement "while (param_1 = param_1 + 1, (char)bVar1 < '\0') {\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar7 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n      }\n      uVar5 = uVar7 | uVar5;\n    }" (while "while") (parenthesized_expression "(param_1 = param_1 + 1, (char)bVar1 < '\0')" (( "(") (comma_expression "param_1 = param_1 + 1, (char)bVar1 < '\0'" (assignment_expression "param_1 = param_1 + 1" (identifier "param_1") (= "=") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1"))) (, ",") (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "bVar1")) (< "<") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'")))) () ")")) (compound_statement "{\n      bVar1 = *param_1;\n      bVar3 = bVar3 + 7;\n      uVar7 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n      if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n      }\n      uVar5 = uVar7 | uVar5;\n    }" ({ "{") (expression_statement "bVar1 = *param_1;" (assignment_expression "bVar1 = *param_1" (identifier "bVar1") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "bVar3 = bVar3 + 7;" (assignment_expression "bVar3 = bVar3 + 7" (identifier "bVar3") (= "=") (binary_expression "bVar3 + 7" (identifier "bVar3") (+ "+") (number_literal "7"))) (; ";")) (expression_statement "uVar7 = (bVar1 & 0x7f) << (bVar3 & 0x1f);" (assignment_expression "uVar7 = (bVar1 & 0x7f) << (bVar3 & 0x1f)" (identifier "uVar7") (= "=") (binary_expression "(bVar1 & 0x7f) << (bVar3 & 0x1f)" (parenthesized_expression "(bVar1 & 0x7f)" (( "(") (binary_expression "bVar1 & 0x7f" (identifier "bVar1") (& "&") (number_literal "0x7f")) () ")")) (<< "<<") (parenthesized_expression "(bVar3 & 0x1f)" (( "(") (binary_expression "bVar3 & 0x1f" (identifier "bVar3") (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (if_statement "if ((bVar3 & 0x20) != 0) {\n        uVar7 = 0;\n      }" (if "if") (parenthesized_expression "((bVar3 & 0x20) != 0)" (( "(") (binary_expression "(bVar3 & 0x20) != 0" (parenthesized_expression "(bVar3 & 0x20)" (( "(") (binary_expression "bVar3 & 0x20" (identifier "bVar3") (& "&") (number_literal "0x20")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        uVar7 = 0;\n      }" ({ "{") (expression_statement "uVar7 = 0;" (assignment_expression "uVar7 = 0" (identifier "uVar7") (= "=") (number_literal "0")) (; ";")) (} "}"))) (expression_statement "uVar5 = uVar7 | uVar5;" (assignment_expression "uVar5 = uVar7 | uVar5" (identifier "uVar5") (= "=") (binary_expression "uVar7 | uVar5" (identifier "uVar7") (| "|") (identifier "uVar5"))) (; ";")) (} "}"))) (expression_statement "printf("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,uVar4,uVar5,uVar4,uVar8);" (call_expression "printf("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,uVar4,uVar5,uVar4,uVar8)" (identifier "printf") (argument_list "("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,uVar4,uVar5,uVar4,uVar8)" (( "(") (string_literal ""\t%s:epilogue(t=%lu,ecount=%lu)\n"" (" """) (escape_sequence "\t") (string_content "%s:epilogue(t=%lu,ecount=%lu)") (escape_sequence "\n") (" """)) (, ",") (pointer_expression "&DAT_0007c02f" (& "&") (identifier "DAT_0007c02f")) (, ",") (identifier "uVar4") (, ",") (identifier "uVar5") (, ",") (identifier "uVar4") (, ",") (identifier "uVar8") () ")"))) (; ";")) (} "}")) (else_clause "else {\n    uVar4 = param_2 & 7;\n    if (uVar4 == 0) {\n      bVar1 = *param_1;\n      uVar4 = bVar1 & 0x7f;\n      bVar3 = 0;\n      pbVar2 = param_1 + 1;\n      while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar3 = bVar3 + 7;\n        uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n        if ((bVar3 & 0x20) != 0) {\n          uVar8 = 0;\n        }\n        uVar4 = uVar8 | uVar4;\n        pbVar2 = pbVar2 + 1;\n      }\n      if ((param_2 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n        return pbVar2;\n      }\n      printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n      return pbVar2;\n    }\n    if (uVar4 == 2) {\n      pbVar2 = (byte *)FUN_0004bb90();\n      return pbVar2;\n    }\n    if (uVar4 < 3) {\n      if (uVar4 == 1) {\n        pbVar2 = (byte *)FUN_0004b390();\n        return pbVar2;\n      }\n    }\n    else {\n      if (uVar4 == 3) {\n        pbVar2 = (byte *)FUN_0004b510();\n        return pbVar2;\n      }\n      if (uVar4 == 4) {\n        pbVar2 = (byte *)FUN_0004bcd0();\n        return pbVar2;\n      }\n    }\n    printf("Unknown code 0x%02x\n",param_2);\n  }" (else "else") (compound_statement "{\n    uVar4 = param_2 & 7;\n    if (uVar4 == 0) {\n      bVar1 = *param_1;\n      uVar4 = bVar1 & 0x7f;\n      bVar3 = 0;\n      pbVar2 = param_1 + 1;\n      while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar3 = bVar3 + 7;\n        uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n        if ((bVar3 & 0x20) != 0) {\n          uVar8 = 0;\n        }\n        uVar4 = uVar8 | uVar4;\n        pbVar2 = pbVar2 + 1;\n      }\n      if ((param_2 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n        return pbVar2;\n      }\n      printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n      return pbVar2;\n    }\n    if (uVar4 == 2) {\n      pbVar2 = (byte *)FUN_0004bb90();\n      return pbVar2;\n    }\n    if (uVar4 < 3) {\n      if (uVar4 == 1) {\n        pbVar2 = (byte *)FUN_0004b390();\n        return pbVar2;\n      }\n    }\n    else {\n      if (uVar4 == 3) {\n        pbVar2 = (byte *)FUN_0004b510();\n        return pbVar2;\n      }\n      if (uVar4 == 4) {\n        pbVar2 = (byte *)FUN_0004bcd0();\n        return pbVar2;\n      }\n    }\n    printf("Unknown code 0x%02x\n",param_2);\n  }" ({ "{") (expression_statement "uVar4 = param_2 & 7;" (assignment_expression "uVar4 = param_2 & 7" (identifier "uVar4") (= "=") (binary_expression "param_2 & 7" (identifier "param_2") (& "&") (number_literal "7"))) (; ";")) (if_statement "if (uVar4 == 0) {\n      bVar1 = *param_1;\n      uVar4 = bVar1 & 0x7f;\n      bVar3 = 0;\n      pbVar2 = param_1 + 1;\n      while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar3 = bVar3 + 7;\n        uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n        if ((bVar3 & 0x20) != 0) {\n          uVar8 = 0;\n        }\n        uVar4 = uVar8 | uVar4;\n        pbVar2 = pbVar2 + 1;\n      }\n      if ((param_2 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n        return pbVar2;\n      }\n      printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n      return pbVar2;\n    }" (if "if") (parenthesized_expression "(uVar4 == 0)" (( "(") (binary_expression "uVar4 == 0" (identifier "uVar4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      bVar1 = *param_1;\n      uVar4 = bVar1 & 0x7f;\n      bVar3 = 0;\n      pbVar2 = param_1 + 1;\n      while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar3 = bVar3 + 7;\n        uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n        if ((bVar3 & 0x20) != 0) {\n          uVar8 = 0;\n        }\n        uVar4 = uVar8 | uVar4;\n        pbVar2 = pbVar2 + 1;\n      }\n      if ((param_2 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n        return pbVar2;\n      }\n      printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n      return pbVar2;\n    }" ({ "{") (expression_statement "bVar1 = *param_1;" (assignment_expression "bVar1 = *param_1" (identifier "bVar1") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "uVar4 = bVar1 & 0x7f;" (assignment_expression "uVar4 = bVar1 & 0x7f" (identifier "uVar4") (= "=") (binary_expression "bVar1 & 0x7f" (identifier "bVar1") (& "&") (number_literal "0x7f"))) (; ";")) (expression_statement "bVar3 = 0;" (assignment_expression "bVar3 = 0" (identifier "bVar3") (= "=") (number_literal "0")) (; ";")) (expression_statement "pbVar2 = param_1 + 1;" (assignment_expression "pbVar2 = param_1 + 1" (identifier "pbVar2") (= "=") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1"))) (; ";")) (while_statement "while ((char)bVar1 < '\0') {\n        bVar1 = *pbVar2;\n        bVar3 = bVar3 + 7;\n        uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n        if ((bVar3 & 0x20) != 0) {\n          uVar8 = 0;\n        }\n        uVar4 = uVar8 | uVar4;\n        pbVar2 = pbVar2 + 1;\n      }" (while "while") (parenthesized_expression "((char)bVar1 < '\0')" (( "(") (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "bVar1")) (< "<") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n        bVar1 = *pbVar2;\n        bVar3 = bVar3 + 7;\n        uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);\n        if ((bVar3 & 0x20) != 0) {\n          uVar8 = 0;\n        }\n        uVar4 = uVar8 | uVar4;\n        pbVar2 = pbVar2 + 1;\n      }" ({ "{") (expression_statement "bVar1 = *pbVar2;" (assignment_expression "bVar1 = *pbVar2" (identifier "bVar1") (= "=") (pointer_expression "*pbVar2" (* "*") (identifier "pbVar2"))) (; ";")) (expression_statement "bVar3 = bVar3 + 7;" (assignment_expression "bVar3 = bVar3 + 7" (identifier "bVar3") (= "=") (binary_expression "bVar3 + 7" (identifier "bVar3") (+ "+") (number_literal "7"))) (; ";")) (expression_statement "uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);" (assignment_expression "uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f)" (identifier "uVar8") (= "=") (binary_expression "(bVar1 & 0x7f) << (bVar3 & 0x1f)" (parenthesized_expression "(bVar1 & 0x7f)" (( "(") (binary_expression "bVar1 & 0x7f" (identifier "bVar1") (& "&") (number_literal "0x7f")) () ")")) (<< "<<") (parenthesized_expression "(bVar3 & 0x1f)" (( "(") (binary_expression "bVar3 & 0x1f" (identifier "bVar3") (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (if_statement "if ((bVar3 & 0x20) != 0) {\n          uVar8 = 0;\n        }" (if "if") (parenthesized_expression "((bVar3 & 0x20) != 0)" (( "(") (binary_expression "(bVar3 & 0x20) != 0" (parenthesized_expression "(bVar3 & 0x20)" (( "(") (binary_expression "bVar3 & 0x20" (identifier "bVar3") (& "&") (number_literal "0x20")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          uVar8 = 0;\n        }" ({ "{") (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" (identifier "uVar8") (= "=") (number_literal "0")) (; ";")) (} "}"))) (expression_statement "uVar4 = uVar8 | uVar4;" (assignment_expression "uVar4 = uVar8 | uVar4" (identifier "uVar4") (= "=") (binary_expression "uVar8 | uVar4" (identifier "uVar8") (| "|") (identifier "uVar4"))) (; ";")) (expression_statement "pbVar2 = pbVar2 + 1;" (assignment_expression "pbVar2 = pbVar2 + 1" (identifier "pbVar2") (= "=") (binary_expression "pbVar2 + 1" (identifier "pbVar2") (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (if_statement "if ((param_2 & 8) != 0) {\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n        return pbVar2;\n      }" (if "if") (parenthesized_expression "((param_2 & 8) != 0)" (( "(") (binary_expression "(param_2 & 8) != 0" (parenthesized_expression "(param_2 & 8)" (( "(") (binary_expression "param_2 & 8" (identifier "param_2") (& "&") (number_literal "8")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);\n        return pbVar2;\n      }" ({ "{") (expression_statement "printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);" (call_expression "printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4)" (identifier "printf") (argument_list "("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4)" (( "(") (string_literal ""\t%s:copy_state(label=%lu)\n"" (" """) (escape_sequence "\t") (string_content "%s:copy_state(label=%lu)") (escape_sequence "\n") (" """)) (, ",") (pointer_expression "&DAT_0008e71c" (& "&") (identifier "DAT_0008e71c")) (, ",") (identifier "uVar4") () ")"))) (; ";")) (return_statement "return pbVar2;" (return "return") (identifier "pbVar2") (; ";")) (} "}"))) (expression_statement "printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4);" (call_expression "printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4)" (identifier "printf") (argument_list "("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4)" (( "(") (string_literal ""\t%s:label_state(label=%lu)\n"" (" """) (escape_sequence "\t") (string_content "%s:label_state(label=%lu)") (escape_sequence "\n") (" """)) (, ",") (pointer_expression "&DAT_0008e71c" (& "&") (identifier "DAT_0008e71c")) (, ",") (identifier "uVar4") () ")"))) (; ";")) (return_statement "return pbVar2;" (return "return") (identifier "pbVar2") (; ";")) (} "}"))) (if_statement "if (uVar4 == 2) {\n      pbVar2 = (byte *)FUN_0004bb90();\n      return pbVar2;\n    }" (if "if") (parenthesized_expression "(uVar4 == 2)" (( "(") (binary_expression "uVar4 == 2" (identifier "uVar4") (== "==") (number_literal "2")) () ")")) (compound_statement "{\n      pbVar2 = (byte *)FUN_0004bb90();\n      return pbVar2;\n    }" ({ "{") (expression_statement "pbVar2 = (byte *)FUN_0004bb90();" (assignment_expression "pbVar2 = (byte *)FUN_0004bb90()" (identifier "pbVar2") (= "=") (cast_expression "(byte *)FUN_0004bb90()" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0004bb90()" (identifier "FUN_0004bb90") (argument_list "()" (( "(") () ")"))))) (; ";")) (return_statement "return pbVar2;" (return "return") (identifier "pbVar2") (; ";")) (} "}"))) (if_statement "if (uVar4 < 3) {\n      if (uVar4 == 1) {\n        pbVar2 = (byte *)FUN_0004b390();\n        return pbVar2;\n      }\n    }\n    else {\n      if (uVar4 == 3) {\n        pbVar2 = (byte *)FUN_0004b510();\n        return pbVar2;\n      }\n      if (uVar4 == 4) {\n        pbVar2 = (byte *)FUN_0004bcd0();\n        return pbVar2;\n      }\n    }" (if "if") (parenthesized_expression "(uVar4 < 3)" (( "(") (binary_expression "uVar4 < 3" (identifier "uVar4") (< "<") (number_literal "3")) () ")")) (compound_statement "{\n      if (uVar4 == 1) {\n        pbVar2 = (byte *)FUN_0004b390();\n        return pbVar2;\n      }\n    }" ({ "{") (if_statement "if (uVar4 == 1) {\n        pbVar2 = (byte *)FUN_0004b390();\n        return pbVar2;\n      }" (if "if") (parenthesized_expression "(uVar4 == 1)" (( "(") (binary_expression "uVar4 == 1" (identifier "uVar4") (== "==") (number_literal "1")) () ")")) (compound_statement "{\n        pbVar2 = (byte *)FUN_0004b390();\n        return pbVar2;\n      }" ({ "{") (expression_statement "pbVar2 = (byte *)FUN_0004b390();" (assignment_expression "pbVar2 = (byte *)FUN_0004b390()" (identifier "pbVar2") (= "=") (cast_expression "(byte *)FUN_0004b390()" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0004b390()" (identifier "FUN_0004b390") (argument_list "()" (( "(") () ")"))))) (; ";")) (return_statement "return pbVar2;" (return "return") (identifier "pbVar2") (; ";")) (} "}"))) (} "}")) (else_clause "else {\n      if (uVar4 == 3) {\n        pbVar2 = (byte *)FUN_0004b510();\n        return pbVar2;\n      }\n      if (uVar4 == 4) {\n        pbVar2 = (byte *)FUN_0004bcd0();\n        return pbVar2;\n      }\n    }" (else "else") (compound_statement "{\n      if (uVar4 == 3) {\n        pbVar2 = (byte *)FUN_0004b510();\n        return pbVar2;\n      }\n      if (uVar4 == 4) {\n        pbVar2 = (byte *)FUN_0004bcd0();\n        return pbVar2;\n      }\n    }" ({ "{") (if_statement "if (uVar4 == 3) {\n        pbVar2 = (byte *)FUN_0004b510();\n        return pbVar2;\n      }" (if "if") (parenthesized_expression "(uVar4 == 3)" (( "(") (binary_expression "uVar4 == 3" (identifier "uVar4") (== "==") (number_literal "3")) () ")")) (compound_statement "{\n        pbVar2 = (byte *)FUN_0004b510();\n        return pbVar2;\n      }" ({ "{") (expression_statement "pbVar2 = (byte *)FUN_0004b510();" (assignment_expression "pbVar2 = (byte *)FUN_0004b510()" (identifier "pbVar2") (= "=") (cast_expression "(byte *)FUN_0004b510()" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0004b510()" (identifier "FUN_0004b510") (argument_list "()" (( "(") () ")"))))) (; ";")) (return_statement "return pbVar2;" (return "return") (identifier "pbVar2") (; ";")) (} "}"))) (if_statement "if (uVar4 == 4) {\n        pbVar2 = (byte *)FUN_0004bcd0();\n        return pbVar2;\n      }" (if "if") (parenthesized_expression "(uVar4 == 4)" (( "(") (binary_expression "uVar4 == 4" (identifier "uVar4") (== "==") (number_literal "4")) () ")")) (compound_statement "{\n        pbVar2 = (byte *)FUN_0004bcd0();\n        return pbVar2;\n      }" ({ "{") (expression_statement "pbVar2 = (byte *)FUN_0004bcd0();" (assignment_expression "pbVar2 = (byte *)FUN_0004bcd0()" (identifier "pbVar2") (= "=") (cast_expression "(byte *)FUN_0004bcd0()" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0004bcd0()" (identifier "FUN_0004bcd0") (argument_list "()" (( "(") () ")"))))) (; ";")) (return_statement "return pbVar2;" (return "return") (identifier "pbVar2") (; ";")) (} "}"))) (} "}")))) (expression_statement "printf("Unknown code 0x%02x\n",param_2);" (call_expression "printf("Unknown code 0x%02x\n",param_2)" (identifier "printf") (argument_list "("Unknown code 0x%02x\n",param_2)" (( "(") (string_literal ""Unknown code 0x%02x\n"" (" """) (string_content "Unknown code 0x%02x") (escape_sequence "\n") (" """)) (, ",") (identifier "param_2") () ")"))) (; ";")) (} "}")))) (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */

type_2 * __regparm3 unw_decode_b3_x4(type_2 *dp,type_3 code,void *arg,type_2 *var_3)

{
  type_1 var_2;
  type_1 *var_10;
  type_2 *puVar3;
  type_1 var_4;
  type_3 var_8;
  type_3 var_5;
  type_3 uVar7;
  type_3 var_7;
  type_3 var_1;
  void *in_stack_0000000c;
  type_3 var_6;
  
  if ((var_1 & 0x10) == 0) {
    var_2 = *var_3;
    var_6 = 0;
    var_8 = var_2 & 0x7f;
    var_4 = 0;
    var_3 = var_3 + 1;
    while ((char)var_2 < '\0') {
      var_2 = *var_3;
      var_4 = var_4 + 7;
      uVar7 = (var_2 & 0x7f) << (var_4 & 0x1f);
      var_7 = uVar7;
      var_5 = 0 << (var_4 & 0x1f) | (var_2 & 0x7f) >> 0x20 - (var_4 & 0x1f);
      if ((var_4 & 0x20) != 0) {
        var_7 = 0;
        var_5 = uVar7;
      }
      var_6 = var_5 | var_6;
      var_8 = var_7 | var_8;
      var_3 = var_3 + 1;
    }
    var_2 = *var_3;
    var_5 = var_2 & 0x7f;
    var_4 = 0;
    while (var_3 = var_3 + 1, (char)var_2 < '\0') {
      var_2 = *var_3;
      var_4 = var_4 + 7;
      var_7 = (var_2 & 0x7f) << (var_4 & 0x1f);
      if ((var_4 & 0x20) != 0) {
        var_7 = 0;
      }
      var_5 = var_7 | var_5;
    }
    var_9("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,var_8,var_5,var_8,var_6);
  }
  else {
    var_8 = var_1 & 7;
    if (var_8 == 0) {
      var_2 = *var_3;
      var_8 = var_2 & 0x7f;
      var_4 = 0;
      var_10 = var_3 + 1;
      while ((char)var_2 < '\0') {
        var_2 = *var_10;
        var_4 = var_4 + 7;
        var_6 = (var_2 & 0x7f) << (var_4 & 0x1f);
        if ((var_4 & 0x20) != 0) {
          var_6 = 0;
        }
        var_8 = var_6 | var_8;
        var_10 = var_10 + 1;
      }
      if ((var_1 & 8) != 0) {
        var_9("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,var_8);
        return var_10;
      }
      var_9("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,var_8);
      return var_10;
    }
    if (var_8 == 2) {
      puVar3 = var_11(var_3,code,arg);
      return puVar3;
    }
    if (var_8 < 3) {
      if (var_8 == 1) {
        puVar3 = var_12(var_3,var_1,in_stack_0000000c);
        return puVar3;
      }
    }
    else {
      if (var_8 == 3) {
        puVar3 = var_13(var_3,var_1,in_stack_0000000c);
        return puVar3;
      }
      if (var_8 == 4) {
        puVar3 = var_14(var_3,code,arg);
        return puVar3;
      }
    }
    var_9("Unknown code 0x%02x\n");
  }
  return var_3;
}


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

/* WARNING: Function: __i686.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */

byte * MASKED(byte *param_1,uint param_2)

{
  byte bVar1;
  byte *pbVar2;
  byte bVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  
  if ((param_2 & 0x10) == 0) {
    bVar1 = *param_1;
    uVar8 = 0;
    uVar4 = bVar1 & 0x7f;
    bVar3 = 0;
    param_1 = param_1 + 1;
    while ((char)bVar1 < '\0') {
      bVar1 = *param_1;
      bVar3 = bVar3 + 7;
      uVar6 = (bVar1 & 0x7f) << (bVar3 & 0x1f);
      uVar7 = uVar6;
      uVar5 = 0 << (bVar3 & 0x1f) | (bVar1 & 0x7f) >> 0x20 - (bVar3 & 0x1f);
      if ((bVar3 & 0x20) != 0) {
        uVar7 = 0;
        uVar5 = uVar6;
      }
      uVar8 = uVar5 | uVar8;
      uVar4 = uVar7 | uVar4;
      param_1 = param_1 + 1;
    }
    bVar1 = *param_1;
    uVar5 = bVar1 & 0x7f;
    bVar3 = 0;
    while (param_1 = param_1 + 1, (char)bVar1 < '\0') {
      bVar1 = *param_1;
      bVar3 = bVar3 + 7;
      uVar7 = (bVar1 & 0x7f) << (bVar3 & 0x1f);
      if ((bVar3 & 0x20) != 0) {
        uVar7 = 0;
      }
      uVar5 = uVar7 | uVar5;
    }
    printf("\t%s:epilogue(t=%lu,ecount=%lu)\n",&DAT_0007c02f,uVar4,uVar5,uVar4,uVar8);
  }
  else {
    uVar4 = param_2 & 7;
    if (uVar4 == 0) {
      bVar1 = *param_1;
      uVar4 = bVar1 & 0x7f;
      bVar3 = 0;
      pbVar2 = param_1 + 1;
      while ((char)bVar1 < '\0') {
        bVar1 = *pbVar2;
        bVar3 = bVar3 + 7;
        uVar8 = (bVar1 & 0x7f) << (bVar3 & 0x1f);
        if ((bVar3 & 0x20) != 0) {
          uVar8 = 0;
        }
        uVar4 = uVar8 | uVar4;
        pbVar2 = pbVar2 + 1;
      }
      if ((param_2 & 8) != 0) {
        printf("\t%s:copy_state(label=%lu)\n",&DAT_0008e71c,uVar4);
        return pbVar2;
      }
      printf("\t%s:label_state(label=%lu)\n",&DAT_0008e71c,uVar4);
      return pbVar2;
    }
    if (uVar4 == 2) {
      pbVar2 = (byte *)FUN_0004bb90();
      return pbVar2;
    }
    if (uVar4 < 3) {
      if (uVar4 == 1) {
        pbVar2 = (byte *)FUN_0004b390();
        return pbVar2;
      }
    }
    else {
      if (uVar4 == 3) {
        pbVar2 = (byte *)FUN_0004b510();
        return pbVar2;
      }
      if (uVar4 == 4) {
        pbVar2 = (byte *)FUN_0004bcd0();
        return pbVar2;
      }
    }
    printf("Unknown code 0x%02x\n",param_2);
  }
  return param_1;
}

