
/* DWARF original prototype: dwarf_vma get_encoded_value(uchar * * pdata, int encoding,
   dwarf_section * section, uchar * end, dwarf_section * section) */

dwarf_vma get_encoded_value(uchar **pdata,int encoding,dwarf_section *section,uchar *end,
                           dwarf_section *section_1)

{
  uchar *field;
  uint uVar1;
  uchar *puVar2;
  uint size;
  char *pcVar3;
  
  uVar1 = (encoding & 7U) - 2;
  field = *pdata;
  size = eh_addr_size;
  if (uVar1 < 3) {
    size = *(uint *)(CSWTCH_1510 + (ulong)uVar1 * 4);
  }
  if ((dwarf_section *)(field + size) < section_1) {
    if (8 < size) {
      pcVar3 = (char *)dcgettext(0,"Encoded size of %d is too large to read\n",5);
      warn(pcVar3,(ulong)size);
      *pdata = (uchar *)section_1;
      return 0;
    }
    if (size != 0) {
      if ((encoding & 8U) == 0) {
        puVar2 = (uchar *)(*byte_get)(field,size);
      }
      else {
        puVar2 = (uchar *)byte_get_signed(field,size);
      }
      if ((encoding & 0x70U) == 0x10) {
        puVar2 = field + (long)(puVar2 + (*(long *)end - (long)section->uncompressed_name));
      }
      *pdata = field + size;
      return (dwarf_vma)puVar2;
    }
    pcVar3 = "Encoded size of 0 is too small to read\n";
  }
  else {
    pcVar3 = "Encoded value extends past end of section\n";
  }
  pcVar3 = (char *)dcgettext(0,pcVar3,5);
  warn(pcVar3);
  *pdata = (uchar *)section_1;
  return 0;
}



long FUN_00110520(ulong *param_1,uint param_2,long *param_3,long *param_4,ulong param_5)

{
  ulong uVar1;
  uint uVar2;
  long lVar3;
  undefined8 uVar4;
  uint uVar5;
  char *pcVar6;
  
  uVar2 = (param_2 & 7) - 2;
  uVar1 = *param_1;
  uVar5 = DAT_00159de4;
  if (uVar2 < 3) {
    uVar5 = *(uint *)(&DAT_00144eb0 + (ulong)uVar2 * 4);
  }
  if (uVar5 + uVar1 < param_5) {
    if (8 < uVar5) {
      uVar4 = dcgettext(0,"Encoded size of %d is too large to read\n",5);
      warn(uVar4,uVar5);
      *param_1 = param_5;
      return 0;
    }
    if (uVar5 != 0) {
      if ((param_2 & 8) == 0) {
        lVar3 = (*DAT_00159e20)();
      }
      else {
        lVar3 = FUN_00137cb0(uVar1,uVar5);
      }
      if ((param_2 & 0x70) == 0x10) {
        lVar3 = lVar3 + (uVar1 - *param_3) + *param_4;
      }
      *param_1 = uVar5 + uVar1;
      return lVar3;
    }
    pcVar6 = "Encoded size of 0 is too small to read\n";
  }
  else {
    pcVar6 = "Encoded value extends past end of section\n";
  }
  uVar4 = dcgettext(0,pcVar6,5);
  warn(uVar4);
  *param_1 = param_5;
  return 0;
}


