
long classify_object_over_fdes(ulong *param_1,uint *param_2)

{
  ushort uVar1;
  uint uVar2;
  undefined8 uVar3;
  long lVar4;
  ulong uVar5;
  long lVar6;
  uint uVar7;
  long local_50;
  ulong local_40 [2];
  
  if (*param_2 == 0) {
    local_50 = 0;
  }
  else {
    uVar3 = 0;
    uVar2 = 0;
    local_50 = 0;
    lVar4 = 0;
    do {
      lVar6 = lVar4;
      if (param_2[1] != 0) {
        uVar7 = uVar2 & 0xff;
        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);
        if (lVar6 != lVar4) {
          uVar2 = get_cie_encoding(lVar6);
          if (uVar2 == 0xff) {
            return -1;
          }
          uVar7 = uVar2 & 0xff;
          uVar3 = base_from_object(uVar7,param_1);
          uVar1 = (ushort)param_1[4];
          if ((uVar1 & 0x7f8) == 0x7f8) {
            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);
          }
          else if ((byte)(uVar1 >> 3) != uVar2) {
            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;
          }
        }
        read_encoded_value_with_base(uVar7,uVar3,param_2 + 2,local_40);
        uVar7 = size_of_encoded_value(uVar7);
        uVar5 = 0xffffffffffffffff;
        if (uVar7 < 8) {
          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;
        }
        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {
          *param_1 = local_40[0];
        }
      }
      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);
      lVar4 = lVar6;
    } while (*param_2 != 0);
  }
  return local_50;
}



long FUN_00305a10(ulong *param_1,uint *param_2)

