
/* WARNING: Switch with 1 destination removed at 0x00106320 */

int png_handle_as_unknown(png_const_structrp png_ptr,png_const_bytep chunk_name)

{
  png_bytep ppVar1;
  int iVar2;
  png_bytep __s2;
  png_bytep ppVar3;
  
  if ((png_ptr != (png_const_structrp)0x0) && (chunk_name != (png_const_bytep)0x0)) {
    if (png_ptr->num_chunk_list == 0) {
      return 0;
    }
    ppVar1 = png_ptr->chunk_list;
    ppVar3 = ppVar1 + png_ptr->num_chunk_list * 5;
    do {
      __s2 = ppVar3 + -5;
      iVar2 = memcmp(chunk_name,__s2,4);
      if (iVar2 == 0) {
        return (uint)ppVar3[-1];
      }
      ppVar3 = __s2;
    } while (ppVar1 < __s2);
    return 0;
  }
  return 0;
}



/* WARNING: Switch with 1 destination removed at 0x00106320 */

undefined1 png_handle_as_unknown(long param_1,void *param_2)

{
  void *pvVar1;
  int iVar2;
  void *__s2;
  void *pvVar3;
  
  if ((param_1 != 0) && (param_2 != (void *)0x0)) {
    if (*(int *)(param_1 + 0x3c4) == 0) {
      return 0;
    }
    pvVar1 = *(void **)(param_1 + 0x3c8);
    pvVar3 = (void *)((ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5) + (long)pvVar1);
    do {
      __s2 = (void *)((long)pvVar3 + -5);
      iVar2 = memcmp(param_2,__s2,4);
      if (iVar2 == 0) {
        return *(undefined1 *)((long)pvVar3 + -1);
      }
      pvVar3 = __s2;
    } while (pvVar1 < __s2);
    return 0;
  }
  return 0;
}