PUSH R15
MOV EAX,ESI
MOV R15,RDX
PUSH R14
AND EAX,0x7
MOV R14,R8
PUSH R13
SUB EAX,0x2
MOV R13,RDI
PUSH R12
MOV R12D,ESI
PUSH RBP
PUSH RBX
SUB RSP,0x18
MOV RDX,qword ptr [RDI]
MOV EBX,dword ptr [0x00159de4]
CMP EAX,0x2
JA 0x0011055a
LEA RSI,[0x144eb0]
MOV EBX,dword ptr [RSI + RAX*0x4]
MOV EBP,EBX
ADD RBP,RDX
CMP RBP,R14
JNC 0x001105c0
CMP EBX,0x8
JA 0x00110610
TEST EBX,EBX
JZ 0x00110648
MOV qword ptr [RSP + 0x8],RCX
MOV ESI,EBX
MOV RDI,RDX
MOV qword ptr [RSP],RDX
TEST R12B,0x8
JNZ 0x001105f8
CALL qword ptr [0x00159e20]
MOV RCX,qword ptr [RSP + 0x8]
MOV RDX,qword ptr [RSP]
AND R12D,0x70
CMP R12D,0x10
JNZ 0x001105ab
SUB RDX,qword ptr [R15]
ADD RDX,qword ptr [RCX]
ADD RAX,RDX
MOV qword ptr [R13],RBP
ADD RSP,0x18
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV EDX,0x5
LEA RSI,[0x13e4c8]
XOR EDI,EDI
CALL 0x00107230
MOV RDI,RAX
XOR EAX,EAX
CALL 0x001379e0
MOV qword ptr [R13],R14
ADD RSP,0x18
XOR EAX,EAX
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
CALL 0x00137cb0
MOV RDX,qword ptr [RSP]
MOV RCX,qword ptr [RSP + 0x8]
JMP 0x00110598
MOV EDX,0x5
LEA RSI,[0x13e4f8]
XOR EDI,EDI
CALL 0x00107230
MOV ESI,EBX
MOV RDI,RAX
XOR EAX,EAX
CALL 0x001379e0
MOV qword ptr [R13],R14
ADD RSP,0x18
XOR EAX,EAX
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV EDX,0x5
LEA RSI,[0x13e528]
JMP 0x001105cc
(translation_unit "long FUN_00110520(ulong *param_1,uint param_2,long *param_3,long *param_4,ulong param_5)\n\n{\n  ulong uVar1;\n  uint uVar2;\n  long lVar3;\n  undefined8 uVar4;\n  uint uVar5;\n  char *pcVar6;\n  \n  uVar2 = (param_2 & 7) - 2;\n  uVar1 = *param_1;\n  uVar5 = DAT_00159de4;\n  if (uVar2 < 3) {\n    uVar5 = *(uint *)(&DAT_00144eb0 + (ulong)uVar2 * 4);\n  }\n  if (uVar5 + uVar1 < param_5) {\n    if (8 < uVar5) {\n      uVar4 = dcgettext(0,"Encoded size of %d is too large to read\n",5);\n      warn(uVar4,uVar5);\n      *param_1 = param_5;\n      return 0;\n    }\n    if (uVar5 != 0) {\n      if ((param_2 & 8) == 0) {\n        lVar3 = (*DAT_00159e20)();\n      }\n      else {\n        lVar3 = FUN_00137cb0(uVar1,uVar5);\n      }\n      if ((param_2 & 0x70) == 0x10) {\n        lVar3 = lVar3 + (uVar1 - *param_3) + *param_4;\n      }\n      *param_1 = uVar5 + uVar1;\n      return lVar3;\n    }\n    pcVar6 = "Encoded size of 0 is too small to read\n";\n  }\n  else {\n    pcVar6 = "Encoded value extends past end of section\n";\n  }\n  uVar4 = dcgettext(0,pcVar6,5);\n  warn(uVar4);\n  *param_1 = param_5;\n  return 0;\n}\n\n" (function_definition "long FUN_00110520(ulong *param_1,uint param_2,long *param_3,long *param_4,ulong param_5)\n\n{\n  ulong uVar1;\n  uint uVar2;\n  long lVar3;\n  undefined8 uVar4;\n  uint uVar5;\n  char *pcVar6;\n  \n  uVar2 = (param_2 & 7) - 2;\n  uVar1 = *param_1;\n  uVar5 = DAT_00159de4;\n  if (uVar2 < 3) {\n    uVar5 = *(uint *)(&DAT_00144eb0 + (ulong)uVar2 * 4);\n  }\n  if (uVar5 + uVar1 < param_5) {\n    if (8 < uVar5) {\n      uVar4 = dcgettext(0,"Encoded size of %d is too large to read\n",5);\n      warn(uVar4,uVar5);\n      *param_1 = param_5;\n      return 0;\n    }\n    if (uVar5 != 0) {\n      if ((param_2 & 8) == 0) {\n        lVar3 = (*DAT_00159e20)();\n      }\n      else {\n        lVar3 = FUN_00137cb0(uVar1,uVar5);\n      }\n      if ((param_2 & 0x70) == 0x10) {\n        lVar3 = lVar3 + (uVar1 - *param_3) + *param_4;\n      }\n      *param_1 = uVar5 + uVar1;\n      return lVar3;\n    }\n    pcVar6 = "Encoded size of 0 is too small to read\n";\n  }\n  else {\n    pcVar6 = "Encoded value extends past end of section\n";\n  }\n  uVar4 = dcgettext(0,pcVar6,5);\n  warn(uVar4);\n  *param_1 = param_5;\n  return 0;\n}" (sized_type_specifier "long" long) (function_declarator "FUN_00110520(ulong *param_1,uint param_2,long *param_3,long *param_4,ulong param_5)" identifier (parameter_list "(ulong *param_1,uint param_2,long *param_3,long *param_4,ulong param_5)" ( (parameter_declaration "ulong *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "long *param_3" (sized_type_specifier "long" long) (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "long *param_4" (sized_type_specifier "long" long) (pointer_declarator "*param_4" * identifier)) , (parameter_declaration "ulong param_5" type_identifier identifier) ))) (compound_statement "{\n  ulong uVar1;\n  uint uVar2;\n  long lVar3;\n  undefined8 uVar4;\n  uint uVar5;\n  char *pcVar6;\n  \n  uVar2 = (param_2 & 7) - 2;\n  uVar1 = *param_1;\n  uVar5 = DAT_00159de4;\n  if (uVar2 < 3) {\n    uVar5 = *(uint *)(&DAT_00144eb0 + (ulong)uVar2 * 4);\n  }\n  if (uVar5 + uVar1 < param_5) {\n    if (8 < uVar5) {\n      uVar4 = dcgettext(0,"Encoded size of %d is too large to read\n",5);\n      warn(uVar4,uVar5);\n      *param_1 = param_5;\n      return 0;\n    }\n    if (uVar5 != 0) {\n      if ((param_2 & 8) == 0) {\n        lVar3 = (*DAT_00159e20)();\n      }\n      else {\n        lVar3 = FUN_00137cb0(uVar1,uVar5);\n      }\n      if ((param_2 & 0x70) == 0x10) {\n        lVar3 = lVar3 + (uVar1 - *param_3) + *param_4;\n      }\n      *param_1 = uVar5 + uVar1;\n      return lVar3;\n    }\n    pcVar6 = "Encoded size of 0 is too small to read\n";\n  }\n  else {\n    pcVar6 = "Encoded value extends past end of section\n";\n  }\n  uVar4 = dcgettext(0,pcVar6,5);\n  warn(uVar4);\n  *param_1 = param_5;\n  return 0;\n}" { (declaration "ulong uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "char *pcVar6;" primitive_type (pointer_declarator "*pcVar6" * identifier) ;) (expression_statement "uVar2 = (param_2 & 7) - 2;" (assignment_expression "uVar2 = (param_2 & 7) - 2" identifier = (binary_expression "(param_2 & 7) - 2" (parenthesized_expression "(param_2 & 7)" ( (binary_expression "param_2 & 7" identifier & number_literal) )) - number_literal)) ;) (expression_statement "uVar1 = *param_1;" (assignment_expression "uVar1 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "uVar5 = DAT_00159de4;" (assignment_expression "uVar5 = DAT_00159de4" identifier = identifier) ;) (if_statement "if (uVar2 < 3) {\n    uVar5 = *(uint *)(&DAT_00144eb0 + (ulong)uVar2 * 4);\n  }" if (parenthesized_expression "(uVar2 < 3)" ( (binary_expression "uVar2 < 3" identifier < number_literal) )) (compound_statement "{\n    uVar5 = *(uint *)(&DAT_00144eb0 + (ulong)uVar2 * 4);\n  }" { (expression_statement "uVar5 = *(uint *)(&DAT_00144eb0 + (ulong)uVar2 * 4);" (assignment_expression "uVar5 = *(uint *)(&DAT_00144eb0 + (ulong)uVar2 * 4)" identifier = (pointer_expression "*(uint *)(&DAT_00144eb0 + (ulong)uVar2 * 4)" * (cast_expression "(uint *)(&DAT_00144eb0 + (ulong)uVar2 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_00144eb0 + (ulong)uVar2 * 4)" ( (binary_expression "&DAT_00144eb0 + (ulong)uVar2 * 4" (pointer_expression "&DAT_00144eb0" & identifier) + (binary_expression "(ulong)uVar2 * 4" (cast_expression "(ulong)uVar2" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) ))))) ;) })) (if_statement "if (uVar5 + uVar1 < param_5) {\n    if (8 < uVar5) {\n      uVar4 = dcgettext(0,"Encoded size of %d is too large to read\n",5);\n      warn(uVar4,uVar5);\n      *param_1 = param_5;\n      return 0;\n    }\n    if (uVar5 != 0) {\n      if ((param_2 & 8) == 0) {\n        lVar3 = (*DAT_00159e20)();\n      }\n      else {\n        lVar3 = FUN_00137cb0(uVar1,uVar5);\n      }\n      if ((param_2 & 0x70) == 0x10) {\n        lVar3 = lVar3 + (uVar1 - *param_3) + *param_4;\n      }\n      *param_1 = uVar5 + uVar1;\n      return lVar3;\n    }\n    pcVar6 = "Encoded size of 0 is too small to read\n";\n  }\n  else {\n    pcVar6 = "Encoded value extends past end of section\n";\n  }" if (parenthesized_expression "(uVar5 + uVar1 < param_5)" ( (binary_expression "uVar5 + uVar1 < param_5" (binary_expression "uVar5 + uVar1" identifier + identifier) < identifier) )) (compound_statement "{\n    if (8 < uVar5) {\n      uVar4 = dcgettext(0,"Encoded size of %d is too large to read\n",5);\n      warn(uVar4,uVar5);\n      *param_1 = param_5;\n      return 0;\n    }\n    if (uVar5 != 0) {\n      if ((param_2 & 8) == 0) {\n        lVar3 = (*DAT_00159e20)();\n      }\n      else {\n        lVar3 = FUN_00137cb0(uVar1,uVar5);\n      }\n      if ((param_2 & 0x70) == 0x10) {\n        lVar3 = lVar3 + (uVar1 - *param_3) + *param_4;\n      }\n      *param_1 = uVar5 + uVar1;\n      return lVar3;\n    }\n    pcVar6 = "Encoded size of 0 is too small to read\n";\n  }" { (if_statement "if (8 < uVar5) {\n      uVar4 = dcgettext(0,"Encoded size of %d is too large to read\n",5);\n      warn(uVar4,uVar5);\n      *param_1 = param_5;\n      return 0;\n    }" if (parenthesized_expression "(8 < uVar5)" ( (binary_expression "8 < uVar5" number_literal < identifier) )) (compound_statement "{\n      uVar4 = dcgettext(0,"Encoded size of %d is too large to read\n",5);\n      warn(uVar4,uVar5);\n      *param_1 = param_5;\n      return 0;\n    }" { (expression_statement "uVar4 = dcgettext(0,"Encoded size of %d is too large to read\n",5);" (assignment_expression "uVar4 = dcgettext(0,"Encoded size of %d is too large to read\n",5)" identifier = (call_expression "dcgettext(0,"Encoded size of %d is too large to read\n",5)" identifier (argument_list "(0,"Encoded size of %d is too large to read\n",5)" ( number_literal , (string_literal ""Encoded size of %d is too large to read\n"" " string_content escape_sequence ") , number_literal )))) ;) (expression_statement "warn(uVar4,uVar5);" (call_expression "warn(uVar4,uVar5)" identifier (argument_list "(uVar4,uVar5)" ( identifier , identifier ))) ;) (expression_statement "*param_1 = param_5;" (assignment_expression "*param_1 = param_5" (pointer_expression "*param_1" * identifier) = identifier) ;) (return_statement "return 0;" return number_literal ;) })) (if_statement "if (uVar5 != 0) {\n      if ((param_2 & 8) == 0) {\n        lVar3 = (*DAT_00159e20)();\n      }\n      else {\n        lVar3 = FUN_00137cb0(uVar1,uVar5);\n      }\n      if ((param_2 & 0x70) == 0x10) {\n        lVar3 = lVar3 + (uVar1 - *param_3) + *param_4;\n      }\n      *param_1 = uVar5 + uVar1;\n      return lVar3;\n    }" if (parenthesized_expression "(uVar5 != 0)" ( (binary_expression "uVar5 != 0" identifier != number_literal) )) (compound_statement "{\n      if ((param_2 & 8) == 0) {\n        lVar3 = (*DAT_00159e20)();\n      }\n      else {\n        lVar3 = FUN_00137cb0(uVar1,uVar5);\n      }\n      if ((param_2 & 0x70) == 0x10) {\n        lVar3 = lVar3 + (uVar1 - *param_3) + *param_4;\n      }\n      *param_1 = uVar5 + uVar1;\n      return lVar3;\n    }" { (if_statement "if ((param_2 & 8) == 0) {\n        lVar3 = (*DAT_00159e20)();\n      }\n      else {\n        lVar3 = FUN_00137cb0(uVar1,uVar5);\n      }" if (parenthesized_expression "((param_2 & 8) == 0)" ( (binary_expression "(param_2 & 8) == 0" (parenthesized_expression "(param_2 & 8)" ( (binary_expression "param_2 & 8" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        lVar3 = (*DAT_00159e20)();\n      }" { (expression_statement "lVar3 = (*DAT_00159e20)();" (assignment_expression "lVar3 = (*DAT_00159e20)()" identifier = (call_expression "(*DAT_00159e20)()" (parenthesized_expression "(*DAT_00159e20)" ( (pointer_expression "*DAT_00159e20" * identifier) )) (argument_list "()" ( )))) ;) }) (else_clause "else {\n        lVar3 = FUN_00137cb0(uVar1,uVar5);\n      }" else (compound_statement "{\n        lVar3 = FUN_00137cb0(uVar1,uVar5);\n      }" { (expression_statement "lVar3 = FUN_00137cb0(uVar1,uVar5);" (assignment_expression "lVar3 = FUN_00137cb0(uVar1,uVar5)" identifier = (call_expression "FUN_00137cb0(uVar1,uVar5)" identifier (argument_list "(uVar1,uVar5)" ( identifier , identifier )))) ;) }))) (if_statement "if ((param_2 & 0x70) == 0x10) {\n        lVar3 = lVar3 + (uVar1 - *param_3) + *param_4;\n      }" if (parenthesized_expression "((param_2 & 0x70) == 0x10)" ( (binary_expression "(param_2 & 0x70) == 0x10" (parenthesized_expression "(param_2 & 0x70)" ( (binary_expression "param_2 & 0x70" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        lVar3 = lVar3 + (uVar1 - *param_3) + *param_4;\n      }" { (expression_statement "lVar3 = lVar3 + (uVar1 - *param_3) + *param_4;" (assignment_expression "lVar3 = lVar3 + (uVar1 - *param_3) + *param_4" identifier = (binary_expression "lVar3 + (uVar1 - *param_3) + *param_4" (binary_expression "lVar3 + (uVar1 - *param_3)" identifier + (parenthesized_expression "(uVar1 - *param_3)" ( (binary_expression "uVar1 - *param_3" identifier - (pointer_expression "*param_3" * identifier)) ))) + (pointer_expression "*param_4" * identifier))) ;) })) (expression_statement "*param_1 = uVar5 + uVar1;" (assignment_expression "*param_1 = uVar5 + uVar1" (pointer_expression "*param_1" * identifier) = (binary_expression "uVar5 + uVar1" identifier + identifier)) ;) (return_statement "return lVar3;" return identifier ;) })) (expression_statement "pcVar6 = "Encoded size of 0 is too small to read\n";" (assignment_expression "pcVar6 = "Encoded size of 0 is too small to read\n"" identifier = (string_literal ""Encoded size of 0 is too small to read\n"" " string_content escape_sequence ")) ;) }) (else_clause "else {\n    pcVar6 = "Encoded value extends past end of section\n";\n  }" else (compound_statement "{\n    pcVar6 = "Encoded value extends past end of section\n";\n  }" { (expression_statement "pcVar6 = "Encoded value extends past end of section\n";" (assignment_expression "pcVar6 = "Encoded value extends past end of section\n"" identifier = (string_literal ""Encoded value extends past end of section\n"" " string_content escape_sequence ")) ;) }))) (expression_statement "uVar4 = dcgettext(0,pcVar6,5);" (assignment_expression "uVar4 = dcgettext(0,pcVar6,5)" identifier = (call_expression "dcgettext(0,pcVar6,5)" identifier (argument_list "(0,pcVar6,5)" ( number_literal , identifier , number_literal )))) ;) (expression_statement "warn(uVar4);" (call_expression "warn(uVar4)" identifier (argument_list "(uVar4)" ( identifier ))) ;) (expression_statement "*param_1 = param_5;" (assignment_expression "*param_1 = param_5" (pointer_expression "*param_1" * identifier) = identifier) ;) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "/* DWARF original prototype: dwarf_vma get_encoded_value(uchar * * pdata, int encoding,\n   dwarf_section * section, uchar * end, dwarf_section * section) */\n\ndwarf_vma get_encoded_value(uchar **pdata,int encoding,dwarf_section *section,uchar *end,\n                           dwarf_section *section_1)\n\n{\n  uchar *field;\n  uint uVar1;\n  uchar *puVar2;\n  uint size;\n  char *pcVar3;\n  \n  uVar1 = (encoding & 7U) - 2;\n  field = *pdata;\n  size = eh_addr_size;\n  if (uVar1 < 3) {\n    size = *(uint *)(CSWTCH_1510 + (ulong)uVar1 * 4);\n  }\n  if ((dwarf_section *)(field + size) < section_1) {\n    if (8 < size) {\n      pcVar3 = (char *)dcgettext(0,"Encoded size of %d is too large to read\n",5);\n      warn(pcVar3,(ulong)size);\n      *pdata = (uchar *)section_1;\n      return 0;\n    }\n    if (size != 0) {\n      if ((encoding & 8U) == 0) {\n        puVar2 = (uchar *)(*byte_get)(field,size);\n      }\n      else {\n        puVar2 = (uchar *)byte_get_signed(field,size);\n      }\n      if ((encoding & 0x70U) == 0x10) {\n        puVar2 = field + (long)(puVar2 + (*(long *)end - (long)section->uncompressed_name));\n      }\n      *pdata = field + size;\n      return (dwarf_vma)puVar2;\n    }\n    pcVar3 = "Encoded size of 0 is too small to read\n";\n  }\n  else {\n    pcVar3 = "Encoded value extends past end of section\n";\n  }\n  pcVar3 = (char *)dcgettext(0,pcVar3,5);\n  warn(pcVar3);\n  *pdata = (uchar *)section_1;\n  return 0;\n}\n\n" comment (function_definition "dwarf_vma get_encoded_value(uchar **pdata,int encoding,dwarf_section *section,uchar *end,\n                           dwarf_section *section_1)\n\n{\n  uchar *field;\n  uint uVar1;\n  uchar *puVar2;\n  uint size;\n  char *pcVar3;\n  \n  uVar1 = (encoding & 7U) - 2;\n  field = *pdata;\n  size = eh_addr_size;\n  if (uVar1 < 3) {\n    size = *(uint *)(CSWTCH_1510 + (ulong)uVar1 * 4);\n  }\n  if ((dwarf_section *)(field + size) < section_1) {\n    if (8 < size) {\n      pcVar3 = (char *)dcgettext(0,"Encoded size of %d is too large to read\n",5);\n      warn(pcVar3,(ulong)size);\n      *pdata = (uchar *)section_1;\n      return 0;\n    }\n    if (size != 0) {\n      if ((encoding & 8U) == 0) {\n        puVar2 = (uchar *)(*byte_get)(field,size);\n      }\n      else {\n        puVar2 = (uchar *)byte_get_signed(field,size);\n      }\n      if ((encoding & 0x70U) == 0x10) {\n        puVar2 = field + (long)(puVar2 + (*(long *)end - (long)section->uncompressed_name));\n      }\n      *pdata = field + size;\n      return (dwarf_vma)puVar2;\n    }\n    pcVar3 = "Encoded size of 0 is too small to read\n";\n  }\n  else {\n    pcVar3 = "Encoded value extends past end of section\n";\n  }\n  pcVar3 = (char *)dcgettext(0,pcVar3,5);\n  warn(pcVar3);\n  *pdata = (uchar *)section_1;\n  return 0;\n}" type_identifier (function_declarator "get_encoded_value(uchar **pdata,int encoding,dwarf_section *section,uchar *end,\n                           dwarf_section *section_1)" identifier (parameter_list "(uchar **pdata,int encoding,dwarf_section *section,uchar *end,\n                           dwarf_section *section_1)" ( (parameter_declaration "uchar **pdata" type_identifier (pointer_declarator "**pdata" * (pointer_declarator "*pdata" * identifier))) , (parameter_declaration "int encoding" primitive_type identifier) , (parameter_declaration "dwarf_section *section" type_identifier (pointer_declarator "*section" * identifier)) , (parameter_declaration "uchar *end" type_identifier (pointer_declarator "*end" * identifier)) , (parameter_declaration "dwarf_section *section_1" type_identifier (pointer_declarator "*section_1" * identifier)) ))) (compound_statement "{\n  uchar *field;\n  uint uVar1;\n  uchar *puVar2;\n  uint size;\n  char *pcVar3;\n  \n  uVar1 = (encoding & 7U) - 2;\n  field = *pdata;\n  size = eh_addr_size;\n  if (uVar1 < 3) {\n    size = *(uint *)(CSWTCH_1510 + (ulong)uVar1 * 4);\n  }\n  if ((dwarf_section *)(field + size) < section_1) {\n    if (8 < size) {\n      pcVar3 = (char *)dcgettext(0,"Encoded size of %d is too large to read\n",5);\n      warn(pcVar3,(ulong)size);\n      *pdata = (uchar *)section_1;\n      return 0;\n    }\n    if (size != 0) {\n      if ((encoding & 8U) == 0) {\n        puVar2 = (uchar *)(*byte_get)(field,size);\n      }\n      else {\n        puVar2 = (uchar *)byte_get_signed(field,size);\n      }\n      if ((encoding & 0x70U) == 0x10) {\n        puVar2 = field + (long)(puVar2 + (*(long *)end - (long)section->uncompressed_name));\n      }\n      *pdata = field + size;\n      return (dwarf_vma)puVar2;\n    }\n    pcVar3 = "Encoded size of 0 is too small to read\n";\n  }\n  else {\n    pcVar3 = "Encoded value extends past end of section\n";\n  }\n  pcVar3 = (char *)dcgettext(0,pcVar3,5);\n  warn(pcVar3);\n  *pdata = (uchar *)section_1;\n  return 0;\n}" { (declaration "uchar *field;" type_identifier (pointer_declarator "*field" * identifier) ;) (declaration "uint uVar1;" type_identifier identifier ;) (declaration "uchar *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "uint size;" type_identifier identifier ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (expression_statement "uVar1 = (encoding & 7U) - 2;" (assignment_expression "uVar1 = (encoding & 7U) - 2" identifier = (binary_expression "(encoding & 7U) - 2" (parenthesized_expression "(encoding & 7U)" ( (binary_expression "encoding & 7U" identifier & number_literal) )) - number_literal)) ;) (expression_statement "field = *pdata;" (assignment_expression "field = *pdata" identifier = (pointer_expression "*pdata" * identifier)) ;) (expression_statement "size = eh_addr_size;" (assignment_expression "size = eh_addr_size" identifier = identifier) ;) (if_statement "if (uVar1 < 3) {\n    size = *(uint *)(CSWTCH_1510 + (ulong)uVar1 * 4);\n  }" if (parenthesized_expression "(uVar1 < 3)" ( (binary_expression "uVar1 < 3" identifier < number_literal) )) (compound_statement "{\n    size = *(uint *)(CSWTCH_1510 + (ulong)uVar1 * 4);\n  }" { (expression_statement "size = *(uint *)(CSWTCH_1510 + (ulong)uVar1 * 4);" (assignment_expression "size = *(uint *)(CSWTCH_1510 + (ulong)uVar1 * 4)" identifier = (pointer_expression "*(uint *)(CSWTCH_1510 + (ulong)uVar1 * 4)" * (cast_expression "(uint *)(CSWTCH_1510 + (ulong)uVar1 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(CSWTCH_1510 + (ulong)uVar1 * 4)" ( (binary_expression "CSWTCH_1510 + (ulong)uVar1 * 4" identifier + (binary_expression "(ulong)uVar1 * 4" (cast_expression "(ulong)uVar1" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) ))))) ;) })) (if_statement "if ((dwarf_section *)(field + size) < section_1) {\n    if (8 < size) {\n      pcVar3 = (char *)dcgettext(0,"Encoded size of %d is too large to read\n",5);\n      warn(pcVar3,(ulong)size);\n      *pdata = (uchar *)section_1;\n      return 0;\n    }\n    if (size != 0) {\n      if ((encoding & 8U) == 0) {\n        puVar2 = (uchar *)(*byte_get)(field,size);\n      }\n      else {\n        puVar2 = (uchar *)byte_get_signed(field,size);\n      }\n      if ((encoding & 0x70U) == 0x10) {\n        puVar2 = field + (long)(puVar2 + (*(long *)end - (long)section->uncompressed_name));\n      }\n      *pdata = field + size;\n      return (dwarf_vma)puVar2;\n    }\n    pcVar3 = "Encoded size of 0 is too small to read\n";\n  }\n  else {\n    pcVar3 = "Encoded value extends past end of section\n";\n  }" if (parenthesized_expression "((dwarf_section *)(field + size) < section_1)" ( (binary_expression "(dwarf_section *)(field + size) < section_1" (cast_expression "(dwarf_section *)(field + size)" ( (type_descriptor "dwarf_section *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(field + size)" ( (binary_expression "field + size" identifier + identifier) ))) < identifier) )) (compound_statement "{\n    if (8 < size) {\n      pcVar3 = (char *)dcgettext(0,"Encoded size of %d is too large to read\n",5);\n      warn(pcVar3,(ulong)size);\n      *pdata = (uchar *)section_1;\n      return 0;\n    }\n    if (size != 0) {\n      if ((encoding & 8U) == 0) {\n        puVar2 = (uchar *)(*byte_get)(field,size);\n      }\n      else {\n        puVar2 = (uchar *)byte_get_signed(field,size);\n      }\n      if ((encoding & 0x70U) == 0x10) {\n        puVar2 = field + (long)(puVar2 + (*(long *)end - (long)section->uncompressed_name));\n      }\n      *pdata = field + size;\n      return (dwarf_vma)puVar2;\n    }\n    pcVar3 = "Encoded size of 0 is too small to read\n";\n  }" { (if_statement "if (8 < size) {\n      pcVar3 = (char *)dcgettext(0,"Encoded size of %d is too large to read\n",5);\n      warn(pcVar3,(ulong)size);\n      *pdata = (uchar *)section_1;\n      return 0;\n    }" if (parenthesized_expression "(8 < size)" ( (binary_expression "8 < size" number_literal < identifier) )) (compound_statement "{\n      pcVar3 = (char *)dcgettext(0,"Encoded size of %d is too large to read\n",5);\n      warn(pcVar3,(ulong)size);\n      *pdata = (uchar *)section_1;\n      return 0;\n    }" { (expression_statement "pcVar3 = (char *)dcgettext(0,"Encoded size of %d is too large to read\n",5);" (assignment_expression "pcVar3 = (char *)dcgettext(0,"Encoded size of %d is too large to read\n",5)" identifier = (cast_expression "(char *)dcgettext(0,"Encoded size of %d is too large to read\n",5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,"Encoded size of %d is too large to read\n",5)" identifier (argument_list "(0,"Encoded size of %d is too large to read\n",5)" ( number_literal , (string_literal ""Encoded size of %d is too large to read\n"" " string_content escape_sequence ") , number_literal ))))) ;) (expression_statement "warn(pcVar3,(ulong)size);" (call_expression "warn(pcVar3,(ulong)size)" identifier (argument_list "(pcVar3,(ulong)size)" ( identifier , (cast_expression "(ulong)size" ( (type_descriptor "ulong" type_identifier) ) identifier) ))) ;) (expression_statement "*pdata = (uchar *)section_1;" (assignment_expression "*pdata = (uchar *)section_1" (pointer_expression "*pdata" * identifier) = (cast_expression "(uchar *)section_1" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (return_statement "return 0;" return number_literal ;) })) (if_statement "if (size != 0) {\n      if ((encoding & 8U) == 0) {\n        puVar2 = (uchar *)(*byte_get)(field,size);\n      }\n      else {\n        puVar2 = (uchar *)byte_get_signed(field,size);\n      }\n      if ((encoding & 0x70U) == 0x10) {\n        puVar2 = field + (long)(puVar2 + (*(long *)end - (long)section->uncompressed_name));\n      }\n      *pdata = field + size;\n      return (dwarf_vma)puVar2;\n    }" if (parenthesized_expression "(size != 0)" ( (binary_expression "size != 0" identifier != number_literal) )) (compound_statement "{\n      if ((encoding & 8U) == 0) {\n        puVar2 = (uchar *)(*byte_get)(field,size);\n      }\n      else {\n        puVar2 = (uchar *)byte_get_signed(field,size);\n      }\n      if ((encoding & 0x70U) == 0x10) {\n        puVar2 = field + (long)(puVar2 + (*(long *)end - (long)section->uncompressed_name));\n      }\n      *pdata = field + size;\n      return (dwarf_vma)puVar2;\n    }" { (if_statement "if ((encoding & 8U) == 0) {\n        puVar2 = (uchar *)(*byte_get)(field,size);\n      }\n      else {\n        puVar2 = (uchar *)byte_get_signed(field,size);\n      }" if (parenthesized_expression "((encoding & 8U) == 0)" ( (binary_expression "(encoding & 8U) == 0" (parenthesized_expression "(encoding & 8U)" ( (binary_expression "encoding & 8U" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        puVar2 = (uchar *)(*byte_get)(field,size);\n      }" { (expression_statement "puVar2 = (uchar *)(*byte_get)(field,size);" (assignment_expression "puVar2 = (uchar *)(*byte_get)(field,size)" identifier = (cast_expression "(uchar *)(*byte_get)(field,size)" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*byte_get)(field,size)" (parenthesized_expression "(*byte_get)" ( (pointer_expression "*byte_get" * identifier) )) (argument_list "(field,size)" ( identifier , identifier ))))) ;) }) (else_clause "else {\n        puVar2 = (uchar *)byte_get_signed(field,size);\n      }" else (compound_statement "{\n        puVar2 = (uchar *)byte_get_signed(field,size);\n      }" { (expression_statement "puVar2 = (uchar *)byte_get_signed(field,size);" (assignment_expression "puVar2 = (uchar *)byte_get_signed(field,size)" identifier = (cast_expression "(uchar *)byte_get_signed(field,size)" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "byte_get_signed(field,size)" identifier (argument_list "(field,size)" ( identifier , identifier ))))) ;) }))) (if_statement "if ((encoding & 0x70U) == 0x10) {\n        puVar2 = field + (long)(puVar2 + (*(long *)end - (long)section->uncompressed_name));\n      }" if (parenthesized_expression "((encoding & 0x70U) == 0x10)" ( (binary_expression "(encoding & 0x70U) == 0x10" (parenthesized_expression "(encoding & 0x70U)" ( (binary_expression "encoding & 0x70U" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        puVar2 = field + (long)(puVar2 + (*(long *)end - (long)section->uncompressed_name));\n      }" { (expression_statement "puVar2 = field + (long)(puVar2 + (*(long *)end - (long)section->uncompressed_name));" (assignment_expression "puVar2 = field + (long)(puVar2 + (*(long *)end - (long)section->uncompressed_name))" identifier = (binary_expression "field + (long)(puVar2 + (*(long *)end - (long)section->uncompressed_name))" identifier + (cast_expression "(long)(puVar2 + (*(long *)end - (long)section->uncompressed_name))" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(puVar2 + (*(long *)end - (long)section->uncompressed_name))" ( (binary_expression "puVar2 + (*(long *)end - (long)section->uncompressed_name)" identifier + (parenthesized_expression "(*(long *)end - (long)section->uncompressed_name)" ( (binary_expression "*(long *)end - (long)section->uncompressed_name" (pointer_expression "*(long *)end" * (cast_expression "(long *)end" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) - (cast_expression "(long)section->uncompressed_name" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "section->uncompressed_name" identifier -> field_identifier))) ))) ))))) ;) })) (expression_statement "*pdata = field + size;" (assignment_expression "*pdata = field + size" (pointer_expression "*pdata" * identifier) = (binary_expression "field + size" identifier + identifier)) ;) (return_statement "return (dwarf_vma)puVar2;" return (cast_expression "(dwarf_vma)puVar2" ( (type_descriptor "dwarf_vma" type_identifier) ) identifier) ;) })) (expression_statement "pcVar3 = "Encoded size of 0 is too small to read\n";" (assignment_expression "pcVar3 = "Encoded size of 0 is too small to read\n"" identifier = (string_literal ""Encoded size of 0 is too small to read\n"" " string_content escape_sequence ")) ;) }) (else_clause "else {\n    pcVar3 = "Encoded value extends past end of section\n";\n  }" else (compound_statement "{\n    pcVar3 = "Encoded value extends past end of section\n";\n  }" { (expression_statement "pcVar3 = "Encoded value extends past end of section\n";" (assignment_expression "pcVar3 = "Encoded value extends past end of section\n"" identifier = (string_literal ""Encoded value extends past end of section\n"" " string_content escape_sequence ")) ;) }))) (expression_statement "pcVar3 = (char *)dcgettext(0,pcVar3,5);" (assignment_expression "pcVar3 = (char *)dcgettext(0,pcVar3,5)" identifier = (cast_expression "(char *)dcgettext(0,pcVar3,5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,pcVar3,5)" identifier (argument_list "(0,pcVar3,5)" ( number_literal , identifier , number_literal ))))) ;) (expression_statement "warn(pcVar3);" (call_expression "warn(pcVar3)" identifier (argument_list "(pcVar3)" ( identifier ))) ;) (expression_statement "*pdata = (uchar *)section_1;" (assignment_expression "*pdata = (uchar *)section_1" (pointer_expression "*pdata" * identifier) = (cast_expression "(uchar *)section_1" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "long FUN_00110520(ulong *param_1,uint param_2,long *param_3,long *param_4,ulong param_5)\n\n{\n  ulong uVar1;\n  uint uVar2;\n  long lVar3;\n  undefined8 uVar4;\n  uint uVar5;\n  char *pcVar6;\n  \n  uVar2 = (param_2 & 7) - 2;\n  uVar1 = *param_1;\n  uVar5 = DAT_00159de4;\n  if (uVar2 < 3) {\n    uVar5 = *(uint *)(&DAT_00144eb0 + (ulong)uVar2 * 4);\n  }\n  if (uVar5 + uVar1 < param_5) {\n    if (8 < uVar5) {\n      uVar4 = dcgettext(0,"Encoded size of %d is too large to read\n",5);\n      warn(uVar4,uVar5);\n      *param_1 = param_5;\n      return 0;\n    }\n    if (uVar5 != 0) {\n      if ((param_2 & 8) == 0) {\n        lVar3 = (*DAT_00159e20)();\n      }\n      else {\n        lVar3 = FUN_00137cb0(uVar1,uVar5);\n      }\n      if ((param_2 & 0x70) == 0x10) {\n        lVar3 = lVar3 + (uVar1 - *param_3) + *param_4;\n      }\n      *param_1 = uVar5 + uVar1;\n      return lVar3;\n    }\n    pcVar6 = "Encoded size of 0 is too small to read\n";\n  }\n  else {\n    pcVar6 = "Encoded value extends past end of section\n";\n  }\n  uVar4 = dcgettext(0,pcVar6,5);\n  warn(uVar4);\n  *param_1 = param_5;\n  return 0;\n}\n\n" (function_definition "long FUN_00110520(ulong *param_1,uint param_2,long *param_3,long *param_4,ulong param_5)\n\n{\n  ulong uVar1;\n  uint uVar2;\n  long lVar3;\n  undefined8 uVar4;\n  uint uVar5;\n  char *pcVar6;\n  \n  uVar2 = (param_2 & 7) - 2;\n  uVar1 = *param_1;\n  uVar5 = DAT_00159de4;\n  if (uVar2 < 3) {\n    uVar5 = *(uint *)(&DAT_00144eb0 + (ulong)uVar2 * 4);\n  }\n  if (uVar5 + uVar1 < param_5) {\n    if (8 < uVar5) {\n      uVar4 = dcgettext(0,"Encoded size of %d is too large to read\n",5);\n      warn(uVar4,uVar5);\n      *param_1 = param_5;\n      return 0;\n    }\n    if (uVar5 != 0) {\n      if ((param_2 & 8) == 0) {\n        lVar3 = (*DAT_00159e20)();\n      }\n      else {\n        lVar3 = FUN_00137cb0(uVar1,uVar5);\n      }\n      if ((param_2 & 0x70) == 0x10) {\n        lVar3 = lVar3 + (uVar1 - *param_3) + *param_4;\n      }\n      *param_1 = uVar5 + uVar1;\n      return lVar3;\n    }\n    pcVar6 = "Encoded size of 0 is too small to read\n";\n  }\n  else {\n    pcVar6 = "Encoded value extends past end of section\n";\n  }\n  uVar4 = dcgettext(0,pcVar6,5);\n  warn(uVar4);\n  *param_1 = param_5;\n  return 0;\n}" (sized_type_specifier "long" long) (function_declarator "FUN_00110520(ulong *param_1,uint param_2,long *param_3,long *param_4,ulong param_5)" identifier (parameter_list "(ulong *param_1,uint param_2,long *param_3,long *param_4,ulong param_5)" ( (parameter_declaration "ulong *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "long *param_3" (sized_type_specifier "long" long) (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "long *param_4" (sized_type_specifier "long" long) (pointer_declarator "*param_4" * identifier)) , (parameter_declaration "ulong param_5" type_identifier identifier) ))) (compound_statement "{\n  ulong uVar1;\n  uint uVar2;\n  long lVar3;\n  undefined8 uVar4;\n  uint uVar5;\n  char *pcVar6;\n  \n  uVar2 = (param_2 & 7) - 2;\n  uVar1 = *param_1;\n  uVar5 = DAT_00159de4;\n  if (uVar2 < 3) {\n    uVar5 = *(uint *)(&DAT_00144eb0 + (ulong)uVar2 * 4);\n  }\n  if (uVar5 + uVar1 < param_5) {\n    if (8 < uVar5) {\n      uVar4 = dcgettext(0,"Encoded size of %d is too large to read\n",5);\n      warn(uVar4,uVar5);\n      *param_1 = param_5;\n      return 0;\n    }\n    if (uVar5 != 0) {\n      if ((param_2 & 8) == 0) {\n        lVar3 = (*DAT_00159e20)();\n      }\n      else {\n        lVar3 = FUN_00137cb0(uVar1,uVar5);\n      }\n      if ((param_2 & 0x70) == 0x10) {\n        lVar3 = lVar3 + (uVar1 - *param_3) + *param_4;\n      }\n      *param_1 = uVar5 + uVar1;\n      return lVar3;\n    }\n    pcVar6 = "Encoded size of 0 is too small to read\n";\n  }\n  else {\n    pcVar6 = "Encoded value extends past end of section\n";\n  }\n  uVar4 = dcgettext(0,pcVar6,5);\n  warn(uVar4);\n  *param_1 = param_5;\n  return 0;\n}" { (declaration "ulong uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "char *pcVar6;" primitive_type (pointer_declarator "*pcVar6" * identifier) ;) (expression_statement "uVar2 = (param_2 & 7) - 2;" (assignment_expression "uVar2 = (param_2 & 7) - 2" identifier = (binary_expression "(param_2 & 7) - 2" (parenthesized_expression "(param_2 & 7)" ( (binary_expression "param_2 & 7" identifier & number_literal) )) - number_literal)) ;) (expression_statement "uVar1 = *param_1;" (assignment_expression "uVar1 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "uVar5 = DAT_00159de4;" (assignment_expression "uVar5 = DAT_00159de4" identifier = identifier) ;) (if_statement "if (uVar2 < 3) {\n    uVar5 = *(uint *)(&DAT_00144eb0 + (ulong)uVar2 * 4);\n  }" if (parenthesized_expression "(uVar2 < 3)" ( (binary_expression "uVar2 < 3" identifier < number_literal) )) (compound_statement "{\n    uVar5 = *(uint *)(&DAT_00144eb0 + (ulong)uVar2 * 4);\n  }" { (expression_statement "uVar5 = *(uint *)(&DAT_00144eb0 + (ulong)uVar2 * 4);" (assignment_expression "uVar5 = *(uint *)(&DAT_00144eb0 + (ulong)uVar2 * 4)" identifier = (pointer_expression "*(uint *)(&DAT_00144eb0 + (ulong)uVar2 * 4)" * (cast_expression "(uint *)(&DAT_00144eb0 + (ulong)uVar2 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_00144eb0 + (ulong)uVar2 * 4)" ( (binary_expression "&DAT_00144eb0 + (ulong)uVar2 * 4" (pointer_expression "&DAT_00144eb0" & identifier) + (binary_expression "(ulong)uVar2 * 4" (cast_expression "(ulong)uVar2" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) ))))) ;) })) (if_statement "if (uVar5 + uVar1 < param_5) {\n    if (8 < uVar5) {\n      uVar4 = dcgettext(0,"Encoded size of %d is too large to read\n",5);\n      warn(uVar4,uVar5);\n      *param_1 = param_5;\n      return 0;\n    }\n    if (uVar5 != 0) {\n      if ((param_2 & 8) == 0) {\n        lVar3 = (*DAT_00159e20)();\n      }\n      else {\n        lVar3 = FUN_00137cb0(uVar1,uVar5);\n      }\n      if ((param_2 & 0x70) == 0x10) {\n        lVar3 = lVar3 + (uVar1 - *param_3) + *param_4;\n      }\n      *param_1 = uVar5 + uVar1;\n      return lVar3;\n    }\n    pcVar6 = "Encoded size of 0 is too small to read\n";\n  }\n  else {\n    pcVar6 = "Encoded value extends past end of section\n";\n  }" if (parenthesized_expression "(uVar5 + uVar1 < param_5)" ( (binary_expression "uVar5 + uVar1 < param_5" (binary_expression "uVar5 + uVar1" identifier + identifier) < identifier) )) (compound_statement "{\n    if (8 < uVar5) {\n      uVar4 = dcgettext(0,"Encoded size of %d is too large to read\n",5);\n      warn(uVar4,uVar5);\n      *param_1 = param_5;\n      return 0;\n    }\n    if (uVar5 != 0) {\n      if ((param_2 & 8) == 0) {\n        lVar3 = (*DAT_00159e20)();\n      }\n      else {\n        lVar3 = FUN_00137cb0(uVar1,uVar5);\n      }\n      if ((param_2 & 0x70) == 0x10) {\n        lVar3 = lVar3 + (uVar1 - *param_3) + *param_4;\n      }\n      *param_1 = uVar5 + uVar1;\n      return lVar3;\n    }\n    pcVar6 = "Encoded size of 0 is too small to read\n";\n  }" { (if_statement "if (8 < uVar5) {\n      uVar4 = dcgettext(0,"Encoded size of %d is too large to read\n",5);\n      warn(uVar4,uVar5);\n      *param_1 = param_5;\n      return 0;\n    }" if (parenthesized_expression "(8 < uVar5)" ( (binary_expression "8 < uVar5" number_literal < identifier) )) (compound_statement "{\n      uVar4 = dcgettext(0,"Encoded size of %d is too large to read\n",5);\n      warn(uVar4,uVar5);\n      *param_1 = param_5;\n      return 0;\n    }" { (expression_statement "uVar4 = dcgettext(0,"Encoded size of %d is too large to read\n",5);" (assignment_expression "uVar4 = dcgettext(0,"Encoded size of %d is too large to read\n",5)" identifier = (call_expression "dcgettext(0,"Encoded size of %d is too large to read\n",5)" identifier (argument_list "(0,"Encoded size of %d is too large to read\n",5)" ( number_literal , (string_literal ""Encoded size of %d is too large to read\n"" " string_content escape_sequence ") , number_literal )))) ;) (expression_statement "warn(uVar4,uVar5);" (call_expression "warn(uVar4,uVar5)" identifier (argument_list "(uVar4,uVar5)" ( identifier , identifier ))) ;) (expression_statement "*param_1 = param_5;" (assignment_expression "*param_1 = param_5" (pointer_expression "*param_1" * identifier) = identifier) ;) (return_statement "return 0;" return number_literal ;) })) (if_statement "if (uVar5 != 0) {\n      if ((param_2 & 8) == 0) {\n        lVar3 = (*DAT_00159e20)();\n      }\n      else {\n        lVar3 = FUN_00137cb0(uVar1,uVar5);\n      }\n      if ((param_2 & 0x70) == 0x10) {\n        lVar3 = lVar3 + (uVar1 - *param_3) + *param_4;\n      }\n      *param_1 = uVar5 + uVar1;\n      return lVar3;\n    }" if (parenthesized_expression "(uVar5 != 0)" ( (binary_expression "uVar5 != 0" identifier != number_literal) )) (compound_statement "{\n      if ((param_2 & 8) == 0) {\n        lVar3 = (*DAT_00159e20)();\n      }\n      else {\n        lVar3 = FUN_00137cb0(uVar1,uVar5);\n      }\n      if ((param_2 & 0x70) == 0x10) {\n        lVar3 = lVar3 + (uVar1 - *param_3) + *param_4;\n      }\n      *param_1 = uVar5 + uVar1;\n      return lVar3;\n    }" { (if_statement "if ((param_2 & 8) == 0) {\n        lVar3 = (*DAT_00159e20)();\n      }\n      else {\n        lVar3 = FUN_00137cb0(uVar1,uVar5);\n      }" if (parenthesized_expression "((param_2 & 8) == 0)" ( (binary_expression "(param_2 & 8) == 0" (parenthesized_expression "(param_2 & 8)" ( (binary_expression "param_2 & 8" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        lVar3 = (*DAT_00159e20)();\n      }" { (expression_statement "lVar3 = (*DAT_00159e20)();" (assignment_expression "lVar3 = (*DAT_00159e20)()" identifier = (call_expression "(*DAT_00159e20)()" (parenthesized_expression "(*DAT_00159e20)" ( (pointer_expression "*DAT_00159e20" * identifier) )) (argument_list "()" ( )))) ;) }) (else_clause "else {\n        lVar3 = FUN_00137cb0(uVar1,uVar5);\n      }" else (compound_statement "{\n        lVar3 = FUN_00137cb0(uVar1,uVar5);\n      }" { (expression_statement "lVar3 = FUN_00137cb0(uVar1,uVar5);" (assignment_expression "lVar3 = FUN_00137cb0(uVar1,uVar5)" identifier = (call_expression "FUN_00137cb0(uVar1,uVar5)" identifier (argument_list "(uVar1,uVar5)" ( identifier , identifier )))) ;) }))) (if_statement "if ((param_2 & 0x70) == 0x10) {\n        lVar3 = lVar3 + (uVar1 - *param_3) + *param_4;\n      }" if (parenthesized_expression "((param_2 & 0x70) == 0x10)" ( (binary_expression "(param_2 & 0x70) == 0x10" (parenthesized_expression "(param_2 & 0x70)" ( (binary_expression "param_2 & 0x70" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        lVar3 = lVar3 + (uVar1 - *param_3) + *param_4;\n      }" { (expression_statement "lVar3 = lVar3 + (uVar1 - *param_3) + *param_4;" (assignment_expression "lVar3 = lVar3 + (uVar1 - *param_3) + *param_4" identifier = (binary_expression "lVar3 + (uVar1 - *param_3) + *param_4" (binary_expression "lVar3 + (uVar1 - *param_3)" identifier + (parenthesized_expression "(uVar1 - *param_3)" ( (binary_expression "uVar1 - *param_3" identifier - (pointer_expression "*param_3" * identifier)) ))) + (pointer_expression "*param_4" * identifier))) ;) })) (expression_statement "*param_1 = uVar5 + uVar1;" (assignment_expression "*param_1 = uVar5 + uVar1" (pointer_expression "*param_1" * identifier) = (binary_expression "uVar5 + uVar1" identifier + identifier)) ;) (return_statement "return lVar3;" return identifier ;) })) (expression_statement "pcVar6 = "Encoded size of 0 is too small to read\n";" (assignment_expression "pcVar6 = "Encoded size of 0 is too small to read\n"" identifier = (string_literal ""Encoded size of 0 is too small to read\n"" " string_content escape_sequence ")) ;) }) (else_clause "else {\n    pcVar6 = "Encoded value extends past end of section\n";\n  }" else (compound_statement "{\n    pcVar6 = "Encoded value extends past end of section\n";\n  }" { (expression_statement "pcVar6 = "Encoded value extends past end of section\n";" (assignment_expression "pcVar6 = "Encoded value extends past end of section\n"" identifier = (string_literal ""Encoded value extends past end of section\n"" " string_content escape_sequence ")) ;) }))) (expression_statement "uVar4 = dcgettext(0,pcVar6,5);" (assignment_expression "uVar4 = dcgettext(0,pcVar6,5)" identifier = (call_expression "dcgettext(0,pcVar6,5)" identifier (argument_list "(0,pcVar6,5)" ( number_literal , identifier , number_literal )))) ;) (expression_statement "warn(uVar4);" (call_expression "warn(uVar4)" identifier (argument_list "(uVar4)" ( identifier ))) ;) (expression_statement "*param_1 = param_5;" (assignment_expression "*param_1 = param_5" (pointer_expression "*param_1" * identifier) = identifier) ;) (return_statement "return 0;" return number_literal ;) })))
(translation_unit (function_definition (sized_type_specifier long) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) - LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression & IDENT) + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) ))))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + IDENT) < IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , (string_literal " string_content escape_sequence ") , LIT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( )))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (parenthesized_expression ( (binary_expression IDENT - (pointer_expression * IDENT)) ))) + (pointer_expression * IDENT))) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression IDENT + IDENT)) ;) (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (string_literal " string_content escape_sequence ")) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (string_literal " string_content escape_sequence ")) ;) }))) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , IDENT , LIT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (return_statement return LIT ;) })))
(function_definition "long FUN_00110520(ulong *param_1,uint param_2,long *param_3,long *param_4,ulong param_5)\n\n{\n  ulong uVar1;\n  uint uVar2;\n  long lVar3;\n  undefined8 uVar4;\n  uint uVar5;\n  char *pcVar6;\n  \n  uVar2 = (param_2 & 7) - 2;\n  uVar1 = *param_1;\n  uVar5 = DAT_00159de4;\n  if (uVar2 < 3) {\n    uVar5 = *(uint *)(&DAT_00144eb0 + (ulong)uVar2 * 4);\n  }\n  if (uVar5 + uVar1 < param_5) {\n    if (8 < uVar5) {\n      uVar4 = dcgettext(0,"Encoded size of %d is too large to read\n",5);\n      warn(uVar4,uVar5);\n      *param_1 = param_5;\n      return 0;\n    }\n    if (uVar5 != 0) {\n      if ((param_2 & 8) == 0) {\n        lVar3 = (*DAT_00159e20)();\n      }\n      else {\n        lVar3 = FUN_00137cb0(uVar1,uVar5);\n      }\n      if ((param_2 & 0x70) == 0x10) {\n        lVar3 = lVar3 + (uVar1 - *param_3) + *param_4;\n      }\n      *param_1 = uVar5 + uVar1;\n      return lVar3;\n    }\n    pcVar6 = "Encoded size of 0 is too small to read\n";\n  }\n  else {\n    pcVar6 = "Encoded value extends past end of section\n";\n  }\n  uVar4 = dcgettext(0,pcVar6,5);\n  warn(uVar4);\n  *param_1 = param_5;\n  return 0;\n}" (sized_type_specifier "long" (long "long")) (function_declarator "FUN_00110520(ulong *param_1,uint param_2,long *param_3,long *param_4,ulong param_5)" (identifier "FUN_00110520") (parameter_list "(ulong *param_1,uint param_2,long *param_3,long *param_4,ulong param_5)" (( "(") (parameter_declaration "ulong *param_1" (type_identifier "ulong") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (identifier "param_2")) (, ",") (parameter_declaration "long *param_3" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "long *param_4" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) (, ",") (parameter_declaration "ulong param_5" (type_identifier "ulong") (identifier "param_5")) () ")"))) (compound_statement "{\n  ulong uVar1;\n  uint uVar2;\n  long lVar3;\n  undefined8 uVar4;\n  uint uVar5;\n  char *pcVar6;\n  \n  uVar2 = (param_2 & 7) - 2;\n  uVar1 = *param_1;\n  uVar5 = DAT_00159de4;\n  if (uVar2 < 3) {\n    uVar5 = *(uint *)(&DAT_00144eb0 + (ulong)uVar2 * 4);\n  }\n  if (uVar5 + uVar1 < param_5) {\n    if (8 < uVar5) {\n      uVar4 = dcgettext(0,"Encoded size of %d is too large to read\n",5);\n      warn(uVar4,uVar5);\n      *param_1 = param_5;\n      return 0;\n    }\n    if (uVar5 != 0) {\n      if ((param_2 & 8) == 0) {\n        lVar3 = (*DAT_00159e20)();\n      }\n      else {\n        lVar3 = FUN_00137cb0(uVar1,uVar5);\n      }\n      if ((param_2 & 0x70) == 0x10) {\n        lVar3 = lVar3 + (uVar1 - *param_3) + *param_4;\n      }\n      *param_1 = uVar5 + uVar1;\n      return lVar3;\n    }\n    pcVar6 = "Encoded size of 0 is too small to read\n";\n  }\n  else {\n    pcVar6 = "Encoded value extends past end of section\n";\n  }\n  uVar4 = dcgettext(0,pcVar6,5);\n  warn(uVar4);\n  *param_1 = param_5;\n  return 0;\n}" ({ "{") (declaration "ulong uVar1;" (type_identifier "ulong") (identifier "uVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (declaration "undefined8 uVar4;" (type_identifier "undefined8") (identifier "uVar4") (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "char *pcVar6;" (primitive_type "char") (pointer_declarator "*pcVar6" (* "*") (identifier "pcVar6")) (; ";")) (expression_statement "uVar2 = (param_2 & 7) - 2;" (assignment_expression "uVar2 = (param_2 & 7) - 2" (identifier "uVar2") (= "=") (binary_expression "(param_2 & 7) - 2" (parenthesized_expression "(param_2 & 7)" (( "(") (binary_expression "param_2 & 7" (identifier "param_2") (& "&") (number_literal "7")) () ")")) (- "-") (number_literal "2"))) (; ";")) (expression_statement "uVar1 = *param_1;" (assignment_expression "uVar1 = *param_1" (identifier "uVar1") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "uVar5 = DAT_00159de4;" (assignment_expression "uVar5 = DAT_00159de4" (identifier "uVar5") (= "=") (identifier "DAT_00159de4")) (; ";")) (if_statement "if (uVar2 < 3) {\n    uVar5 = *(uint *)(&DAT_00144eb0 + (ulong)uVar2 * 4);\n  }" (if "if") (parenthesized_expression "(uVar2 < 3)" (( "(") (binary_expression "uVar2 < 3" (identifier "uVar2") (< "<") (number_literal "3")) () ")")) (compound_statement "{\n    uVar5 = *(uint *)(&DAT_00144eb0 + (ulong)uVar2 * 4);\n  }" ({ "{") (expression_statement "uVar5 = *(uint *)(&DAT_00144eb0 + (ulong)uVar2 * 4);" (assignment_expression "uVar5 = *(uint *)(&DAT_00144eb0 + (ulong)uVar2 * 4)" (identifier "uVar5") (= "=") (pointer_expression "*(uint *)(&DAT_00144eb0 + (ulong)uVar2 * 4)" (* "*") (cast_expression "(uint *)(&DAT_00144eb0 + (ulong)uVar2 * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(&DAT_00144eb0 + (ulong)uVar2 * 4)" (( "(") (binary_expression "&DAT_00144eb0 + (ulong)uVar2 * 4" (pointer_expression "&DAT_00144eb0" (& "&") (identifier "DAT_00144eb0")) (+ "+") (binary_expression "(ulong)uVar2 * 4" (cast_expression "(ulong)uVar2" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar2")) (* "*") (number_literal "4"))) () ")"))))) (; ";")) (} "}"))) (if_statement "if (uVar5 + uVar1 < param_5) {\n    if (8 < uVar5) {\n      uVar4 = dcgettext(0,"Encoded size of %d is too large to read\n",5);\n      warn(uVar4,uVar5);\n      *param_1 = param_5;\n      return 0;\n    }\n    if (uVar5 != 0) {\n      if ((param_2 & 8) == 0) {\n        lVar3 = (*DAT_00159e20)();\n      }\n      else {\n        lVar3 = FUN_00137cb0(uVar1,uVar5);\n      }\n      if ((param_2 & 0x70) == 0x10) {\n        lVar3 = lVar3 + (uVar1 - *param_3) + *param_4;\n      }\n      *param_1 = uVar5 + uVar1;\n      return lVar3;\n    }\n    pcVar6 = "Encoded size of 0 is too small to read\n";\n  }\n  else {\n    pcVar6 = "Encoded value extends past end of section\n";\n  }" (if "if") (parenthesized_expression "(uVar5 + uVar1 < param_5)" (( "(") (binary_expression "uVar5 + uVar1 < param_5" (binary_expression "uVar5 + uVar1" (identifier "uVar5") (+ "+") (identifier "uVar1")) (< "<") (identifier "param_5")) () ")")) (compound_statement "{\n    if (8 < uVar5) {\n      uVar4 = dcgettext(0,"Encoded size of %d is too large to read\n",5);\n      warn(uVar4,uVar5);\n      *param_1 = param_5;\n      return 0;\n    }\n    if (uVar5 != 0) {\n      if ((param_2 & 8) == 0) {\n        lVar3 = (*DAT_00159e20)();\n      }\n      else {\n        lVar3 = FUN_00137cb0(uVar1,uVar5);\n      }\n      if ((param_2 & 0x70) == 0x10) {\n        lVar3 = lVar3 + (uVar1 - *param_3) + *param_4;\n      }\n      *param_1 = uVar5 + uVar1;\n      return lVar3;\n    }\n    pcVar6 = "Encoded size of 0 is too small to read\n";\n  }" ({ "{") (if_statement "if (8 < uVar5) {\n      uVar4 = dcgettext(0,"Encoded size of %d is too large to read\n",5);\n      warn(uVar4,uVar5);\n      *param_1 = param_5;\n      return 0;\n    }" (if "if") (parenthesized_expression "(8 < uVar5)" (( "(") (binary_expression "8 < uVar5" (number_literal "8") (< "<") (identifier "uVar5")) () ")")) (compound_statement "{\n      uVar4 = dcgettext(0,"Encoded size of %d is too large to read\n",5);\n      warn(uVar4,uVar5);\n      *param_1 = param_5;\n      return 0;\n    }" ({ "{") (expression_statement "uVar4 = dcgettext(0,"Encoded size of %d is too large to read\n",5);" (assignment_expression "uVar4 = dcgettext(0,"Encoded size of %d is too large to read\n",5)" (identifier "uVar4") (= "=") (call_expression "dcgettext(0,"Encoded size of %d is too large to read\n",5)" (identifier "dcgettext") (argument_list "(0,"Encoded size of %d is too large to read\n",5)" (( "(") (number_literal "0") (, ",") (string_literal ""Encoded size of %d is too large to read\n"" (" """) (string_content "Encoded size of %d is too large to read") (escape_sequence "\n") (" """)) (, ",") (number_literal "5") () ")")))) (; ";")) (expression_statement "warn(uVar4,uVar5);" (call_expression "warn(uVar4,uVar5)" (identifier "warn") (argument_list "(uVar4,uVar5)" (( "(") (identifier "uVar4") (, ",") (identifier "uVar5") () ")"))) (; ";")) (expression_statement "*param_1 = param_5;" (assignment_expression "*param_1 = param_5" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (identifier "param_5")) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (if_statement "if (uVar5 != 0) {\n      if ((param_2 & 8) == 0) {\n        lVar3 = (*DAT_00159e20)();\n      }\n      else {\n        lVar3 = FUN_00137cb0(uVar1,uVar5);\n      }\n      if ((param_2 & 0x70) == 0x10) {\n        lVar3 = lVar3 + (uVar1 - *param_3) + *param_4;\n      }\n      *param_1 = uVar5 + uVar1;\n      return lVar3;\n    }" (if "if") (parenthesized_expression "(uVar5 != 0)" (( "(") (binary_expression "uVar5 != 0" (identifier "uVar5") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      if ((param_2 & 8) == 0) {\n        lVar3 = (*DAT_00159e20)();\n      }\n      else {\n        lVar3 = FUN_00137cb0(uVar1,uVar5);\n      }\n      if ((param_2 & 0x70) == 0x10) {\n        lVar3 = lVar3 + (uVar1 - *param_3) + *param_4;\n      }\n      *param_1 = uVar5 + uVar1;\n      return lVar3;\n    }" ({ "{") (if_statement "if ((param_2 & 8) == 0) {\n        lVar3 = (*DAT_00159e20)();\n      }\n      else {\n        lVar3 = FUN_00137cb0(uVar1,uVar5);\n      }" (if "if") (parenthesized_expression "((param_2 & 8) == 0)" (( "(") (binary_expression "(param_2 & 8) == 0" (parenthesized_expression "(param_2 & 8)" (( "(") (binary_expression "param_2 & 8" (identifier "param_2") (& "&") (number_literal "8")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        lVar3 = (*DAT_00159e20)();\n      }" ({ "{") (expression_statement "lVar3 = (*DAT_00159e20)();" (assignment_expression "lVar3 = (*DAT_00159e20)()" (identifier "lVar3") (= "=") (call_expression "(*DAT_00159e20)()" (parenthesized_expression "(*DAT_00159e20)" (( "(") (pointer_expression "*DAT_00159e20" (* "*") (identifier "DAT_00159e20")) () ")")) (argument_list "()" (( "(") () ")")))) (; ";")) (} "}")) (else_clause "else {\n        lVar3 = FUN_00137cb0(uVar1,uVar5);\n      }" (else "else") (compound_statement "{\n        lVar3 = FUN_00137cb0(uVar1,uVar5);\n      }" ({ "{") (expression_statement "lVar3 = FUN_00137cb0(uVar1,uVar5);" (assignment_expression "lVar3 = FUN_00137cb0(uVar1,uVar5)" (identifier "lVar3") (= "=") (call_expression "FUN_00137cb0(uVar1,uVar5)" (identifier "FUN_00137cb0") (argument_list "(uVar1,uVar5)" (( "(") (identifier "uVar1") (, ",") (identifier "uVar5") () ")")))) (; ";")) (} "}")))) (if_statement "if ((param_2 & 0x70) == 0x10) {\n        lVar3 = lVar3 + (uVar1 - *param_3) + *param_4;\n      }" (if "if") (parenthesized_expression "((param_2 & 0x70) == 0x10)" (( "(") (binary_expression "(param_2 & 0x70) == 0x10" (parenthesized_expression "(param_2 & 0x70)" (( "(") (binary_expression "param_2 & 0x70" (identifier "param_2") (& "&") (number_literal "0x70")) () ")")) (== "==") (number_literal "0x10")) () ")")) (compound_statement "{\n        lVar3 = lVar3 + (uVar1 - *param_3) + *param_4;\n      }" ({ "{") (expression_statement "lVar3 = lVar3 + (uVar1 - *param_3) + *param_4;" (assignment_expression "lVar3 = lVar3 + (uVar1 - *param_3) + *param_4" (identifier "lVar3") (= "=") (binary_expression "lVar3 + (uVar1 - *param_3) + *param_4" (binary_expression "lVar3 + (uVar1 - *param_3)" (identifier "lVar3") (+ "+") (parenthesized_expression "(uVar1 - *param_3)" (( "(") (binary_expression "uVar1 - *param_3" (identifier "uVar1") (- "-") (pointer_expression "*param_3" (* "*") (identifier "param_3"))) () ")"))) (+ "+") (pointer_expression "*param_4" (* "*") (identifier "param_4")))) (; ";")) (} "}"))) (expression_statement "*param_1 = uVar5 + uVar1;" (assignment_expression "*param_1 = uVar5 + uVar1" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (binary_expression "uVar5 + uVar1" (identifier "uVar5") (+ "+") (identifier "uVar1"))) (; ";")) (return_statement "return lVar3;" (return "return") (identifier "lVar3") (; ";")) (} "}"))) (expression_statement "pcVar6 = "Encoded size of 0 is too small to read\n";" (assignment_expression "pcVar6 = "Encoded size of 0 is too small to read\n"" (identifier "pcVar6") (= "=") (string_literal ""Encoded size of 0 is too small to read\n"" (" """) (string_content "Encoded size of 0 is too small to read") (escape_sequence "\n") (" """))) (; ";")) (} "}")) (else_clause "else {\n    pcVar6 = "Encoded value extends past end of section\n";\n  }" (else "else") (compound_statement "{\n    pcVar6 = "Encoded value extends past end of section\n";\n  }" ({ "{") (expression_statement "pcVar6 = "Encoded value extends past end of section\n";" (assignment_expression "pcVar6 = "Encoded value extends past end of section\n"" (identifier "pcVar6") (= "=") (string_literal ""Encoded value extends past end of section\n"" (" """) (string_content "Encoded value extends past end of section") (escape_sequence "\n") (" """))) (; ";")) (} "}")))) (expression_statement "uVar4 = dcgettext(0,pcVar6,5);" (assignment_expression "uVar4 = dcgettext(0,pcVar6,5)" (identifier "uVar4") (= "=") (call_expression "dcgettext(0,pcVar6,5)" (identifier "dcgettext") (argument_list "(0,pcVar6,5)" (( "(") (number_literal "0") (, ",") (identifier "pcVar6") (, ",") (number_literal "5") () ")")))) (; ";")) (expression_statement "warn(uVar4);" (call_expression "warn(uVar4)" (identifier "warn") (argument_list "(uVar4)" (( "(") (identifier "uVar4") () ")"))) (; ";")) (expression_statement "*param_1 = param_5;" (assignment_expression "*param_1 = param_5" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (identifier "param_5")) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))

/* DWARF original prototype: dwarf_vma get_encoded_value(uchar * * pdata, int encoding,
   dwarf_section * section, uchar * end, dwarf_section * section) */

type_1 function_1(type_2 **pdata,int var_1,type_3 *section,type_2 *end,
                           type_3 *var_6)

{
  type_2 *var_4;
  type_4 var_2;
  type_2 *var_10;
  type_4 var_5;
  char *pcVar3;
  
  var_2 = (var_1 & 7U) - 2;
  var_4 = *pdata;
  var_5 = eh_addr_size;
  if (var_2 < 3) {
    var_5 = *(type_4 *)(var_3 + (type_5)var_2 * 4);
  }
  if ((type_3 *)(var_4 + var_5) < var_6) {
    if (8 < var_5) {
      pcVar3 = (char *)var_7(0,"Encoded size of %d is too large to read\n",5);
      var_8(pcVar3,(type_5)var_5);
      *pdata = (type_2 *)var_6;
      return 0;
    }
    if (var_5 != 0) {
      if ((var_1 & 8U) == 0) {
        var_10 = (type_2 *)(*byte_get)(var_4,var_5);
      }
      else {
        var_10 = (type_2 *)var_9(var_4,var_5);
      }
      if ((var_1 & 0x70U) == 0x10) {
        var_10 = var_4 + (long)(var_10 + (*(long *)end - (long)section->uncompressed_name));
      }
      *pdata = var_4 + var_5;
      return (type_1)var_10;
    }
    pcVar3 = "Encoded size of 0 is too small to read\n";
  }
  else {
    pcVar3 = "Encoded value extends past end of section\n";
  }
  pcVar3 = (char *)var_7(0,pcVar3,5);
  var_8(pcVar3);
  *pdata = (type_2 *)var_6;
  return 0;
}


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

long MASKED(ulong *param_1,uint param_2,long *param_3,long *param_4,ulong param_5)

{
  ulong uVar1;
  uint uVar2;
  long lVar3;
  undefined8 uVar4;
  uint uVar5;
  char *pcVar6;
  
  uVar2 = (param_2 & 7) - 2;
  uVar1 = *param_1;
  uVar5 = DAT_00159de4;
  if (uVar2 < 3) {
    uVar5 = *(uint *)(&DAT_00144eb0 + (ulong)uVar2 * 4);
  }
  if (uVar5 + uVar1 < param_5) {
    if (8 < uVar5) {
      uVar4 = dcgettext(0,"Encoded size of %d is too large to read\n",5);
      warn(uVar4,uVar5);
      *param_1 = param_5;
      return 0;
    }
    if (uVar5 != 0) {
      if ((param_2 & 8) == 0) {
        lVar3 = (*DAT_00159e20)();
      }
      else {
        lVar3 = FUN_00137cb0(uVar1,uVar5);
      }
      if ((param_2 & 0x70) == 0x10) {
        lVar3 = lVar3 + (uVar1 - *param_3) + *param_4;
      }
      *param_1 = uVar5 + uVar1;
      return lVar3;
    }
    pcVar6 = "Encoded size of 0 is too small to read\n";
  }
  else {
    pcVar6 = "Encoded value extends past end of section\n";
  }
  uVar4 = dcgettext(0,pcVar6,5);
  warn(uVar4);
  *param_1 = param_5;
  return 0;
}