{
  ushort uVar1;
  uint uVar2;
  undefined8 uVar3;
  long lVar4;
  ulong uVar5;
  long lVar6;
  uint uVar7;
  long local_50;
  ulong local_40 [2];
  
  if (*param_2 == 0) {
    local_50 = 0;
  }
  else {
    uVar3 = 0;
    uVar2 = 0;
    local_50 = 0;
    lVar4 = 0;
    do {
      lVar6 = lVar4;
      if (param_2[1] != 0) {
        uVar7 = uVar2 & 0xff;
        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);
        if (lVar6 != lVar4) {
          uVar2 = FUN_003051e0(lVar6);
          if (uVar2 == 0xff) {
            return -1;
          }
          uVar7 = uVar2 & 0xff;
          uVar3 = FUN_00304f70(uVar7,param_1);
          uVar1 = (ushort)param_1[4];
          if ((uVar1 & 0x7f8) == 0x7f8) {
            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);
          }
          else if ((byte)(uVar1 >> 3) != uVar2) {
            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;
          }
        }
        FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);
        uVar7 = FUN_00304f10(uVar7);
        uVar5 = 0xffffffffffffffff;
        if (uVar7 < 8) {
          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;
        }
        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {
          *param_1 = local_40[0];
        }
      }
      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);
      lVar4 = lVar6;
    } while (*param_2 != 0);
  }
  return local_50;
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x28
MOV EDX,dword ptr [RSI]
TEST EDX,EDX
JZ 0x00305b33
LEA RAX,[RSP + 0x18]
MOV R12,RDI
MOV R15,RSI
XOR R14D,R14D
XOR R13D,R13D
XOR ECX,ECX
MOV qword ptr [RSP],RAX
MOV qword ptr [RSP + 0x8],0x0
JMP 0x00305ac9
SHR AX,0x3
MOVZX EAX,AL
CMP EAX,R13D
JZ 0x00305a62
OR byte ptr [R12 + 0x20],0x4
MOV RCX,qword ptr [RSP]
LEA RDX,[R15 + 0x8]
MOV RSI,R14
MOV EDI,EBP
CALL 0x00305010
MOV EDI,EBP
CALL 0x00304f10
MOV RDX,-0x1
CMP EAX,0x7
JA 0x00305a9a
LEA ECX,[RAX*0x8]
MOV EDX,0x1
SHL RDX,CL
SUB RDX,0x1
MOV RAX,qword ptr [RSP + 0x18]
MOV RCX,RBX
TEST RAX,RDX
JZ 0x00305aba
ADD qword ptr [RSP + 0x8],0x1
CMP qword ptr [R12],RAX
JBE 0x00305ab7
MOV qword ptr [R12],RAX
MOV RCX,RBX
MOV EAX,dword ptr [R15]
LEA R15,[R15 + RAX*0x1 + 0x4]
MOV EAX,dword ptr [R15]
TEST EAX,EAX
JZ 0x00305b3c
MOVSXD RAX,dword ptr [R15 + 0x4]
TEST EAX,EAX
JZ 0x00305aba
LEA RBX,[R15 + 0x4]
MOVZX EBP,R13B
SUB RBX,RAX
CMP RBX,RCX
JZ 0x00305a62
MOV RDI,RBX
CALL 0x003051e0
MOV R13D,EAX
CMP EAX,0xff
JZ 0x00305b50
MOVZX EBP,AL
MOV RSI,R12
MOV EDI,EBP
CALL 0x00304f70
MOV R14,RAX
MOVZX EAX,word ptr [R12 + 0x20]
MOV EDX,EAX
AND DX,0x7f8
CMP DX,0x7f8
JNZ 0x00305a50
MOVZX EDX,R13B
AND AX,0xf807
SHL EDX,0x3
OR EAX,EDX
MOV word ptr [R12 + 0x20],AX
JMP 0x00305a62
MOV qword ptr [RSP + 0x8],0x0
MOV RAX,qword ptr [RSP + 0x8]
ADD RSP,0x28
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV qword ptr [RSP + 0x8],-0x1
JMP 0x00305b3c
(translation_unit "long FUN_00305a10(ulong *param_1,uint *param_2)\n\n{\n  ushort uVar1;\n  uint uVar2;\n  undefined8 uVar3;\n  long lVar4;\n  ulong uVar5;\n  long lVar6;\n  uint uVar7;\n  long local_50;\n  ulong local_40 [2];\n  \n  if (*param_2 == 0) {\n    local_50 = 0;\n  }\n  else {\n    uVar3 = 0;\n    uVar2 = 0;\n    local_50 = 0;\n    lVar4 = 0;\n    do {\n      lVar6 = lVar4;\n      if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = FUN_00304f10(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }\n      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);\n      lVar4 = lVar6;\n    } while (*param_2 != 0);\n  }\n  return local_50;\n}\n\n" (function_definition "long FUN_00305a10(ulong *param_1,uint *param_2)\n\n{\n  ushort uVar1;\n  uint uVar2;\n  undefined8 uVar3;\n  long lVar4;\n  ulong uVar5;\n  long lVar6;\n  uint uVar7;\n  long local_50;\n  ulong local_40 [2];\n  \n  if (*param_2 == 0) {\n    local_50 = 0;\n  }\n  else {\n    uVar3 = 0;\n    uVar2 = 0;\n    local_50 = 0;\n    lVar4 = 0;\n    do {\n      lVar6 = lVar4;\n      if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = FUN_00304f10(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }\n      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);\n      lVar4 = lVar6;\n    } while (*param_2 != 0);\n  }\n  return local_50;\n}" (sized_type_specifier "long" long) (function_declarator "FUN_00305a10(ulong *param_1,uint *param_2)" identifier (parameter_list "(ulong *param_1,uint *param_2)" ( (parameter_declaration "ulong *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  ushort uVar1;\n  uint uVar2;\n  undefined8 uVar3;\n  long lVar4;\n  ulong uVar5;\n  long lVar6;\n  uint uVar7;\n  long local_50;\n  ulong local_40 [2];\n  \n  if (*param_2 == 0) {\n    local_50 = 0;\n  }\n  else {\n    uVar3 = 0;\n    uVar2 = 0;\n    local_50 = 0;\n    lVar4 = 0;\n    do {\n      lVar6 = lVar4;\n      if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = FUN_00304f10(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }\n      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);\n      lVar4 = lVar6;\n    } while (*param_2 != 0);\n  }\n  return local_50;\n}" { (declaration "ushort uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "undefined8 uVar3;" type_identifier identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "long local_50;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong local_40 [2];" type_identifier (array_declarator "local_40 [2]" identifier [ number_literal ]) ;) (if_statement "if (*param_2 == 0) {\n    local_50 = 0;\n  }\n  else {\n    uVar3 = 0;\n    uVar2 = 0;\n    local_50 = 0;\n    lVar4 = 0;\n    do {\n      lVar6 = lVar4;\n      if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = FUN_00304f10(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }\n      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);\n      lVar4 = lVar6;\n    } while (*param_2 != 0);\n  }" if (parenthesized_expression "(*param_2 == 0)" ( (binary_expression "*param_2 == 0" (pointer_expression "*param_2" * identifier) == number_literal) )) (compound_statement "{\n    local_50 = 0;\n  }" { (expression_statement "local_50 = 0;" (assignment_expression "local_50 = 0" identifier = number_literal) ;) }) (else_clause "else {\n    uVar3 = 0;\n    uVar2 = 0;\n    local_50 = 0;\n    lVar4 = 0;\n    do {\n      lVar6 = lVar4;\n      if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = FUN_00304f10(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }\n      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);\n      lVar4 = lVar6;\n    } while (*param_2 != 0);\n  }" else (compound_statement "{\n    uVar3 = 0;\n    uVar2 = 0;\n    local_50 = 0;\n    lVar4 = 0;\n    do {\n      lVar6 = lVar4;\n      if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = FUN_00304f10(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }\n      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);\n      lVar4 = lVar6;\n    } while (*param_2 != 0);\n  }" { (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" identifier = number_literal) ;) (expression_statement "local_50 = 0;" (assignment_expression "local_50 = 0" identifier = number_literal) ;) (expression_statement "lVar4 = 0;" (assignment_expression "lVar4 = 0" identifier = number_literal) ;) (do_statement "do {\n      lVar6 = lVar4;\n      if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = FUN_00304f10(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }\n      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);\n      lVar4 = lVar6;\n    } while (*param_2 != 0);" do (compound_statement "{\n      lVar6 = lVar4;\n      if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = FUN_00304f10(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }\n      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);\n      lVar4 = lVar6;\n    }" { (expression_statement "lVar6 = lVar4;" (assignment_expression "lVar6 = lVar4" identifier = identifier) ;) (if_statement "if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = FUN_00304f10(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }" if (parenthesized_expression "(param_2[1] != 0)" ( (binary_expression "param_2[1] != 0" (subscript_expression "param_2[1]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = FUN_00304f10(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }" { (expression_statement "uVar7 = uVar2 & 0xff;" (assignment_expression "uVar7 = uVar2 & 0xff" identifier = (binary_expression "uVar2 & 0xff" identifier & number_literal)) ;) (expression_statement "lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);" (assignment_expression "lVar6 = (long)param_2 + (4 - (long)(int)param_2[1])" identifier = (binary_expression "(long)param_2 + (4 - (long)(int)param_2[1])" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(4 - (long)(int)param_2[1])" ( (binary_expression "4 - (long)(int)param_2[1]" number_literal - (cast_expression "(long)(int)param_2[1]" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)param_2[1]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_2[1]" identifier [ number_literal ])))) )))) ;) (if_statement "if (lVar6 != lVar4) {\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }" if (parenthesized_expression "(lVar6 != lVar4)" ( (binary_expression "lVar6 != lVar4" identifier != identifier) )) (compound_statement "{\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }" { (expression_statement "uVar2 = FUN_003051e0(lVar6);" (assignment_expression "uVar2 = FUN_003051e0(lVar6)" identifier = (call_expression "FUN_003051e0(lVar6)" identifier (argument_list "(lVar6)" ( identifier )))) ;) (if_statement "if (uVar2 == 0xff) {\n            return -1;\n          }" if (parenthesized_expression "(uVar2 == 0xff)" ( (binary_expression "uVar2 == 0xff" identifier == number_literal) )) (compound_statement "{\n            return -1;\n          }" { (return_statement "return -1;" return number_literal ;) })) (expression_statement "uVar7 = uVar2 & 0xff;" (assignment_expression "uVar7 = uVar2 & 0xff" identifier = (binary_expression "uVar2 & 0xff" identifier & number_literal)) ;) (expression_statement "uVar3 = FUN_00304f70(uVar7,param_1);" (assignment_expression "uVar3 = FUN_00304f70(uVar7,param_1)" identifier = (call_expression "FUN_00304f70(uVar7,param_1)" identifier (argument_list "(uVar7,param_1)" ( identifier , identifier )))) ;) (expression_statement "uVar1 = (ushort)param_1[4];" (assignment_expression "uVar1 = (ushort)param_1[4]" identifier = (cast_expression "(ushort)param_1[4]" ( (type_descriptor "ushort" type_identifier) ) (subscript_expression "param_1[4]" identifier [ number_literal ]))) ;) (if_statement "if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }" if (parenthesized_expression "((uVar1 & 0x7f8) == 0x7f8)" ( (binary_expression "(uVar1 & 0x7f8) == 0x7f8" (parenthesized_expression "(uVar1 & 0x7f8)" ( (binary_expression "uVar1 & 0x7f8" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }" { (expression_statement "*(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);" (assignment_expression "*(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3)" (pointer_expression "*(ushort *)(param_1 + 4)" * (cast_expression "(ushort *)(param_1 + 4)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) )))) = (binary_expression "uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3)" (binary_expression "uVar1 & 0xf807" identifier & number_literal) | (call_expression "(ushort)((uVar2 & 0xff) << 3)" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "((uVar2 & 0xff) << 3)" ( (binary_expression "(uVar2 & 0xff) << 3" (parenthesized_expression "(uVar2 & 0xff)" ( (binary_expression "uVar2 & 0xff" identifier & number_literal) )) << number_literal) ))))) ;) }) (else_clause "else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }" else (if_statement "if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }" if (parenthesized_expression "((byte)(uVar1 >> 3) != uVar2)" ( (binary_expression "(byte)(uVar1 >> 3) != uVar2" (call_expression "(byte)(uVar1 >> 3)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar1 >> 3)" ( (binary_expression "uVar1 >> 3" identifier >> number_literal) ))) != identifier) )) (compound_statement "{\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }" { (expression_statement "*(byte *)(param_1 + 4) = (byte)param_1[4] | 4;" (assignment_expression "*(byte *)(param_1 + 4) = (byte)param_1[4] | 4" (pointer_expression "*(byte *)(param_1 + 4)" * (cast_expression "(byte *)(param_1 + 4)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) )))) = (binary_expression "(byte)param_1[4] | 4" (cast_expression "(byte)param_1[4]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "param_1[4]" identifier [ number_literal ])) | number_literal)) ;) })))) })) (expression_statement "FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);" (call_expression "FUN_00305010(uVar7,uVar3,param_2 + 2,local_40)" identifier (argument_list "(uVar7,uVar3,param_2 + 2,local_40)" ( identifier , identifier , (binary_expression "param_2 + 2" identifier + number_literal) , identifier ))) ;) (expression_statement "uVar7 = FUN_00304f10(uVar7);" (assignment_expression "uVar7 = FUN_00304f10(uVar7)" identifier = (call_expression "FUN_00304f10(uVar7)" identifier (argument_list "(uVar7)" ( identifier )))) ;) (expression_statement "uVar5 = 0xffffffffffffffff;" (assignment_expression "uVar5 = 0xffffffffffffffff" identifier = number_literal) ;) (if_statement "if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }" if (parenthesized_expression "(uVar7 < 8)" ( (binary_expression "uVar7 < 8" identifier < number_literal) )) (compound_statement "{\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }" { (expression_statement "uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;" (assignment_expression "uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1" identifier = (binary_expression "(1L << ((char)uVar7 * '\b' & 0x3fU)) - 1" (parenthesized_expression "(1L << ((char)uVar7 * '\b' & 0x3fU))" ( (binary_expression "1L << ((char)uVar7 * '\b' & 0x3fU)" number_literal << (parenthesized_expression "((char)uVar7 * '\b' & 0x3fU)" ( (binary_expression "(char)uVar7 * '\b' & 0x3fU" (binary_expression "(char)uVar7 * '\b'" (cast_expression "(char)uVar7" ( (type_descriptor "char" primitive_type) ) identifier) * (char_literal "'\b'" ' escape_sequence ')) & number_literal) ))) )) - number_literal)) ;) })) (if_statement "if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }" if (parenthesized_expression "(((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1))" ( (binary_expression "((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)" (parenthesized_expression "((local_40[0] & uVar5) != 0)" ( (binary_expression "(local_40[0] & uVar5) != 0" (parenthesized_expression "(local_40[0] & uVar5)" ( (binary_expression "local_40[0] & uVar5" (subscript_expression "local_40[0]" identifier [ number_literal ]) & identifier) )) != number_literal) )) && (parenthesized_expression "(local_50 = local_50 + 1, local_40[0] < *param_1)" ( (comma_expression "local_50 = local_50 + 1, local_40[0] < *param_1" (assignment_expression "local_50 = local_50 + 1" identifier = (binary_expression "local_50 + 1" identifier + number_literal)) , (binary_expression "local_40[0] < *param_1" (subscript_expression "local_40[0]" identifier [ number_literal ]) < (pointer_expression "*param_1" * identifier))) ))) )) (compound_statement "{\n          *param_1 = local_40[0];\n        }" { (expression_statement "*param_1 = local_40[0];" (assignment_expression "*param_1 = local_40[0]" (pointer_expression "*param_1" * identifier) = (subscript_expression "local_40[0]" identifier [ number_literal ])) ;) })) })) (expression_statement "param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);" (assignment_expression "param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4)" identifier = (cast_expression "(uint *)((long)param_2 + (ulong)*param_2 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_2 + (ulong)*param_2 + 4)" ( (binary_expression "(long)param_2 + (ulong)*param_2 + 4" (binary_expression "(long)param_2 + (ulong)*param_2" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (binary_expression "(ulong)*param_2" (parenthesized_expression "(ulong)" ( identifier )) * identifier)) + number_literal) )))) ;) (expression_statement "lVar4 = lVar6;" (assignment_expression "lVar4 = lVar6" identifier = identifier) ;) }) while (parenthesized_expression "(*param_2 != 0)" ( (binary_expression "*param_2 != 0" (pointer_expression "*param_2" * identifier) != number_literal) )) ;) }))) (return_statement "return local_50;" return identifier ;) })))
(translation_unit "long classify_object_over_fdes(ulong *param_1,uint *param_2)\n\n{\n  ushort uVar1;\n  uint uVar2;\n  undefined8 uVar3;\n  long lVar4;\n  ulong uVar5;\n  long lVar6;\n  uint uVar7;\n  long local_50;\n  ulong local_40 [2];\n  \n  if (*param_2 == 0) {\n    local_50 = 0;\n  }\n  else {\n    uVar3 = 0;\n    uVar2 = 0;\n    local_50 = 0;\n    lVar4 = 0;\n    do {\n      lVar6 = lVar4;\n      if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = get_cie_encoding(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = base_from_object(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        read_encoded_value_with_base(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = size_of_encoded_value(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }\n      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);\n      lVar4 = lVar6;\n    } while (*param_2 != 0);\n  }\n  return local_50;\n}\n\n" (function_definition "long classify_object_over_fdes(ulong *param_1,uint *param_2)\n\n{\n  ushort uVar1;\n  uint uVar2;\n  undefined8 uVar3;\n  long lVar4;\n  ulong uVar5;\n  long lVar6;\n  uint uVar7;\n  long local_50;\n  ulong local_40 [2];\n  \n  if (*param_2 == 0) {\n    local_50 = 0;\n  }\n  else {\n    uVar3 = 0;\n    uVar2 = 0;\n    local_50 = 0;\n    lVar4 = 0;\n    do {\n      lVar6 = lVar4;\n      if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = get_cie_encoding(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = base_from_object(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        read_encoded_value_with_base(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = size_of_encoded_value(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }\n      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);\n      lVar4 = lVar6;\n    } while (*param_2 != 0);\n  }\n  return local_50;\n}" (sized_type_specifier "long" long) (function_declarator "classify_object_over_fdes(ulong *param_1,uint *param_2)" identifier (parameter_list "(ulong *param_1,uint *param_2)" ( (parameter_declaration "ulong *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  ushort uVar1;\n  uint uVar2;\n  undefined8 uVar3;\n  long lVar4;\n  ulong uVar5;\n  long lVar6;\n  uint uVar7;\n  long local_50;\n  ulong local_40 [2];\n  \n  if (*param_2 == 0) {\n    local_50 = 0;\n  }\n  else {\n    uVar3 = 0;\n    uVar2 = 0;\n    local_50 = 0;\n    lVar4 = 0;\n    do {\n      lVar6 = lVar4;\n      if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = get_cie_encoding(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = base_from_object(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        read_encoded_value_with_base(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = size_of_encoded_value(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }\n      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);\n      lVar4 = lVar6;\n    } while (*param_2 != 0);\n  }\n  return local_50;\n}" { (declaration "ushort uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "undefined8 uVar3;" type_identifier identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "long local_50;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong local_40 [2];" type_identifier (array_declarator "local_40 [2]" identifier [ number_literal ]) ;) (if_statement "if (*param_2 == 0) {\n    local_50 = 0;\n  }\n  else {\n    uVar3 = 0;\n    uVar2 = 0;\n    local_50 = 0;\n    lVar4 = 0;\n    do {\n      lVar6 = lVar4;\n      if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = get_cie_encoding(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = base_from_object(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        read_encoded_value_with_base(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = size_of_encoded_value(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }\n      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);\n      lVar4 = lVar6;\n    } while (*param_2 != 0);\n  }" if (parenthesized_expression "(*param_2 == 0)" ( (binary_expression "*param_2 == 0" (pointer_expression "*param_2" * identifier) == number_literal) )) (compound_statement "{\n    local_50 = 0;\n  }" { (expression_statement "local_50 = 0;" (assignment_expression "local_50 = 0" identifier = number_literal) ;) }) (else_clause "else {\n    uVar3 = 0;\n    uVar2 = 0;\n    local_50 = 0;\n    lVar4 = 0;\n    do {\n      lVar6 = lVar4;\n      if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = get_cie_encoding(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = base_from_object(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        read_encoded_value_with_base(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = size_of_encoded_value(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }\n      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);\n      lVar4 = lVar6;\n    } while (*param_2 != 0);\n  }" else (compound_statement "{\n    uVar3 = 0;\n    uVar2 = 0;\n    local_50 = 0;\n    lVar4 = 0;\n    do {\n      lVar6 = lVar4;\n      if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = get_cie_encoding(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = base_from_object(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        read_encoded_value_with_base(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = size_of_encoded_value(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }\n      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);\n      lVar4 = lVar6;\n    } while (*param_2 != 0);\n  }" { (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" identifier = number_literal) ;) (expression_statement "local_50 = 0;" (assignment_expression "local_50 = 0" identifier = number_literal) ;) (expression_statement "lVar4 = 0;" (assignment_expression "lVar4 = 0" identifier = number_literal) ;) (do_statement "do {\n      lVar6 = lVar4;\n      if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = get_cie_encoding(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = base_from_object(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        read_encoded_value_with_base(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = size_of_encoded_value(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }\n      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);\n      lVar4 = lVar6;\n    } while (*param_2 != 0);" do (compound_statement "{\n      lVar6 = lVar4;\n      if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = get_cie_encoding(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = base_from_object(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        read_encoded_value_with_base(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = size_of_encoded_value(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }\n      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);\n      lVar4 = lVar6;\n    }" { (expression_statement "lVar6 = lVar4;" (assignment_expression "lVar6 = lVar4" identifier = identifier) ;) (if_statement "if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = get_cie_encoding(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = base_from_object(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        read_encoded_value_with_base(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = size_of_encoded_value(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }" if (parenthesized_expression "(param_2[1] != 0)" ( (binary_expression "param_2[1] != 0" (subscript_expression "param_2[1]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = get_cie_encoding(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = base_from_object(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        read_encoded_value_with_base(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = size_of_encoded_value(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }" { (expression_statement "uVar7 = uVar2 & 0xff;" (assignment_expression "uVar7 = uVar2 & 0xff" identifier = (binary_expression "uVar2 & 0xff" identifier & number_literal)) ;) (expression_statement "lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);" (assignment_expression "lVar6 = (long)param_2 + (4 - (long)(int)param_2[1])" identifier = (binary_expression "(long)param_2 + (4 - (long)(int)param_2[1])" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(4 - (long)(int)param_2[1])" ( (binary_expression "4 - (long)(int)param_2[1]" number_literal - (cast_expression "(long)(int)param_2[1]" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)param_2[1]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_2[1]" identifier [ number_literal ])))) )))) ;) (if_statement "if (lVar6 != lVar4) {\n          uVar2 = get_cie_encoding(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = base_from_object(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }" if (parenthesized_expression "(lVar6 != lVar4)" ( (binary_expression "lVar6 != lVar4" identifier != identifier) )) (compound_statement "{\n          uVar2 = get_cie_encoding(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = base_from_object(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }" { (expression_statement "uVar2 = get_cie_encoding(lVar6);" (assignment_expression "uVar2 = get_cie_encoding(lVar6)" identifier = (call_expression "get_cie_encoding(lVar6)" identifier (argument_list "(lVar6)" ( identifier )))) ;) (if_statement "if (uVar2 == 0xff) {\n            return -1;\n          }" if (parenthesized_expression "(uVar2 == 0xff)" ( (binary_expression "uVar2 == 0xff" identifier == number_literal) )) (compound_statement "{\n            return -1;\n          }" { (return_statement "return -1;" return number_literal ;) })) (expression_statement "uVar7 = uVar2 & 0xff;" (assignment_expression "uVar7 = uVar2 & 0xff" identifier = (binary_expression "uVar2 & 0xff" identifier & number_literal)) ;) (expression_statement "uVar3 = base_from_object(uVar7,param_1);" (assignment_expression "uVar3 = base_from_object(uVar7,param_1)" identifier = (call_expression "base_from_object(uVar7,param_1)" identifier (argument_list "(uVar7,param_1)" ( identifier , identifier )))) ;) (expression_statement "uVar1 = (ushort)param_1[4];" (assignment_expression "uVar1 = (ushort)param_1[4]" identifier = (cast_expression "(ushort)param_1[4]" ( (type_descriptor "ushort" type_identifier) ) (subscript_expression "param_1[4]" identifier [ number_literal ]))) ;) (if_statement "if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }" if (parenthesized_expression "((uVar1 & 0x7f8) == 0x7f8)" ( (binary_expression "(uVar1 & 0x7f8) == 0x7f8" (parenthesized_expression "(uVar1 & 0x7f8)" ( (binary_expression "uVar1 & 0x7f8" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }" { (expression_statement "*(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);" (assignment_expression "*(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3)" (pointer_expression "*(ushort *)(param_1 + 4)" * (cast_expression "(ushort *)(param_1 + 4)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) )))) = (binary_expression "uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3)" (binary_expression "uVar1 & 0xf807" identifier & number_literal) | (call_expression "(ushort)((uVar2 & 0xff) << 3)" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "((uVar2 & 0xff) << 3)" ( (binary_expression "(uVar2 & 0xff) << 3" (parenthesized_expression "(uVar2 & 0xff)" ( (binary_expression "uVar2 & 0xff" identifier & number_literal) )) << number_literal) ))))) ;) }) (else_clause "else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }" else (if_statement "if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }" if (parenthesized_expression "((byte)(uVar1 >> 3) != uVar2)" ( (binary_expression "(byte)(uVar1 >> 3) != uVar2" (call_expression "(byte)(uVar1 >> 3)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar1 >> 3)" ( (binary_expression "uVar1 >> 3" identifier >> number_literal) ))) != identifier) )) (compound_statement "{\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }" { (expression_statement "*(byte *)(param_1 + 4) = (byte)param_1[4] | 4;" (assignment_expression "*(byte *)(param_1 + 4) = (byte)param_1[4] | 4" (pointer_expression "*(byte *)(param_1 + 4)" * (cast_expression "(byte *)(param_1 + 4)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) )))) = (binary_expression "(byte)param_1[4] | 4" (cast_expression "(byte)param_1[4]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "param_1[4]" identifier [ number_literal ])) | number_literal)) ;) })))) })) (expression_statement "read_encoded_value_with_base(uVar7,uVar3,param_2 + 2,local_40);" (call_expression "read_encoded_value_with_base(uVar7,uVar3,param_2 + 2,local_40)" identifier (argument_list "(uVar7,uVar3,param_2 + 2,local_40)" ( identifier , identifier , (binary_expression "param_2 + 2" identifier + number_literal) , identifier ))) ;) (expression_statement "uVar7 = size_of_encoded_value(uVar7);" (assignment_expression "uVar7 = size_of_encoded_value(uVar7)" identifier = (call_expression "size_of_encoded_value(uVar7)" identifier (argument_list "(uVar7)" ( identifier )))) ;) (expression_statement "uVar5 = 0xffffffffffffffff;" (assignment_expression "uVar5 = 0xffffffffffffffff" identifier = number_literal) ;) (if_statement "if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }" if (parenthesized_expression "(uVar7 < 8)" ( (binary_expression "uVar7 < 8" identifier < number_literal) )) (compound_statement "{\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }" { (expression_statement "uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;" (assignment_expression "uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1" identifier = (binary_expression "(1L << ((char)uVar7 * '\b' & 0x3fU)) - 1" (parenthesized_expression "(1L << ((char)uVar7 * '\b' & 0x3fU))" ( (binary_expression "1L << ((char)uVar7 * '\b' & 0x3fU)" number_literal << (parenthesized_expression "((char)uVar7 * '\b' & 0x3fU)" ( (binary_expression "(char)uVar7 * '\b' & 0x3fU" (binary_expression "(char)uVar7 * '\b'" (cast_expression "(char)uVar7" ( (type_descriptor "char" primitive_type) ) identifier) * (char_literal "'\b'" ' escape_sequence ')) & number_literal) ))) )) - number_literal)) ;) })) (if_statement "if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }" if (parenthesized_expression "(((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1))" ( (binary_expression "((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)" (parenthesized_expression "((local_40[0] & uVar5) != 0)" ( (binary_expression "(local_40[0] & uVar5) != 0" (parenthesized_expression "(local_40[0] & uVar5)" ( (binary_expression "local_40[0] & uVar5" (subscript_expression "local_40[0]" identifier [ number_literal ]) & identifier) )) != number_literal) )) && (parenthesized_expression "(local_50 = local_50 + 1, local_40[0] < *param_1)" ( (comma_expression "local_50 = local_50 + 1, local_40[0] < *param_1" (assignment_expression "local_50 = local_50 + 1" identifier = (binary_expression "local_50 + 1" identifier + number_literal)) , (binary_expression "local_40[0] < *param_1" (subscript_expression "local_40[0]" identifier [ number_literal ]) < (pointer_expression "*param_1" * identifier))) ))) )) (compound_statement "{\n          *param_1 = local_40[0];\n        }" { (expression_statement "*param_1 = local_40[0];" (assignment_expression "*param_1 = local_40[0]" (pointer_expression "*param_1" * identifier) = (subscript_expression "local_40[0]" identifier [ number_literal ])) ;) })) })) (expression_statement "param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);" (assignment_expression "param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4)" identifier = (cast_expression "(uint *)((long)param_2 + (ulong)*param_2 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_2 + (ulong)*param_2 + 4)" ( (binary_expression "(long)param_2 + (ulong)*param_2 + 4" (binary_expression "(long)param_2 + (ulong)*param_2" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (binary_expression "(ulong)*param_2" (parenthesized_expression "(ulong)" ( identifier )) * identifier)) + number_literal) )))) ;) (expression_statement "lVar4 = lVar6;" (assignment_expression "lVar4 = lVar6" identifier = identifier) ;) }) while (parenthesized_expression "(*param_2 != 0)" ( (binary_expression "*param_2 != 0" (pointer_expression "*param_2" * identifier) != number_literal) )) ;) }))) (return_statement "return local_50;" return identifier ;) })))
(translation_unit "long FUN_00305a10(ulong *param_1,uint *param_2)\n\n{\n  ushort uVar1;\n  uint uVar2;\n  undefined8 uVar3;\n  long lVar4;\n  ulong uVar5;\n  long lVar6;\n  uint uVar7;\n  long local_50;\n  ulong local_40 [2];\n  \n  if (*param_2 == 0) {\n    local_50 = 0;\n  }\n  else {\n    uVar3 = 0;\n    uVar2 = 0;\n    local_50 = 0;\n    lVar4 = 0;\n    do {\n      lVar6 = lVar4;\n      if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = FUN_00304f10(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }\n      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);\n      lVar4 = lVar6;\n    } while (*param_2 != 0);\n  }\n  return local_50;\n}\n\n" (function_definition "long FUN_00305a10(ulong *param_1,uint *param_2)\n\n{\n  ushort uVar1;\n  uint uVar2;\n  undefined8 uVar3;\n  long lVar4;\n  ulong uVar5;\n  long lVar6;\n  uint uVar7;\n  long local_50;\n  ulong local_40 [2];\n  \n  if (*param_2 == 0) {\n    local_50 = 0;\n  }\n  else {\n    uVar3 = 0;\n    uVar2 = 0;\n    local_50 = 0;\n    lVar4 = 0;\n    do {\n      lVar6 = lVar4;\n      if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = FUN_00304f10(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }\n      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);\n      lVar4 = lVar6;\n    } while (*param_2 != 0);\n  }\n  return local_50;\n}" (sized_type_specifier "long" long) (function_declarator "FUN_00305a10(ulong *param_1,uint *param_2)" identifier (parameter_list "(ulong *param_1,uint *param_2)" ( (parameter_declaration "ulong *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  ushort uVar1;\n  uint uVar2;\n  undefined8 uVar3;\n  long lVar4;\n  ulong uVar5;\n  long lVar6;\n  uint uVar7;\n  long local_50;\n  ulong local_40 [2];\n  \n  if (*param_2 == 0) {\n    local_50 = 0;\n  }\n  else {\n    uVar3 = 0;\n    uVar2 = 0;\n    local_50 = 0;\n    lVar4 = 0;\n    do {\n      lVar6 = lVar4;\n      if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = FUN_00304f10(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }\n      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);\n      lVar4 = lVar6;\n    } while (*param_2 != 0);\n  }\n  return local_50;\n}" { (declaration "ushort uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "undefined8 uVar3;" type_identifier identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "long local_50;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong local_40 [2];" type_identifier (array_declarator "local_40 [2]" identifier [ number_literal ]) ;) (if_statement "if (*param_2 == 0) {\n    local_50 = 0;\n  }\n  else {\n    uVar3 = 0;\n    uVar2 = 0;\n    local_50 = 0;\n    lVar4 = 0;\n    do {\n      lVar6 = lVar4;\n      if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = FUN_00304f10(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }\n      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);\n      lVar4 = lVar6;\n    } while (*param_2 != 0);\n  }" if (parenthesized_expression "(*param_2 == 0)" ( (binary_expression "*param_2 == 0" (pointer_expression "*param_2" * identifier) == number_literal) )) (compound_statement "{\n    local_50 = 0;\n  }" { (expression_statement "local_50 = 0;" (assignment_expression "local_50 = 0" identifier = number_literal) ;) }) (else_clause "else {\n    uVar3 = 0;\n    uVar2 = 0;\n    local_50 = 0;\n    lVar4 = 0;\n    do {\n      lVar6 = lVar4;\n      if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = FUN_00304f10(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }\n      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);\n      lVar4 = lVar6;\n    } while (*param_2 != 0);\n  }" else (compound_statement "{\n    uVar3 = 0;\n    uVar2 = 0;\n    local_50 = 0;\n    lVar4 = 0;\n    do {\n      lVar6 = lVar4;\n      if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = FUN_00304f10(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }\n      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);\n      lVar4 = lVar6;\n    } while (*param_2 != 0);\n  }" { (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" identifier = number_literal) ;) (expression_statement "local_50 = 0;" (assignment_expression "local_50 = 0" identifier = number_literal) ;) (expression_statement "lVar4 = 0;" (assignment_expression "lVar4 = 0" identifier = number_literal) ;) (do_statement "do {\n      lVar6 = lVar4;\n      if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = FUN_00304f10(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }\n      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);\n      lVar4 = lVar6;\n    } while (*param_2 != 0);" do (compound_statement "{\n      lVar6 = lVar4;\n      if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = FUN_00304f10(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }\n      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);\n      lVar4 = lVar6;\n    }" { (expression_statement "lVar6 = lVar4;" (assignment_expression "lVar6 = lVar4" identifier = identifier) ;) (if_statement "if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = FUN_00304f10(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }" if (parenthesized_expression "(param_2[1] != 0)" ( (binary_expression "param_2[1] != 0" (subscript_expression "param_2[1]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = FUN_00304f10(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }" { (expression_statement "uVar7 = uVar2 & 0xff;" (assignment_expression "uVar7 = uVar2 & 0xff" identifier = (binary_expression "uVar2 & 0xff" identifier & number_literal)) ;) (expression_statement "lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);" (assignment_expression "lVar6 = (long)param_2 + (4 - (long)(int)param_2[1])" identifier = (binary_expression "(long)param_2 + (4 - (long)(int)param_2[1])" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(4 - (long)(int)param_2[1])" ( (binary_expression "4 - (long)(int)param_2[1]" number_literal - (cast_expression "(long)(int)param_2[1]" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)param_2[1]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_2[1]" identifier [ number_literal ])))) )))) ;) (if_statement "if (lVar6 != lVar4) {\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }" if (parenthesized_expression "(lVar6 != lVar4)" ( (binary_expression "lVar6 != lVar4" identifier != identifier) )) (compound_statement "{\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }" { (expression_statement "uVar2 = FUN_003051e0(lVar6);" (assignment_expression "uVar2 = FUN_003051e0(lVar6)" identifier = (call_expression "FUN_003051e0(lVar6)" identifier (argument_list "(lVar6)" ( identifier )))) ;) (if_statement "if (uVar2 == 0xff) {\n            return -1;\n          }" if (parenthesized_expression "(uVar2 == 0xff)" ( (binary_expression "uVar2 == 0xff" identifier == number_literal) )) (compound_statement "{\n            return -1;\n          }" { (return_statement "return -1;" return number_literal ;) })) (expression_statement "uVar7 = uVar2 & 0xff;" (assignment_expression "uVar7 = uVar2 & 0xff" identifier = (binary_expression "uVar2 & 0xff" identifier & number_literal)) ;) (expression_statement "uVar3 = FUN_00304f70(uVar7,param_1);" (assignment_expression "uVar3 = FUN_00304f70(uVar7,param_1)" identifier = (call_expression "FUN_00304f70(uVar7,param_1)" identifier (argument_list "(uVar7,param_1)" ( identifier , identifier )))) ;) (expression_statement "uVar1 = (ushort)param_1[4];" (assignment_expression "uVar1 = (ushort)param_1[4]" identifier = (cast_expression "(ushort)param_1[4]" ( (type_descriptor "ushort" type_identifier) ) (subscript_expression "param_1[4]" identifier [ number_literal ]))) ;) (if_statement "if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }" if (parenthesized_expression "((uVar1 & 0x7f8) == 0x7f8)" ( (binary_expression "(uVar1 & 0x7f8) == 0x7f8" (parenthesized_expression "(uVar1 & 0x7f8)" ( (binary_expression "uVar1 & 0x7f8" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }" { (expression_statement "*(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);" (assignment_expression "*(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3)" (pointer_expression "*(ushort *)(param_1 + 4)" * (cast_expression "(ushort *)(param_1 + 4)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) )))) = (binary_expression "uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3)" (binary_expression "uVar1 & 0xf807" identifier & number_literal) | (call_expression "(ushort)((uVar2 & 0xff) << 3)" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "((uVar2 & 0xff) << 3)" ( (binary_expression "(uVar2 & 0xff) << 3" (parenthesized_expression "(uVar2 & 0xff)" ( (binary_expression "uVar2 & 0xff" identifier & number_literal) )) << number_literal) ))))) ;) }) (else_clause "else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }" else (if_statement "if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }" if (parenthesized_expression "((byte)(uVar1 >> 3) != uVar2)" ( (binary_expression "(byte)(uVar1 >> 3) != uVar2" (call_expression "(byte)(uVar1 >> 3)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar1 >> 3)" ( (binary_expression "uVar1 >> 3" identifier >> number_literal) ))) != identifier) )) (compound_statement "{\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }" { (expression_statement "*(byte *)(param_1 + 4) = (byte)param_1[4] | 4;" (assignment_expression "*(byte *)(param_1 + 4) = (byte)param_1[4] | 4" (pointer_expression "*(byte *)(param_1 + 4)" * (cast_expression "(byte *)(param_1 + 4)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) )))) = (binary_expression "(byte)param_1[4] | 4" (cast_expression "(byte)param_1[4]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "param_1[4]" identifier [ number_literal ])) | number_literal)) ;) })))) })) (expression_statement "FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);" (call_expression "FUN_00305010(uVar7,uVar3,param_2 + 2,local_40)" identifier (argument_list "(uVar7,uVar3,param_2 + 2,local_40)" ( identifier , identifier , (binary_expression "param_2 + 2" identifier + number_literal) , identifier ))) ;) (expression_statement "uVar7 = FUN_00304f10(uVar7);" (assignment_expression "uVar7 = FUN_00304f10(uVar7)" identifier = (call_expression "FUN_00304f10(uVar7)" identifier (argument_list "(uVar7)" ( identifier )))) ;) (expression_statement "uVar5 = 0xffffffffffffffff;" (assignment_expression "uVar5 = 0xffffffffffffffff" identifier = number_literal) ;) (if_statement "if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }" if (parenthesized_expression "(uVar7 < 8)" ( (binary_expression "uVar7 < 8" identifier < number_literal) )) (compound_statement "{\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }" { (expression_statement "uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;" (assignment_expression "uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1" identifier = (binary_expression "(1L << ((char)uVar7 * '\b' & 0x3fU)) - 1" (parenthesized_expression "(1L << ((char)uVar7 * '\b' & 0x3fU))" ( (binary_expression "1L << ((char)uVar7 * '\b' & 0x3fU)" number_literal << (parenthesized_expression "((char)uVar7 * '\b' & 0x3fU)" ( (binary_expression "(char)uVar7 * '\b' & 0x3fU" (binary_expression "(char)uVar7 * '\b'" (cast_expression "(char)uVar7" ( (type_descriptor "char" primitive_type) ) identifier) * (char_literal "'\b'" ' escape_sequence ')) & number_literal) ))) )) - number_literal)) ;) })) (if_statement "if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }" if (parenthesized_expression "(((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1))" ( (binary_expression "((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)" (parenthesized_expression "((local_40[0] & uVar5) != 0)" ( (binary_expression "(local_40[0] & uVar5) != 0" (parenthesized_expression "(local_40[0] & uVar5)" ( (binary_expression "local_40[0] & uVar5" (subscript_expression "local_40[0]" identifier [ number_literal ]) & identifier) )) != number_literal) )) && (parenthesized_expression "(local_50 = local_50 + 1, local_40[0] < *param_1)" ( (comma_expression "local_50 = local_50 + 1, local_40[0] < *param_1" (assignment_expression "local_50 = local_50 + 1" identifier = (binary_expression "local_50 + 1" identifier + number_literal)) , (binary_expression "local_40[0] < *param_1" (subscript_expression "local_40[0]" identifier [ number_literal ]) < (pointer_expression "*param_1" * identifier))) ))) )) (compound_statement "{\n          *param_1 = local_40[0];\n        }" { (expression_statement "*param_1 = local_40[0];" (assignment_expression "*param_1 = local_40[0]" (pointer_expression "*param_1" * identifier) = (subscript_expression "local_40[0]" identifier [ number_literal ])) ;) })) })) (expression_statement "param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);" (assignment_expression "param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4)" identifier = (cast_expression "(uint *)((long)param_2 + (ulong)*param_2 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_2 + (ulong)*param_2 + 4)" ( (binary_expression "(long)param_2 + (ulong)*param_2 + 4" (binary_expression "(long)param_2 + (ulong)*param_2" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (binary_expression "(ulong)*param_2" (parenthesized_expression "(ulong)" ( identifier )) * identifier)) + number_literal) )))) ;) (expression_statement "lVar4 = lVar6;" (assignment_expression "lVar4 = lVar6" identifier = identifier) ;) }) while (parenthesized_expression "(*param_2 != 0)" ( (binary_expression "*param_2 != 0" (pointer_expression "*param_2" * identifier) != number_literal) )) ;) }))) (return_statement "return local_50;" return identifier ;) })))
(translation_unit (function_definition (sized_type_specifier long) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (parenthesized_expression ( (binary_expression LIT - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])))) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (binary_expression IDENT & LIT) | (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT) ))))) ;) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT >> LIT) ))) != IDENT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) | LIT)) ;) })))) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression IDENT + LIT) , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression LIT << (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * (char_literal ' escape_sequence ')) & LIT) ))) )) - LIT)) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) & IDENT) )) != LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression IDENT + LIT)) , (binary_expression (subscript_expression IDENT [ LIT ]) < (pointer_expression * IDENT))) ))) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (subscript_expression IDENT [ LIT ])) ;) })) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (binary_expression (parenthesized_expression ( IDENT )) * IDENT)) + LIT) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != LIT) )) ;) }))) (return_statement return IDENT ;) })))
(function_definition "long FUN_00305a10(ulong *param_1,uint *param_2)\n\n{\n  ushort uVar1;\n  uint uVar2;\n  undefined8 uVar3;\n  long lVar4;\n  ulong uVar5;\n  long lVar6;\n  uint uVar7;\n  long local_50;\n  ulong local_40 [2];\n  \n  if (*param_2 == 0) {\n    local_50 = 0;\n  }\n  else {\n    uVar3 = 0;\n    uVar2 = 0;\n    local_50 = 0;\n    lVar4 = 0;\n    do {\n      lVar6 = lVar4;\n      if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = FUN_00304f10(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }\n      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);\n      lVar4 = lVar6;\n    } while (*param_2 != 0);\n  }\n  return local_50;\n}" (sized_type_specifier "long" (long "long")) (function_declarator "FUN_00305a10(ulong *param_1,uint *param_2)" (identifier "FUN_00305a10") (parameter_list "(ulong *param_1,uint *param_2)" (( "(") (parameter_declaration "ulong *param_1" (type_identifier "ulong") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "uint *param_2" (type_identifier "uint") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) () ")"))) (compound_statement "{\n  ushort uVar1;\n  uint uVar2;\n  undefined8 uVar3;\n  long lVar4;\n  ulong uVar5;\n  long lVar6;\n  uint uVar7;\n  long local_50;\n  ulong local_40 [2];\n  \n  if (*param_2 == 0) {\n    local_50 = 0;\n  }\n  else {\n    uVar3 = 0;\n    uVar2 = 0;\n    local_50 = 0;\n    lVar4 = 0;\n    do {\n      lVar6 = lVar4;\n      if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = FUN_00304f10(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }\n      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);\n      lVar4 = lVar6;\n    } while (*param_2 != 0);\n  }\n  return local_50;\n}" ({ "{") (declaration "ushort uVar1;" (type_identifier "ushort") (identifier "uVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "undefined8 uVar3;" (type_identifier "undefined8") (identifier "uVar3") (; ";")) (declaration "long lVar4;" (sized_type_specifier "long" (long "long")) (identifier "lVar4") (; ";")) (declaration "ulong uVar5;" (type_identifier "ulong") (identifier "uVar5") (; ";")) (declaration "long lVar6;" (sized_type_specifier "long" (long "long")) (identifier "lVar6") (; ";")) (declaration "uint uVar7;" (type_identifier "uint") (identifier "uVar7") (; ";")) (declaration "long local_50;" (sized_type_specifier "long" (long "long")) (identifier "local_50") (; ";")) (declaration "ulong local_40 [2];" (type_identifier "ulong") (array_declarator "local_40 [2]" (identifier "local_40") ([ "[") (number_literal "2") (] "]")) (; ";")) (if_statement "if (*param_2 == 0) {\n    local_50 = 0;\n  }\n  else {\n    uVar3 = 0;\n    uVar2 = 0;\n    local_50 = 0;\n    lVar4 = 0;\n    do {\n      lVar6 = lVar4;\n      if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = FUN_00304f10(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }\n      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);\n      lVar4 = lVar6;\n    } while (*param_2 != 0);\n  }" (if "if") (parenthesized_expression "(*param_2 == 0)" (( "(") (binary_expression "*param_2 == 0" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    local_50 = 0;\n  }" ({ "{") (expression_statement "local_50 = 0;" (assignment_expression "local_50 = 0" (identifier "local_50") (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n    uVar3 = 0;\n    uVar2 = 0;\n    local_50 = 0;\n    lVar4 = 0;\n    do {\n      lVar6 = lVar4;\n      if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = FUN_00304f10(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }\n      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);\n      lVar4 = lVar6;\n    } while (*param_2 != 0);\n  }" (else "else") (compound_statement "{\n    uVar3 = 0;\n    uVar2 = 0;\n    local_50 = 0;\n    lVar4 = 0;\n    do {\n      lVar6 = lVar4;\n      if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = FUN_00304f10(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }\n      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);\n      lVar4 = lVar6;\n    } while (*param_2 != 0);\n  }" ({ "{") (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" (identifier "uVar3") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" (identifier "uVar2") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_50 = 0;" (assignment_expression "local_50 = 0" (identifier "local_50") (= "=") (number_literal "0")) (; ";")) (expression_statement "lVar4 = 0;" (assignment_expression "lVar4 = 0" (identifier "lVar4") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n      lVar6 = lVar4;\n      if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = FUN_00304f10(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }\n      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);\n      lVar4 = lVar6;\n    } while (*param_2 != 0);" (do "do") (compound_statement "{\n      lVar6 = lVar4;\n      if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = FUN_00304f10(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }\n      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);\n      lVar4 = lVar6;\n    }" ({ "{") (expression_statement "lVar6 = lVar4;" (assignment_expression "lVar6 = lVar4" (identifier "lVar6") (= "=") (identifier "lVar4")) (; ";")) (if_statement "if (param_2[1] != 0) {\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = FUN_00304f10(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }" (if "if") (parenthesized_expression "(param_2[1] != 0)" (( "(") (binary_expression "param_2[1] != 0" (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        uVar7 = uVar2 & 0xff;\n        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);\n        if (lVar6 != lVar4) {\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }\n        FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);\n        uVar7 = FUN_00304f10(uVar7);\n        uVar5 = 0xffffffffffffffff;\n        if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }\n        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }\n      }" ({ "{") (expression_statement "uVar7 = uVar2 & 0xff;" (assignment_expression "uVar7 = uVar2 & 0xff" (identifier "uVar7") (= "=") (binary_expression "uVar2 & 0xff" (identifier "uVar2") (& "&") (number_literal "0xff"))) (; ";")) (expression_statement "lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);" (assignment_expression "lVar6 = (long)param_2 + (4 - (long)(int)param_2[1])" (identifier "lVar6") (= "=") (binary_expression "(long)param_2 + (4 - (long)(int)param_2[1])" (cast_expression "(long)param_2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_2")) (+ "+") (parenthesized_expression "(4 - (long)(int)param_2[1])" (( "(") (binary_expression "4 - (long)(int)param_2[1]" (number_literal "4") (- "-") (cast_expression "(long)(int)param_2[1]" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (cast_expression "(int)param_2[1]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]"))))) () ")")))) (; ";")) (if_statement "if (lVar6 != lVar4) {\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }" (if "if") (parenthesized_expression "(lVar6 != lVar4)" (( "(") (binary_expression "lVar6 != lVar4" (identifier "lVar6") (!= "!=") (identifier "lVar4")) () ")")) (compound_statement "{\n          uVar2 = FUN_003051e0(lVar6);\n          if (uVar2 == 0xff) {\n            return -1;\n          }\n          uVar7 = uVar2 & 0xff;\n          uVar3 = FUN_00304f70(uVar7,param_1);\n          uVar1 = (ushort)param_1[4];\n          if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }\n        }" ({ "{") (expression_statement "uVar2 = FUN_003051e0(lVar6);" (assignment_expression "uVar2 = FUN_003051e0(lVar6)" (identifier "uVar2") (= "=") (call_expression "FUN_003051e0(lVar6)" (identifier "FUN_003051e0") (argument_list "(lVar6)" (( "(") (identifier "lVar6") () ")")))) (; ";")) (if_statement "if (uVar2 == 0xff) {\n            return -1;\n          }" (if "if") (parenthesized_expression "(uVar2 == 0xff)" (( "(") (binary_expression "uVar2 == 0xff" (identifier "uVar2") (== "==") (number_literal "0xff")) () ")")) (compound_statement "{\n            return -1;\n          }" ({ "{") (return_statement "return -1;" (return "return") (number_literal "-1") (; ";")) (} "}"))) (expression_statement "uVar7 = uVar2 & 0xff;" (assignment_expression "uVar7 = uVar2 & 0xff" (identifier "uVar7") (= "=") (binary_expression "uVar2 & 0xff" (identifier "uVar2") (& "&") (number_literal "0xff"))) (; ";")) (expression_statement "uVar3 = FUN_00304f70(uVar7,param_1);" (assignment_expression "uVar3 = FUN_00304f70(uVar7,param_1)" (identifier "uVar3") (= "=") (call_expression "FUN_00304f70(uVar7,param_1)" (identifier "FUN_00304f70") (argument_list "(uVar7,param_1)" (( "(") (identifier "uVar7") (, ",") (identifier "param_1") () ")")))) (; ";")) (expression_statement "uVar1 = (ushort)param_1[4];" (assignment_expression "uVar1 = (ushort)param_1[4]" (identifier "uVar1") (= "=") (cast_expression "(ushort)param_1[4]" (( "(") (type_descriptor "ushort" (type_identifier "ushort")) () ")") (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")))) (; ";")) (if_statement "if ((uVar1 & 0x7f8) == 0x7f8) {\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }\n          else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }" (if "if") (parenthesized_expression "((uVar1 & 0x7f8) == 0x7f8)" (( "(") (binary_expression "(uVar1 & 0x7f8) == 0x7f8" (parenthesized_expression "(uVar1 & 0x7f8)" (( "(") (binary_expression "uVar1 & 0x7f8" (identifier "uVar1") (& "&") (number_literal "0x7f8")) () ")")) (== "==") (number_literal "0x7f8")) () ")")) (compound_statement "{\n            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);\n          }" ({ "{") (expression_statement "*(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);" (assignment_expression "*(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3)" (pointer_expression "*(ushort *)(param_1 + 4)" (* "*") (cast_expression "(ushort *)(param_1 + 4)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 4)" (( "(") (binary_expression "param_1 + 4" (identifier "param_1") (+ "+") (number_literal "4")) () ")")))) (= "=") (binary_expression "uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3)" (binary_expression "uVar1 & 0xf807" (identifier "uVar1") (& "&") (number_literal "0xf807")) (| "|") (call_expression "(ushort)((uVar2 & 0xff) << 3)" (parenthesized_expression "(ushort)" (( "(") (identifier "ushort") () ")")) (argument_list "((uVar2 & 0xff) << 3)" (( "(") (binary_expression "(uVar2 & 0xff) << 3" (parenthesized_expression "(uVar2 & 0xff)" (( "(") (binary_expression "uVar2 & 0xff" (identifier "uVar2") (& "&") (number_literal "0xff")) () ")")) (<< "<<") (number_literal "3")) () ")"))))) (; ";")) (} "}")) (else_clause "else if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }" (else "else") (if_statement "if ((byte)(uVar1 >> 3) != uVar2) {\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }" (if "if") (parenthesized_expression "((byte)(uVar1 >> 3) != uVar2)" (( "(") (binary_expression "(byte)(uVar1 >> 3) != uVar2" (call_expression "(byte)(uVar1 >> 3)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(uVar1 >> 3)" (( "(") (binary_expression "uVar1 >> 3" (identifier "uVar1") (>> ">>") (number_literal "3")) () ")"))) (!= "!=") (identifier "uVar2")) () ")")) (compound_statement "{\n            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;\n          }" ({ "{") (expression_statement "*(byte *)(param_1 + 4) = (byte)param_1[4] | 4;" (assignment_expression "*(byte *)(param_1 + 4) = (byte)param_1[4] | 4" (pointer_expression "*(byte *)(param_1 + 4)" (* "*") (cast_expression "(byte *)(param_1 + 4)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 4)" (( "(") (binary_expression "param_1 + 4" (identifier "param_1") (+ "+") (number_literal "4")) () ")")))) (= "=") (binary_expression "(byte)param_1[4] | 4" (cast_expression "(byte)param_1[4]" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]"))) (| "|") (number_literal "4"))) (; ";")) (} "}"))))) (} "}"))) (expression_statement "FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);" (call_expression "FUN_00305010(uVar7,uVar3,param_2 + 2,local_40)" (identifier "FUN_00305010") (argument_list "(uVar7,uVar3,param_2 + 2,local_40)" (( "(") (identifier "uVar7") (, ",") (identifier "uVar3") (, ",") (binary_expression "param_2 + 2" (identifier "param_2") (+ "+") (number_literal "2")) (, ",") (identifier "local_40") () ")"))) (; ";")) (expression_statement "uVar7 = FUN_00304f10(uVar7);" (assignment_expression "uVar7 = FUN_00304f10(uVar7)" (identifier "uVar7") (= "=") (call_expression "FUN_00304f10(uVar7)" (identifier "FUN_00304f10") (argument_list "(uVar7)" (( "(") (identifier "uVar7") () ")")))) (; ";")) (expression_statement "uVar5 = 0xffffffffffffffff;" (assignment_expression "uVar5 = 0xffffffffffffffff" (identifier "uVar5") (= "=") (number_literal "0xffffffffffffffff")) (; ";")) (if_statement "if (uVar7 < 8) {\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }" (if "if") (parenthesized_expression "(uVar7 < 8)" (( "(") (binary_expression "uVar7 < 8" (identifier "uVar7") (< "<") (number_literal "8")) () ")")) (compound_statement "{\n          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;\n        }" ({ "{") (expression_statement "uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;" (assignment_expression "uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1" (identifier "uVar5") (= "=") (binary_expression "(1L << ((char)uVar7 * '\b' & 0x3fU)) - 1" (parenthesized_expression "(1L << ((char)uVar7 * '\b' & 0x3fU))" (( "(") (binary_expression "1L << ((char)uVar7 * '\b' & 0x3fU)" (number_literal "1L") (<< "<<") (parenthesized_expression "((char)uVar7 * '\b' & 0x3fU)" (( "(") (binary_expression "(char)uVar7 * '\b' & 0x3fU" (binary_expression "(char)uVar7 * '\b'" (cast_expression "(char)uVar7" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "uVar7")) (* "*") (char_literal "'\b'" (' "'") (escape_sequence "\b") (' "'"))) (& "&") (number_literal "0x3fU")) () ")"))) () ")")) (- "-") (number_literal "1"))) (; ";")) (} "}"))) (if_statement "if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {\n          *param_1 = local_40[0];\n        }" (if "if") (parenthesized_expression "(((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1))" (( "(") (binary_expression "((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)" (parenthesized_expression "((local_40[0] & uVar5) != 0)" (( "(") (binary_expression "(local_40[0] & uVar5) != 0" (parenthesized_expression "(local_40[0] & uVar5)" (( "(") (binary_expression "local_40[0] & uVar5" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (& "&") (identifier "uVar5")) () ")")) (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(local_50 = local_50 + 1, local_40[0] < *param_1)" (( "(") (comma_expression "local_50 = local_50 + 1, local_40[0] < *param_1" (assignment_expression "local_50 = local_50 + 1" (identifier "local_50") (= "=") (binary_expression "local_50 + 1" (identifier "local_50") (+ "+") (number_literal "1"))) (, ",") (binary_expression "local_40[0] < *param_1" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (< "<") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) () ")"))) () ")")) (compound_statement "{\n          *param_1 = local_40[0];\n        }" ({ "{") (expression_statement "*param_1 = local_40[0];" (assignment_expression "*param_1 = local_40[0]" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);" (assignment_expression "param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4)" (identifier "param_2") (= "=") (cast_expression "(uint *)((long)param_2 + (ulong)*param_2 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_2 + (ulong)*param_2 + 4)" (( "(") (binary_expression "(long)param_2 + (ulong)*param_2 + 4" (binary_expression "(long)param_2 + (ulong)*param_2" (cast_expression "(long)param_2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_2")) (+ "+") (binary_expression "(ulong)*param_2" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (* "*") (identifier "param_2"))) (+ "+") (number_literal "4")) () ")")))) (; ";")) (expression_statement "lVar4 = lVar6;" (assignment_expression "lVar4 = lVar6" (identifier "lVar4") (= "=") (identifier "lVar6")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(*param_2 != 0)" (( "(") (binary_expression "*param_2 != 0" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (!= "!=") (number_literal "0")) () ")")) (; ";")) (} "}")))) (return_statement "return local_50;" (return "return") (identifier "local_50") (; ";")) (} "}")))

long function_1(type_1 *var_7,type_2 *var_9)

{
  type_3 var_6;
  type_2 var_1;
  type_4 uVar3;
  long var_3;
  type_1 var_12;
  long var_2;
  type_2 var_11;
  long var_13;
  type_1 local_40 [2];
  
  if (*var_9 == 0) {
    var_13 = 0;
  }
  else {
    uVar3 = 0;
    var_1 = 0;
    var_13 = 0;
    var_3 = 0;
    do {
      var_2 = var_3;
      if (var_9[1] != 0) {
        var_11 = var_1 & 0xff;
        var_2 = (long)var_9 + (4 - (long)(int)var_9[1]);
        if (var_2 != var_3) {
          var_1 = var_4(var_2);
          if (var_1 == 0xff) {
            return -1;
          }
          var_11 = var_1 & 0xff;
          uVar3 = var_5(var_11,var_7);
          var_6 = (type_3)var_7[4];
          if ((var_6 & 0x7f8) == 0x7f8) {
            *(type_3 *)(var_7 + 4) = var_6 & 0xf807 | (type_3)((var_1 & 0xff) << 3);
          }
          else if ((type_5)(var_6 >> 3) != var_1) {
            *(type_5 *)(var_7 + 4) = (type_5)var_7[4] | 4;
          }
        }
        var_8(var_11,uVar3,var_9 + 2,local_40);
        var_11 = var_10(var_11);
        var_12 = 0xffffffffffffffff;
        if (var_11 < 8) {
          var_12 = (1L << ((char)var_11 * '\b' & 0x3fU)) - 1;
        }
        if (((local_40[0] & var_12) != 0) && (var_13 = var_13 + 1, local_40[0] < *var_7)) {
          *var_7 = local_40[0];
        }
      }
      var_9 = (type_2 *)((long)var_9 + (type_1)*var_9 + 4);
      var_3 = var_2;
    } while (*var_9 != 0);
  }
  return var_13;
}


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

long MASKED(ulong *param_1,uint *param_2)

{
  ushort uVar1;
  uint uVar2;
  undefined8 uVar3;
  long lVar4;
  ulong uVar5;
  long lVar6;
  uint uVar7;
  long local_50;
  ulong local_40 [2];
  
  if (*param_2 == 0) {
    local_50 = 0;
  }
  else {
    uVar3 = 0;
    uVar2 = 0;
    local_50 = 0;
    lVar4 = 0;
    do {
      lVar6 = lVar4;
      if (param_2[1] != 0) {
        uVar7 = uVar2 & 0xff;
        lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);
        if (lVar6 != lVar4) {
          uVar2 = FUN_003051e0(lVar6);
          if (uVar2 == 0xff) {
            return -1;
          }
          uVar7 = uVar2 & 0xff;
          uVar3 = FUN_00304f70(uVar7,param_1);
          uVar1 = (ushort)param_1[4];
          if ((uVar1 & 0x7f8) == 0x7f8) {
            *(ushort *)(param_1 + 4) = uVar1 & 0xf807 | (ushort)((uVar2 & 0xff) << 3);
          }
          else if ((byte)(uVar1 >> 3) != uVar2) {
            *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;
          }
        }
        FUN_00305010(uVar7,uVar3,param_2 + 2,local_40);
        uVar7 = FUN_00304f10(uVar7);
        uVar5 = 0xffffffffffffffff;
        if (uVar7 < 8) {
          uVar5 = (1L << ((char)uVar7 * '\b' & 0x3fU)) - 1;
        }
        if (((local_40[0] & uVar5) != 0) && (local_50 = local_50 + 1, local_40[0] < *param_1)) {
          *param_1 = local_40[0];
        }
      }
      param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);
      lVar4 = lVar6;
    } while (*param_2 != 0);
  }
  return local_50;
}