JMP qword ptr [0x00134cc8]
(translation_unit "/* WARNING: Switch with 1 destination removed at 0x00106320 */\n\nundefined1 png_handle_as_unknown(long param_1,void *param_2)\n\n{\n  void *pvVar1;\n  int iVar2;\n  void *__s2;\n  void *pvVar3;\n  \n  if ((param_1 != 0) && (param_2 != (void *)0x0)) {\n    if (*(int *)(param_1 + 0x3c4) == 0) {\n      return 0;\n    }\n    pvVar1 = *(void **)(param_1 + 0x3c8);\n    pvVar3 = (void *)((ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5) + (long)pvVar1);\n    do {\n      __s2 = (void *)((long)pvVar3 + -5);\n      iVar2 = memcmp(param_2,__s2,4);\n      if (iVar2 == 0) {\n        return *(undefined1 *)((long)pvVar3 + -1);\n      }\n      pvVar3 = __s2;\n    } while (pvVar1 < __s2);\n    return 0;\n  }\n  return 0;\n}\n\n" comment (function_definition "undefined1 png_handle_as_unknown(long param_1,void *param_2)\n\n{\n  void *pvVar1;\n  int iVar2;\n  void *__s2;\n  void *pvVar3;\n  \n  if ((param_1 != 0) && (param_2 != (void *)0x0)) {\n    if (*(int *)(param_1 + 0x3c4) == 0) {\n      return 0;\n    }\n    pvVar1 = *(void **)(param_1 + 0x3c8);\n    pvVar3 = (void *)((ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5) + (long)pvVar1);\n    do {\n      __s2 = (void *)((long)pvVar3 + -5);\n      iVar2 = memcmp(param_2,__s2,4);\n      if (iVar2 == 0) {\n        return *(undefined1 *)((long)pvVar3 + -1);\n      }\n      pvVar3 = __s2;\n    } while (pvVar1 < __s2);\n    return 0;\n  }\n  return 0;\n}" type_identifier (function_declarator "png_handle_as_unknown(long param_1,void *param_2)" identifier (parameter_list "(long param_1,void *param_2)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "void *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  void *pvVar1;\n  int iVar2;\n  void *__s2;\n  void *pvVar3;\n  \n  if ((param_1 != 0) && (param_2 != (void *)0x0)) {\n    if (*(int *)(param_1 + 0x3c4) == 0) {\n      return 0;\n    }\n    pvVar1 = *(void **)(param_1 + 0x3c8);\n    pvVar3 = (void *)((ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5) + (long)pvVar1);\n    do {\n      __s2 = (void *)((long)pvVar3 + -5);\n      iVar2 = memcmp(param_2,__s2,4);\n      if (iVar2 == 0) {\n        return *(undefined1 *)((long)pvVar3 + -1);\n      }\n      pvVar3 = __s2;\n    } while (pvVar1 < __s2);\n    return 0;\n  }\n  return 0;\n}" { (declaration "void *pvVar1;" primitive_type (pointer_declarator "*pvVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "void *__s2;" primitive_type (pointer_declarator "*__s2" * identifier) ;) (declaration "void *pvVar3;" primitive_type (pointer_declarator "*pvVar3" * identifier) ;) (if_statement "if ((param_1 != 0) && (param_2 != (void *)0x0)) {\n    if (*(int *)(param_1 + 0x3c4) == 0) {\n      return 0;\n    }\n    pvVar1 = *(void **)(param_1 + 0x3c8);\n    pvVar3 = (void *)((ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5) + (long)pvVar1);\n    do {\n      __s2 = (void *)((long)pvVar3 + -5);\n      iVar2 = memcmp(param_2,__s2,4);\n      if (iVar2 == 0) {\n        return *(undefined1 *)((long)pvVar3 + -1);\n      }\n      pvVar3 = __s2;\n    } while (pvVar1 < __s2);\n    return 0;\n  }" if (parenthesized_expression "((param_1 != 0) && (param_2 != (void *)0x0))" ( (binary_expression "(param_1 != 0) && (param_2 != (void *)0x0)" (parenthesized_expression "(param_1 != 0)" ( (binary_expression "param_1 != 0" identifier != number_literal) )) && (parenthesized_expression "(param_2 != (void *)0x0)" ( (binary_expression "param_2 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n    if (*(int *)(param_1 + 0x3c4) == 0) {\n      return 0;\n    }\n    pvVar1 = *(void **)(param_1 + 0x3c8);\n    pvVar3 = (void *)((ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5) + (long)pvVar1);\n    do {\n      __s2 = (void *)((long)pvVar3 + -5);\n      iVar2 = memcmp(param_2,__s2,4);\n      if (iVar2 == 0) {\n        return *(undefined1 *)((long)pvVar3 + -1);\n      }\n      pvVar3 = __s2;\n    } while (pvVar1 < __s2);\n    return 0;\n  }" { (if_statement "if (*(int *)(param_1 + 0x3c4) == 0) {\n      return 0;\n    }" if (parenthesized_expression "(*(int *)(param_1 + 0x3c4) == 0)" ( (binary_expression "*(int *)(param_1 + 0x3c4) == 0" (pointer_expression "*(int *)(param_1 + 0x3c4)" * (cast_expression "(int *)(param_1 + 0x3c4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x3c4)" ( (binary_expression "param_1 + 0x3c4" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "pvVar1 = *(void **)(param_1 + 0x3c8);" (assignment_expression "pvVar1 = *(void **)(param_1 + 0x3c8)" identifier = (pointer_expression "*(void **)(param_1 + 0x3c8)" * (cast_expression "(void **)(param_1 + 0x3c8)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x3c8)" ( (binary_expression "param_1 + 0x3c8" identifier + number_literal) ))))) ;) (expression_statement "pvVar3 = (void *)((ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5) + (long)pvVar1);" (assignment_expression "pvVar3 = (void *)((ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5) + (long)pvVar1)" identifier = (cast_expression "(void *)((ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5) + (long)pvVar1)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5) + (long)pvVar1)" ( (binary_expression "(ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5) + (long)pvVar1" (call_expression "(ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5)" (call_expression "(ulong)(uint)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uint)" ( identifier ))) (argument_list "(*(int *)(param_1 + 0x3c4) * 5)" ( (binary_expression "*(int *)(param_1 + 0x3c4) * 5" (pointer_expression "*(int *)(param_1 + 0x3c4)" * (cast_expression "(int *)(param_1 + 0x3c4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x3c4)" ( (binary_expression "param_1 + 0x3c4" identifier + number_literal) )))) * number_literal) ))) + (cast_expression "(long)pvVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )))) ;) (do_statement "do {\n      __s2 = (void *)((long)pvVar3 + -5);\n      iVar2 = memcmp(param_2,__s2,4);\n      if (iVar2 == 0) {\n        return *(undefined1 *)((long)pvVar3 + -1);\n      }\n      pvVar3 = __s2;\n    } while (pvVar1 < __s2);" do (compound_statement "{\n      __s2 = (void *)((long)pvVar3 + -5);\n      iVar2 = memcmp(param_2,__s2,4);\n      if (iVar2 == 0) {\n        return *(undefined1 *)((long)pvVar3 + -1);\n      }\n      pvVar3 = __s2;\n    }" { (expression_statement "__s2 = (void *)((long)pvVar3 + -5);" (assignment_expression "__s2 = (void *)((long)pvVar3 + -5)" identifier = (cast_expression "(void *)((long)pvVar3 + -5)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pvVar3 + -5)" ( (binary_expression "(long)pvVar3 + -5" (cast_expression "(long)pvVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) (expression_statement "iVar2 = memcmp(param_2,__s2,4);" (assignment_expression "iVar2 = memcmp(param_2,__s2,4)" identifier = (call_expression "memcmp(param_2,__s2,4)" identifier (argument_list "(param_2,__s2,4)" ( identifier , identifier , number_literal )))) ;) (if_statement "if (iVar2 == 0) {\n        return *(undefined1 *)((long)pvVar3 + -1);\n      }" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (compound_statement "{\n        return *(undefined1 *)((long)pvVar3 + -1);\n      }" { (return_statement "return *(undefined1 *)((long)pvVar3 + -1);" return (pointer_expression "*(undefined1 *)((long)pvVar3 + -1)" * (cast_expression "(undefined1 *)((long)pvVar3 + -1)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pvVar3 + -1)" ( (binary_expression "(long)pvVar3 + -1" (cast_expression "(long)pvVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) })) (expression_statement "pvVar3 = __s2;" (assignment_expression "pvVar3 = __s2" identifier = identifier) ;) }) while (parenthesized_expression "(pvVar1 < __s2)" ( (binary_expression "pvVar1 < __s2" identifier < identifier) )) ;) (return_statement "return 0;" return number_literal ;) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "/* WARNING: Switch with 1 destination removed at 0x00106320 */\n\nint png_handle_as_unknown(png_const_structrp png_ptr,png_const_bytep chunk_name)\n\n{\n  png_bytep ppVar1;\n  int iVar2;\n  png_bytep __s2;\n  png_bytep ppVar3;\n  \n  if ((png_ptr != (png_const_structrp)0x0) && (chunk_name != (png_const_bytep)0x0)) {\n    if (png_ptr->num_chunk_list == 0) {\n      return 0;\n    }\n    ppVar1 = png_ptr->chunk_list;\n    ppVar3 = ppVar1 + png_ptr->num_chunk_list * 5;\n    do {\n      __s2 = ppVar3 + -5;\n      iVar2 = memcmp(chunk_name,__s2,4);\n      if (iVar2 == 0) {\n        return (uint)ppVar3[-1];\n      }\n      ppVar3 = __s2;\n    } while (ppVar1 < __s2);\n    return 0;\n  }\n  return 0;\n}\n\n" comment (function_definition "int png_handle_as_unknown(png_const_structrp png_ptr,png_const_bytep chunk_name)\n\n{\n  png_bytep ppVar1;\n  int iVar2;\n  png_bytep __s2;\n  png_bytep ppVar3;\n  \n  if ((png_ptr != (png_const_structrp)0x0) && (chunk_name != (png_const_bytep)0x0)) {\n    if (png_ptr->num_chunk_list == 0) {\n      return 0;\n    }\n    ppVar1 = png_ptr->chunk_list;\n    ppVar3 = ppVar1 + png_ptr->num_chunk_list * 5;\n    do {\n      __s2 = ppVar3 + -5;\n      iVar2 = memcmp(chunk_name,__s2,4);\n      if (iVar2 == 0) {\n        return (uint)ppVar3[-1];\n      }\n      ppVar3 = __s2;\n    } while (ppVar1 < __s2);\n    return 0;\n  }\n  return 0;\n}" primitive_type (function_declarator "png_handle_as_unknown(png_const_structrp png_ptr,png_const_bytep chunk_name)" identifier (parameter_list "(png_const_structrp png_ptr,png_const_bytep chunk_name)" ( (parameter_declaration "png_const_structrp png_ptr" type_identifier identifier) , (parameter_declaration "png_const_bytep chunk_name" type_identifier identifier) ))) (compound_statement "{\n  png_bytep ppVar1;\n  int iVar2;\n  png_bytep __s2;\n  png_bytep ppVar3;\n  \n  if ((png_ptr != (png_const_structrp)0x0) && (chunk_name != (png_const_bytep)0x0)) {\n    if (png_ptr->num_chunk_list == 0) {\n      return 0;\n    }\n    ppVar1 = png_ptr->chunk_list;\n    ppVar3 = ppVar1 + png_ptr->num_chunk_list * 5;\n    do {\n      __s2 = ppVar3 + -5;\n      iVar2 = memcmp(chunk_name,__s2,4);\n      if (iVar2 == 0) {\n        return (uint)ppVar3[-1];\n      }\n      ppVar3 = __s2;\n    } while (ppVar1 < __s2);\n    return 0;\n  }\n  return 0;\n}" { (declaration "png_bytep ppVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "png_bytep __s2;" type_identifier identifier ;) (declaration "png_bytep ppVar3;" type_identifier identifier ;) (if_statement "if ((png_ptr != (png_const_structrp)0x0) && (chunk_name != (png_const_bytep)0x0)) {\n    if (png_ptr->num_chunk_list == 0) {\n      return 0;\n    }\n    ppVar1 = png_ptr->chunk_list;\n    ppVar3 = ppVar1 + png_ptr->num_chunk_list * 5;\n    do {\n      __s2 = ppVar3 + -5;\n      iVar2 = memcmp(chunk_name,__s2,4);\n      if (iVar2 == 0) {\n        return (uint)ppVar3[-1];\n      }\n      ppVar3 = __s2;\n    } while (ppVar1 < __s2);\n    return 0;\n  }" if (parenthesized_expression "((png_ptr != (png_const_structrp)0x0) && (chunk_name != (png_const_bytep)0x0))" ( (binary_expression "(png_ptr != (png_const_structrp)0x0) && (chunk_name != (png_const_bytep)0x0)" (parenthesized_expression "(png_ptr != (png_const_structrp)0x0)" ( (binary_expression "png_ptr != (png_const_structrp)0x0" identifier != (cast_expression "(png_const_structrp)0x0" ( (type_descriptor "png_const_structrp" type_identifier) ) number_literal)) )) && (parenthesized_expression "(chunk_name != (png_const_bytep)0x0)" ( (binary_expression "chunk_name != (png_const_bytep)0x0" identifier != (cast_expression "(png_const_bytep)0x0" ( (type_descriptor "png_const_bytep" type_identifier) ) number_literal)) ))) )) (compound_statement "{\n    if (png_ptr->num_chunk_list == 0) {\n      return 0;\n    }\n    ppVar1 = png_ptr->chunk_list;\n    ppVar3 = ppVar1 + png_ptr->num_chunk_list * 5;\n    do {\n      __s2 = ppVar3 + -5;\n      iVar2 = memcmp(chunk_name,__s2,4);\n      if (iVar2 == 0) {\n        return (uint)ppVar3[-1];\n      }\n      ppVar3 = __s2;\n    } while (ppVar1 < __s2);\n    return 0;\n  }" { (if_statement "if (png_ptr->num_chunk_list == 0) {\n      return 0;\n    }" if (parenthesized_expression "(png_ptr->num_chunk_list == 0)" ( (binary_expression "png_ptr->num_chunk_list == 0" (field_expression "png_ptr->num_chunk_list" identifier -> field_identifier) == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "ppVar1 = png_ptr->chunk_list;" (assignment_expression "ppVar1 = png_ptr->chunk_list" identifier = (field_expression "png_ptr->chunk_list" identifier -> field_identifier)) ;) (expression_statement "ppVar3 = ppVar1 + png_ptr->num_chunk_list * 5;" (assignment_expression "ppVar3 = ppVar1 + png_ptr->num_chunk_list * 5" identifier = (binary_expression "ppVar1 + png_ptr->num_chunk_list * 5" identifier + (binary_expression "png_ptr->num_chunk_list * 5" (field_expression "png_ptr->num_chunk_list" identifier -> field_identifier) * number_literal))) ;) (do_statement "do {\n      __s2 = ppVar3 + -5;\n      iVar2 = memcmp(chunk_name,__s2,4);\n      if (iVar2 == 0) {\n        return (uint)ppVar3[-1];\n      }\n      ppVar3 = __s2;\n    } while (ppVar1 < __s2);" do (compound_statement "{\n      __s2 = ppVar3 + -5;\n      iVar2 = memcmp(chunk_name,__s2,4);\n      if (iVar2 == 0) {\n        return (uint)ppVar3[-1];\n      }\n      ppVar3 = __s2;\n    }" { (expression_statement "__s2 = ppVar3 + -5;" (assignment_expression "__s2 = ppVar3 + -5" identifier = (binary_expression "ppVar3 + -5" identifier + number_literal)) ;) (expression_statement "iVar2 = memcmp(chunk_name,__s2,4);" (assignment_expression "iVar2 = memcmp(chunk_name,__s2,4)" identifier = (call_expression "memcmp(chunk_name,__s2,4)" identifier (argument_list "(chunk_name,__s2,4)" ( identifier , identifier , number_literal )))) ;) (if_statement "if (iVar2 == 0) {\n        return (uint)ppVar3[-1];\n      }" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (compound_statement "{\n        return (uint)ppVar3[-1];\n      }" { (return_statement "return (uint)ppVar3[-1];" return (cast_expression "(uint)ppVar3[-1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "ppVar3[-1]" identifier [ number_literal ])) ;) })) (expression_statement "ppVar3 = __s2;" (assignment_expression "ppVar3 = __s2" identifier = identifier) ;) }) while (parenthesized_expression "(ppVar1 < __s2)" ( (binary_expression "ppVar1 < __s2" identifier < identifier) )) ;) (return_statement "return 0;" return number_literal ;) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "undefined1 png_handle_as_unknown(long param_1,void *param_2)\n\n{\n  void *pvVar1;\n  int iVar2;\n  void *__s2;\n  void *pvVar3;\n  \n  if ((param_1 != 0) && (param_2 != (void *)0x0)) {\n    if (*(int *)(param_1 + 0x3c4) == 0) {\n      return 0;\n    }\n    pvVar1 = *(void **)(param_1 + 0x3c8);\n    pvVar3 = (void *)((ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5) + (long)pvVar1);\n    do {\n      __s2 = (void *)((long)pvVar3 + -5);\n      iVar2 = memcmp(param_2,__s2,4);\n      if (iVar2 == 0) {\n        return *(undefined1 *)((long)pvVar3 + -1);\n      }\n      pvVar3 = __s2;\n    } while (pvVar1 < __s2);\n    return 0;\n  }\n  return 0;\n}\n\n" (function_definition "undefined1 png_handle_as_unknown(long param_1,void *param_2)\n\n{\n  void *pvVar1;\n  int iVar2;\n  void *__s2;\n  void *pvVar3;\n  \n  if ((param_1 != 0) && (param_2 != (void *)0x0)) {\n    if (*(int *)(param_1 + 0x3c4) == 0) {\n      return 0;\n    }\n    pvVar1 = *(void **)(param_1 + 0x3c8);\n    pvVar3 = (void *)((ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5) + (long)pvVar1);\n    do {\n      __s2 = (void *)((long)pvVar3 + -5);\n      iVar2 = memcmp(param_2,__s2,4);\n      if (iVar2 == 0) {\n        return *(undefined1 *)((long)pvVar3 + -1);\n      }\n      pvVar3 = __s2;\n    } while (pvVar1 < __s2);\n    return 0;\n  }\n  return 0;\n}" type_identifier (function_declarator "png_handle_as_unknown(long param_1,void *param_2)" identifier (parameter_list "(long param_1,void *param_2)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "void *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  void *pvVar1;\n  int iVar2;\n  void *__s2;\n  void *pvVar3;\n  \n  if ((param_1 != 0) && (param_2 != (void *)0x0)) {\n    if (*(int *)(param_1 + 0x3c4) == 0) {\n      return 0;\n    }\n    pvVar1 = *(void **)(param_1 + 0x3c8);\n    pvVar3 = (void *)((ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5) + (long)pvVar1);\n    do {\n      __s2 = (void *)((long)pvVar3 + -5);\n      iVar2 = memcmp(param_2,__s2,4);\n      if (iVar2 == 0) {\n        return *(undefined1 *)((long)pvVar3 + -1);\n      }\n      pvVar3 = __s2;\n    } while (pvVar1 < __s2);\n    return 0;\n  }\n  return 0;\n}" { (declaration "void *pvVar1;" primitive_type (pointer_declarator "*pvVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "void *__s2;" primitive_type (pointer_declarator "*__s2" * identifier) ;) (declaration "void *pvVar3;" primitive_type (pointer_declarator "*pvVar3" * identifier) ;) (if_statement "if ((param_1 != 0) && (param_2 != (void *)0x0)) {\n    if (*(int *)(param_1 + 0x3c4) == 0) {\n      return 0;\n    }\n    pvVar1 = *(void **)(param_1 + 0x3c8);\n    pvVar3 = (void *)((ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5) + (long)pvVar1);\n    do {\n      __s2 = (void *)((long)pvVar3 + -5);\n      iVar2 = memcmp(param_2,__s2,4);\n      if (iVar2 == 0) {\n        return *(undefined1 *)((long)pvVar3 + -1);\n      }\n      pvVar3 = __s2;\n    } while (pvVar1 < __s2);\n    return 0;\n  }" if (parenthesized_expression "((param_1 != 0) && (param_2 != (void *)0x0))" ( (binary_expression "(param_1 != 0) && (param_2 != (void *)0x0)" (parenthesized_expression "(param_1 != 0)" ( (binary_expression "param_1 != 0" identifier != number_literal) )) && (parenthesized_expression "(param_2 != (void *)0x0)" ( (binary_expression "param_2 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n    if (*(int *)(param_1 + 0x3c4) == 0) {\n      return 0;\n    }\n    pvVar1 = *(void **)(param_1 + 0x3c8);\n    pvVar3 = (void *)((ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5) + (long)pvVar1);\n    do {\n      __s2 = (void *)((long)pvVar3 + -5);\n      iVar2 = memcmp(param_2,__s2,4);\n      if (iVar2 == 0) {\n        return *(undefined1 *)((long)pvVar3 + -1);\n      }\n      pvVar3 = __s2;\n    } while (pvVar1 < __s2);\n    return 0;\n  }" { (if_statement "if (*(int *)(param_1 + 0x3c4) == 0) {\n      return 0;\n    }" if (parenthesized_expression "(*(int *)(param_1 + 0x3c4) == 0)" ( (binary_expression "*(int *)(param_1 + 0x3c4) == 0" (pointer_expression "*(int *)(param_1 + 0x3c4)" * (cast_expression "(int *)(param_1 + 0x3c4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x3c4)" ( (binary_expression "param_1 + 0x3c4" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "pvVar1 = *(void **)(param_1 + 0x3c8);" (assignment_expression "pvVar1 = *(void **)(param_1 + 0x3c8)" identifier = (pointer_expression "*(void **)(param_1 + 0x3c8)" * (cast_expression "(void **)(param_1 + 0x3c8)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x3c8)" ( (binary_expression "param_1 + 0x3c8" identifier + number_literal) ))))) ;) (expression_statement "pvVar3 = (void *)((ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5) + (long)pvVar1);" (assignment_expression "pvVar3 = (void *)((ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5) + (long)pvVar1)" identifier = (cast_expression "(void *)((ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5) + (long)pvVar1)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5) + (long)pvVar1)" ( (binary_expression "(ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5) + (long)pvVar1" (call_expression "(ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5)" (call_expression "(ulong)(uint)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uint)" ( identifier ))) (argument_list "(*(int *)(param_1 + 0x3c4) * 5)" ( (binary_expression "*(int *)(param_1 + 0x3c4) * 5" (pointer_expression "*(int *)(param_1 + 0x3c4)" * (cast_expression "(int *)(param_1 + 0x3c4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x3c4)" ( (binary_expression "param_1 + 0x3c4" identifier + number_literal) )))) * number_literal) ))) + (cast_expression "(long)pvVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )))) ;) (do_statement "do {\n      __s2 = (void *)((long)pvVar3 + -5);\n      iVar2 = memcmp(param_2,__s2,4);\n      if (iVar2 == 0) {\n        return *(undefined1 *)((long)pvVar3 + -1);\n      }\n      pvVar3 = __s2;\n    } while (pvVar1 < __s2);" do (compound_statement "{\n      __s2 = (void *)((long)pvVar3 + -5);\n      iVar2 = memcmp(param_2,__s2,4);\n      if (iVar2 == 0) {\n        return *(undefined1 *)((long)pvVar3 + -1);\n      }\n      pvVar3 = __s2;\n    }" { (expression_statement "__s2 = (void *)((long)pvVar3 + -5);" (assignment_expression "__s2 = (void *)((long)pvVar3 + -5)" identifier = (cast_expression "(void *)((long)pvVar3 + -5)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pvVar3 + -5)" ( (binary_expression "(long)pvVar3 + -5" (cast_expression "(long)pvVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) (expression_statement "iVar2 = memcmp(param_2,__s2,4);" (assignment_expression "iVar2 = memcmp(param_2,__s2,4)" identifier = (call_expression "memcmp(param_2,__s2,4)" identifier (argument_list "(param_2,__s2,4)" ( identifier , identifier , number_literal )))) ;) (if_statement "if (iVar2 == 0) {\n        return *(undefined1 *)((long)pvVar3 + -1);\n      }" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (compound_statement "{\n        return *(undefined1 *)((long)pvVar3 + -1);\n      }" { (return_statement "return *(undefined1 *)((long)pvVar3 + -1);" return (pointer_expression "*(undefined1 *)((long)pvVar3 + -1)" * (cast_expression "(undefined1 *)((long)pvVar3 + -1)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pvVar3 + -1)" ( (binary_expression "(long)pvVar3 + -1" (cast_expression "(long)pvVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) })) (expression_statement "pvVar3 = __s2;" (assignment_expression "pvVar3 = __s2" identifier = identifier) ;) }) while (parenthesized_expression "(pvVar1 < __s2)" ( (binary_expression "pvVar1 < __s2" identifier < identifier) )) ;) (return_statement "return 0;" return number_literal ;) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (call_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( IDENT ))) (argument_list ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) * LIT) ))) + (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) )))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) (return_statement return LIT ;) })) (return_statement return LIT ;) })))
(function_definition "undefined1 png_handle_as_unknown(long param_1,void *param_2)\n\n{\n  void *pvVar1;\n  int iVar2;\n  void *__s2;\n  void *pvVar3;\n  \n  if ((param_1 != 0) && (param_2 != (void *)0x0)) {\n    if (*(int *)(param_1 + 0x3c4) == 0) {\n      return 0;\n    }\n    pvVar1 = *(void **)(param_1 + 0x3c8);\n    pvVar3 = (void *)((ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5) + (long)pvVar1);\n    do {\n      __s2 = (void *)((long)pvVar3 + -5);\n      iVar2 = memcmp(param_2,__s2,4);\n      if (iVar2 == 0) {\n        return *(undefined1 *)((long)pvVar3 + -1);\n      }\n      pvVar3 = __s2;\n    } while (pvVar1 < __s2);\n    return 0;\n  }\n  return 0;\n}" (type_identifier "undefined1") (function_declarator "png_handle_as_unknown(long param_1,void *param_2)" (identifier "png_handle_as_unknown") (parameter_list "(long param_1,void *param_2)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "void *param_2" (primitive_type "void") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) () ")"))) (compound_statement "{\n  void *pvVar1;\n  int iVar2;\n  void *__s2;\n  void *pvVar3;\n  \n  if ((param_1 != 0) && (param_2 != (void *)0x0)) {\n    if (*(int *)(param_1 + 0x3c4) == 0) {\n      return 0;\n    }\n    pvVar1 = *(void **)(param_1 + 0x3c8);\n    pvVar3 = (void *)((ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5) + (long)pvVar1);\n    do {\n      __s2 = (void *)((long)pvVar3 + -5);\n      iVar2 = memcmp(param_2,__s2,4);\n      if (iVar2 == 0) {\n        return *(undefined1 *)((long)pvVar3 + -1);\n      }\n      pvVar3 = __s2;\n    } while (pvVar1 < __s2);\n    return 0;\n  }\n  return 0;\n}" ({ "{") (declaration "void *pvVar1;" (primitive_type "void") (pointer_declarator "*pvVar1" (* "*") (identifier "pvVar1")) (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "void *__s2;" (primitive_type "void") (pointer_declarator "*__s2" (* "*") (identifier "__s2")) (; ";")) (declaration "void *pvVar3;" (primitive_type "void") (pointer_declarator "*pvVar3" (* "*") (identifier "pvVar3")) (; ";")) (if_statement "if ((param_1 != 0) && (param_2 != (void *)0x0)) {\n    if (*(int *)(param_1 + 0x3c4) == 0) {\n      return 0;\n    }\n    pvVar1 = *(void **)(param_1 + 0x3c8);\n    pvVar3 = (void *)((ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5) + (long)pvVar1);\n    do {\n      __s2 = (void *)((long)pvVar3 + -5);\n      iVar2 = memcmp(param_2,__s2,4);\n      if (iVar2 == 0) {\n        return *(undefined1 *)((long)pvVar3 + -1);\n      }\n      pvVar3 = __s2;\n    } while (pvVar1 < __s2);\n    return 0;\n  }" (if "if") (parenthesized_expression "((param_1 != 0) && (param_2 != (void *)0x0))" (( "(") (binary_expression "(param_1 != 0) && (param_2 != (void *)0x0)" (parenthesized_expression "(param_1 != 0)" (( "(") (binary_expression "param_1 != 0" (identifier "param_1") (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(param_2 != (void *)0x0)" (( "(") (binary_expression "param_2 != (void *)0x0" (identifier "param_2") (!= "!=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")"))) () ")")) (compound_statement "{\n    if (*(int *)(param_1 + 0x3c4) == 0) {\n      return 0;\n    }\n    pvVar1 = *(void **)(param_1 + 0x3c8);\n    pvVar3 = (void *)((ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5) + (long)pvVar1);\n    do {\n      __s2 = (void *)((long)pvVar3 + -5);\n      iVar2 = memcmp(param_2,__s2,4);\n      if (iVar2 == 0) {\n        return *(undefined1 *)((long)pvVar3 + -1);\n      }\n      pvVar3 = __s2;\n    } while (pvVar1 < __s2);\n    return 0;\n  }" ({ "{") (if_statement "if (*(int *)(param_1 + 0x3c4) == 0) {\n      return 0;\n    }" (if "if") (parenthesized_expression "(*(int *)(param_1 + 0x3c4) == 0)" (( "(") (binary_expression "*(int *)(param_1 + 0x3c4) == 0" (pointer_expression "*(int *)(param_1 + 0x3c4)" (* "*") (cast_expression "(int *)(param_1 + 0x3c4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x3c4)" (( "(") (binary_expression "param_1 + 0x3c4" (identifier "param_1") (+ "+") (number_literal "0x3c4")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return 0;\n    }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "pvVar1 = *(void **)(param_1 + 0x3c8);" (assignment_expression "pvVar1 = *(void **)(param_1 + 0x3c8)" (identifier "pvVar1") (= "=") (pointer_expression "*(void **)(param_1 + 0x3c8)" (* "*") (cast_expression "(void **)(param_1 + 0x3c8)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x3c8)" (( "(") (binary_expression "param_1 + 0x3c8" (identifier "param_1") (+ "+") (number_literal "0x3c8")) () ")"))))) (; ";")) (expression_statement "pvVar3 = (void *)((ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5) + (long)pvVar1);" (assignment_expression "pvVar3 = (void *)((ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5) + (long)pvVar1)" (identifier "pvVar3") (= "=") (cast_expression "(void *)((ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5) + (long)pvVar1)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5) + (long)pvVar1)" (( "(") (binary_expression "(ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5) + (long)pvVar1" (call_expression "(ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5)" (call_expression "(ulong)(uint)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(uint)" (( "(") (identifier "uint") () ")"))) (argument_list "(*(int *)(param_1 + 0x3c4) * 5)" (( "(") (binary_expression "*(int *)(param_1 + 0x3c4) * 5" (pointer_expression "*(int *)(param_1 + 0x3c4)" (* "*") (cast_expression "(int *)(param_1 + 0x3c4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x3c4)" (( "(") (binary_expression "param_1 + 0x3c4" (identifier "param_1") (+ "+") (number_literal "0x3c4")) () ")")))) (* "*") (number_literal "5")) () ")"))) (+ "+") (cast_expression "(long)pvVar1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pvVar1"))) () ")")))) (; ";")) (do_statement "do {\n      __s2 = (void *)((long)pvVar3 + -5);\n      iVar2 = memcmp(param_2,__s2,4);\n      if (iVar2 == 0) {\n        return *(undefined1 *)((long)pvVar3 + -1);\n      }\n      pvVar3 = __s2;\n    } while (pvVar1 < __s2);" (do "do") (compound_statement "{\n      __s2 = (void *)((long)pvVar3 + -5);\n      iVar2 = memcmp(param_2,__s2,4);\n      if (iVar2 == 0) {\n        return *(undefined1 *)((long)pvVar3 + -1);\n      }\n      pvVar3 = __s2;\n    }" ({ "{") (expression_statement "__s2 = (void *)((long)pvVar3 + -5);" (assignment_expression "__s2 = (void *)((long)pvVar3 + -5)" (identifier "__s2") (= "=") (cast_expression "(void *)((long)pvVar3 + -5)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)pvVar3 + -5)" (( "(") (binary_expression "(long)pvVar3 + -5" (cast_expression "(long)pvVar3" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pvVar3")) (+ "+") (number_literal "-5")) () ")")))) (; ";")) (expression_statement "iVar2 = memcmp(param_2,__s2,4);" (assignment_expression "iVar2 = memcmp(param_2,__s2,4)" (identifier "iVar2") (= "=") (call_expression "memcmp(param_2,__s2,4)" (identifier "memcmp") (argument_list "(param_2,__s2,4)" (( "(") (identifier "param_2") (, ",") (identifier "__s2") (, ",") (number_literal "4") () ")")))) (; ";")) (if_statement "if (iVar2 == 0) {\n        return *(undefined1 *)((long)pvVar3 + -1);\n      }" (if "if") (parenthesized_expression "(iVar2 == 0)" (( "(") (binary_expression "iVar2 == 0" (identifier "iVar2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return *(undefined1 *)((long)pvVar3 + -1);\n      }" ({ "{") (return_statement "return *(undefined1 *)((long)pvVar3 + -1);" (return "return") (pointer_expression "*(undefined1 *)((long)pvVar3 + -1)" (* "*") (cast_expression "(undefined1 *)((long)pvVar3 + -1)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)pvVar3 + -1)" (( "(") (binary_expression "(long)pvVar3 + -1" (cast_expression "(long)pvVar3" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pvVar3")) (+ "+") (number_literal "-1")) () ")")))) (; ";")) (} "}"))) (expression_statement "pvVar3 = __s2;" (assignment_expression "pvVar3 = __s2" (identifier "pvVar3") (= "=") (identifier "__s2")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(pvVar1 < __s2)" (( "(") (binary_expression "pvVar1 < __s2" (identifier "pvVar1") (< "<") (identifier "__s2")) () ")")) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))

/* WARNING: Switch with 1 destination removed at 0x00106320 */

int function_1(type_1 var_1,type_2 var_2)

{
  type_3 var_3;
  int var_6;
  type_3 var_7;
  type_3 var_4;
  
  if ((var_1 != (type_1)0x0) && (var_2 != (type_2)0x0)) {
    if (var_1->num_chunk_list == 0) {
      return 0;
    }
    var_3 = var_1->chunk_list;
    var_4 = var_3 + var_1->num_chunk_list * 5;
    do {
      var_7 = var_4 + -5;
      var_6 = var_5(var_2,var_7,4);
      if (var_6 == 0) {
        return (type_4)var_4[-1];
      }
      var_4 = var_7;
    } while (var_3 < var_7);
    return 0;
  }
  return 0;
}


(translation_unit (function_definition type: (type_identifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (call_expression function: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (identifier))) arguments: (argument_list (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier))))))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))) (return_statement (number_literal)))) (return_statement (number_literal)))))

/* WARNING: Switch with 1 destination removed at 0x00106320 */

undefined1 MASKED(long param_1,void *param_2)

{
  void *pvVar1;
  int iVar2;
  void *__s2;
  void *pvVar3;
  
  if ((param_1 != 0) && (param_2 != (void *)0x0)) {
    if (*(int *)(param_1 + 0x3c4) == 0) {
      return 0;
    }
    pvVar1 = *(void **)(param_1 + 0x3c8);
    pvVar3 = (void *)((ulong)(uint)(*(int *)(param_1 + 0x3c4) * 5) + (long)pvVar1);
    do {
      __s2 = (void *)((long)pvVar3 + -5);
      iVar2 = memcmp(param_2,__s2,4);
      if (iVar2 == 0) {
        return *(undefined1 *)((long)pvVar3 + -1);
      }
      pvVar3 = __s2;
    } while (pvVar1 < __s2);
    return 0;
  }
  return 0;
}

