
/* DWARF original name: find_shdr<32, true>
   DWARF original prototype: uchar * find_shdr<32,_true>(Object * this, uchar * pshdrs, char * name,
   char * names, section_size_type names_size, uchar * hdr) */

uchar * __thiscall
gold::Object::find_shdr<32,_true>
          (Object *this,uchar *pshdrs,char *name,char *names,section_size_type names_size,uchar *hdr
          )

{
  uint uVar1;
  size_t sVar2;
  void *pvVar3;
  ulong uVar4;
  uint *puVar5;
  uint uVar6;
  size_t __haystacklen;
  char *__haystack;
  
  uVar1 = this->shnum_;
  if (hdr == (uchar *)0x0) {
    sVar2 = strlen(name);
    sVar2 = sVar2 + 1;
    __haystacklen = names_size;
    __haystack = names;
    goto LAB_0022d8fa;
  }
  uVar6 = *(uint *)hdr;
  uVar4 = (ulong)(uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18);
  while( true ) {
    puVar5 = (uint *)(hdr + 0x28);
    if (puVar5 < pshdrs + uVar1 * 0x28) {
      uVar6 = *(uint *)(hdr + 0x28);
      uVar6 = uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;
      while( true ) {
        if (uVar4 == uVar6) {
          return (uchar *)puVar5;
        }
        puVar5 = puVar5 + 10;
        if (pshdrs + uVar1 * 0x28 <= puVar5) break;
        uVar6 = *puVar5;
        uVar6 = uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;
      }
    }
    if (uVar4 == 0) break;
    sVar2 = strlen(name);
    sVar2 = sVar2 + 1;
    __haystacklen = names_size - (uVar4 + sVar2);
    __haystack = names + uVar4 + sVar2;
LAB_0022d8fa:
    pvVar3 = memmem(__haystack,__haystacklen,name,sVar2);
    if (pvVar3 == (void *)0x0) {
      return (uchar *)0x0;
    }
    uVar4 = (long)pvVar3 - (long)names;
    hdr = pshdrs;
    if (uVar4 == 0) {
      return pshdrs;
    }
  }
  return (uchar *)0x0;
}



uint * FUN_0022d870(long param_1,uint *param_2,char *param_3,void *param_4,size_t param_5,
                   uint *param_6)

{
  int iVar1;
  uint *puVar2;
  size_t sVar3;
  void *pvVar4;
  ulong uVar5;
  uint *puVar6;
  uint uVar7;
  size_t __haystacklen;
  
  iVar1 = *(int *)(param_1 + 0x38);
  if (param_6 == (uint *)0x0) {
    sVar3 = strlen(param_3);
    sVar3 = sVar3 + 1;
    __haystacklen = param_5;
    pvVar4 = param_4;
    goto LAB_0022d8fa;
  }
  uVar7 = *param_6;
  uVar5 = (ulong)(uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18);
  while( true ) {
    puVar6 = param_6 + 10;
    puVar2 = (uint *)((ulong)(uint)(iVar1 * 0x28) + (long)param_2);
    if (puVar6 < puVar2) {
      uVar7 = param_6[10];
      uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;
      while( true ) {
        if (uVar5 == uVar7) {
          return puVar6;
        }
        puVar6 = puVar6 + 10;
        if (puVar2 <= puVar6) break;
        uVar7 = *puVar6;
        uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;
      }
    }
    if (uVar5 == 0) break;
    sVar3 = strlen(param_3);
    sVar3 = sVar3 + 1;
    __haystacklen = param_5 - (uVar5 + sVar3);
    pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);
LAB_0022d8fa:
    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);
    if (pvVar4 == (void *)0x0) {
      return (uint *)0x0;
    }
    uVar5 = (long)pvVar4 - (long)param_4;
    param_6 = param_2;
    if (uVar5 == 0) {
      return param_2;
    }
  }
  return (uint *)0x0;
}


PUSH R15
PUSH R14
PUSH R13
MOV R13,RSI
PUSH R12
MOV R12,R8
PUSH RBP
MOV RBP,RDX
PUSH RBX
MOV RBX,RCX
SUB RSP,0x8
MOV R15D,dword ptr [RDI + 0x38]
TEST R9,R9
JZ 0x0022d930
MOV R14D,dword ptr [R9]
BSWAP R14D
MOV R14D,R14D
LEA EAX,[R15 + R15*0x4]
LEA RCX,[R9 + 0x28]
SHL EAX,0x3
ADD RAX,R13
CMP RAX,RCX
JBE 0x0022d8dc
MOV EDX,dword ptr [R9 + 0x28]
BSWAP EDX
MOV EDX,EDX
CMP R14,RDX
JNZ 0x0022d8d3
JMP 0x0022d915
MOV EDX,dword ptr [RCX]
BSWAP EDX
MOV EDX,EDX
CMP RDX,R14
JZ 0x0022d915
ADD RCX,0x28
CMP RAX,RCX
JA 0x0022d8c8
TEST R14,R14
JZ 0x0022d948
MOV RDI,RBP
CALL 0x00150490
MOV RSI,R12
LEA RCX,[RAX + 0x1]
ADD R14,RCX
LEA RDI,[RBX + R14*0x1]
SUB RSI,R14
MOV RDX,RBP
CALL 0x00150800
TEST RAX,RAX
JZ 0x0022d948
SUB RAX,RBX
MOV R9,R13
MOV RCX,R13
MOV R14,RAX
JNZ 0x0022d8a0
ADD RSP,0x8
MOV RAX,RCX
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV RDI,RDX
CALL 0x00150490
MOV RSI,R12
MOV RDI,RBX
LEA RCX,[RAX + 0x1]
JMP 0x0022d8fa
XOR ECX,ECX
JMP 0x0022d915
(translation_unit "uint * FUN_0022d870(long param_1,uint *param_2,char *param_3,void *param_4,size_t param_5,\n                   uint *param_6)\n\n{\n  int iVar1;\n  uint *puVar2;\n  size_t sVar3;\n  void *pvVar4;\n  ulong uVar5;\n  uint *puVar6;\n  uint uVar7;\n  size_t __haystacklen;\n  \n  iVar1 = *(int *)(param_1 + 0x38);\n  if (param_6 == (uint *)0x0) {\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5;\n    pvVar4 = param_4;\n    goto LAB_0022d8fa;\n  }\n  uVar7 = *param_6;\n  uVar5 = (ulong)(uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18);\n  while( true ) {\n    puVar6 = param_6 + 10;\n    puVar2 = (uint *)((ulong)(uint)(iVar1 * 0x28) + (long)param_2);\n    if (puVar6 < puVar2) {\n      uVar7 = param_6[10];\n      uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      while( true ) {\n        if (uVar5 == uVar7) {\n          return puVar6;\n        }\n        puVar6 = puVar6 + 10;\n        if (puVar2 <= puVar6) break;\n        uVar7 = *puVar6;\n        uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      }\n    }\n    if (uVar5 == 0) break;\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5 - (uVar5 + sVar3);\n    pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);\nLAB_0022d8fa:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);\n    if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar5 = (long)pvVar4 - (long)param_4;\n    param_6 = param_2;\n    if (uVar5 == 0) {\n      return param_2;\n    }\n  }\n  return (uint *)0x0;\n}\n\n" (function_definition "uint * FUN_0022d870(long param_1,uint *param_2,char *param_3,void *param_4,size_t param_5,\n                   uint *param_6)\n\n{\n  int iVar1;\n  uint *puVar2;\n  size_t sVar3;\n  void *pvVar4;\n  ulong uVar5;\n  uint *puVar6;\n  uint uVar7;\n  size_t __haystacklen;\n  \n  iVar1 = *(int *)(param_1 + 0x38);\n  if (param_6 == (uint *)0x0) {\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5;\n    pvVar4 = param_4;\n    goto LAB_0022d8fa;\n  }\n  uVar7 = *param_6;\n  uVar5 = (ulong)(uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18);\n  while( true ) {\n    puVar6 = param_6 + 10;\n    puVar2 = (uint *)((ulong)(uint)(iVar1 * 0x28) + (long)param_2);\n    if (puVar6 < puVar2) {\n      uVar7 = param_6[10];\n      uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      while( true ) {\n        if (uVar5 == uVar7) {\n          return puVar6;\n        }\n        puVar6 = puVar6 + 10;\n        if (puVar2 <= puVar6) break;\n        uVar7 = *puVar6;\n        uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      }\n    }\n    if (uVar5 == 0) break;\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5 - (uVar5 + sVar3);\n    pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);\nLAB_0022d8fa:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);\n    if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar5 = (long)pvVar4 - (long)param_4;\n    param_6 = param_2;\n    if (uVar5 == 0) {\n      return param_2;\n    }\n  }\n  return (uint *)0x0;\n}" type_identifier (pointer_declarator "* FUN_0022d870(long param_1,uint *param_2,char *param_3,void *param_4,size_t param_5,\n                   uint *param_6)" * (function_declarator "FUN_0022d870(long param_1,uint *param_2,char *param_3,void *param_4,size_t param_5,\n                   uint *param_6)" identifier (parameter_list "(long param_1,uint *param_2,char *param_3,void *param_4,size_t param_5,\n                   uint *param_6)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "char *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "void *param_4" primitive_type (pointer_declarator "*param_4" * identifier)) , (parameter_declaration "size_t param_5" primitive_type identifier) , (parameter_declaration "uint *param_6" type_identifier (pointer_declarator "*param_6" * identifier)) )))) (compound_statement "{\n  int iVar1;\n  uint *puVar2;\n  size_t sVar3;\n  void *pvVar4;\n  ulong uVar5;\n  uint *puVar6;\n  uint uVar7;\n  size_t __haystacklen;\n  \n  iVar1 = *(int *)(param_1 + 0x38);\n  if (param_6 == (uint *)0x0) {\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5;\n    pvVar4 = param_4;\n    goto LAB_0022d8fa;\n  }\n  uVar7 = *param_6;\n  uVar5 = (ulong)(uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18);\n  while( true ) {\n    puVar6 = param_6 + 10;\n    puVar2 = (uint *)((ulong)(uint)(iVar1 * 0x28) + (long)param_2);\n    if (puVar6 < puVar2) {\n      uVar7 = param_6[10];\n      uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      while( true ) {\n        if (uVar5 == uVar7) {\n          return puVar6;\n        }\n        puVar6 = puVar6 + 10;\n        if (puVar2 <= puVar6) break;\n        uVar7 = *puVar6;\n        uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      }\n    }\n    if (uVar5 == 0) break;\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5 - (uVar5 + sVar3);\n    pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);\nLAB_0022d8fa:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);\n    if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar5 = (long)pvVar4 - (long)param_4;\n    param_6 = param_2;\n    if (uVar5 == 0) {\n      return param_2;\n    }\n  }\n  return (uint *)0x0;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "uint *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "size_t sVar3;" primitive_type identifier ;) (declaration "void *pvVar4;" primitive_type (pointer_declarator "*pvVar4" * identifier) ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "uint *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "size_t __haystacklen;" primitive_type identifier ;) (expression_statement "iVar1 = *(int *)(param_1 + 0x38);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x38)" identifier = (pointer_expression "*(int *)(param_1 + 0x38)" * (cast_expression "(int *)(param_1 + 0x38)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x38)" ( (binary_expression "param_1 + 0x38" identifier + number_literal) ))))) ;) (if_statement "if (param_6 == (uint *)0x0) {\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5;\n    pvVar4 = param_4;\n    goto LAB_0022d8fa;\n  }" if (parenthesized_expression "(param_6 == (uint *)0x0)" ( (binary_expression "param_6 == (uint *)0x0" identifier == (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5;\n    pvVar4 = param_4;\n    goto LAB_0022d8fa;\n  }" { (expression_statement "sVar3 = strlen(param_3);" (assignment_expression "sVar3 = strlen(param_3)" identifier = (call_expression "strlen(param_3)" identifier (argument_list "(param_3)" ( identifier )))) ;) (expression_statement "sVar3 = sVar3 + 1;" (assignment_expression "sVar3 = sVar3 + 1" identifier = (binary_expression "sVar3 + 1" identifier + number_literal)) ;) (expression_statement "__haystacklen = param_5;" (assignment_expression "__haystacklen = param_5" identifier = identifier) ;) (expression_statement "pvVar4 = param_4;" (assignment_expression "pvVar4 = param_4" identifier = identifier) ;) (goto_statement "goto LAB_0022d8fa;" goto statement_identifier ;) })) (expression_statement "uVar7 = *param_6;" (assignment_expression "uVar7 = *param_6" identifier = (pointer_expression "*param_6" * identifier)) ;) (expression_statement "uVar5 = (ulong)(uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18);" (assignment_expression "uVar5 = (ulong)(uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18)" identifier = (call_expression "(ulong)(uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18)" ( (binary_expression "uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18" (binary_expression "uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8" (binary_expression "uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8" (binary_expression "uVar7 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar7 & 0xff0000) >> 8" (parenthesized_expression "(uVar7 & 0xff0000)" ( (binary_expression "uVar7 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar7 & 0xff00) << 8" (parenthesized_expression "(uVar7 & 0xff00)" ( (binary_expression "uVar7 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar7 << 0x18" identifier << number_literal)) )))) ;) (while_statement "while( true ) {\n    puVar6 = param_6 + 10;\n    puVar2 = (uint *)((ulong)(uint)(iVar1 * 0x28) + (long)param_2);\n    if (puVar6 < puVar2) {\n      uVar7 = param_6[10];\n      uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      while( true ) {\n        if (uVar5 == uVar7) {\n          return puVar6;\n        }\n        puVar6 = puVar6 + 10;\n        if (puVar2 <= puVar6) break;\n        uVar7 = *puVar6;\n        uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      }\n    }\n    if (uVar5 == 0) break;\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5 - (uVar5 + sVar3);\n    pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);\nLAB_0022d8fa:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);\n    if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar5 = (long)pvVar4 - (long)param_4;\n    param_6 = param_2;\n    if (uVar5 == 0) {\n      return param_2;\n    }\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    puVar6 = param_6 + 10;\n    puVar2 = (uint *)((ulong)(uint)(iVar1 * 0x28) + (long)param_2);\n    if (puVar6 < puVar2) {\n      uVar7 = param_6[10];\n      uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      while( true ) {\n        if (uVar5 == uVar7) {\n          return puVar6;\n        }\n        puVar6 = puVar6 + 10;\n        if (puVar2 <= puVar6) break;\n        uVar7 = *puVar6;\n        uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      }\n    }\n    if (uVar5 == 0) break;\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5 - (uVar5 + sVar3);\n    pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);\nLAB_0022d8fa:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);\n    if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar5 = (long)pvVar4 - (long)param_4;\n    param_6 = param_2;\n    if (uVar5 == 0) {\n      return param_2;\n    }\n  }" { (expression_statement "puVar6 = param_6 + 10;" (assignment_expression "puVar6 = param_6 + 10" identifier = (binary_expression "param_6 + 10" identifier + number_literal)) ;) (expression_statement "puVar2 = (uint *)((ulong)(uint)(iVar1 * 0x28) + (long)param_2);" (assignment_expression "puVar2 = (uint *)((ulong)(uint)(iVar1 * 0x28) + (long)param_2)" identifier = (cast_expression "(uint *)((ulong)(uint)(iVar1 * 0x28) + (long)param_2)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ulong)(uint)(iVar1 * 0x28) + (long)param_2)" ( (binary_expression "(ulong)(uint)(iVar1 * 0x28) + (long)param_2" (call_expression "(ulong)(uint)(iVar1 * 0x28)" (call_expression "(ulong)(uint)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uint)" ( identifier ))) (argument_list "(iVar1 * 0x28)" ( (binary_expression "iVar1 * 0x28" identifier * number_literal) ))) + (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )))) ;) (if_statement "if (puVar6 < puVar2) {\n      uVar7 = param_6[10];\n      uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      while( true ) {\n        if (uVar5 == uVar7) {\n          return puVar6;\n        }\n        puVar6 = puVar6 + 10;\n        if (puVar2 <= puVar6) break;\n        uVar7 = *puVar6;\n        uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      }\n    }" if (parenthesized_expression "(puVar6 < puVar2)" ( (binary_expression "puVar6 < puVar2" identifier < identifier) )) (compound_statement "{\n      uVar7 = param_6[10];\n      uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      while( true ) {\n        if (uVar5 == uVar7) {\n          return puVar6;\n        }\n        puVar6 = puVar6 + 10;\n        if (puVar2 <= puVar6) break;\n        uVar7 = *puVar6;\n        uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      }\n    }" { (expression_statement "uVar7 = param_6[10];" (assignment_expression "uVar7 = param_6[10]" identifier = (subscript_expression "param_6[10]" identifier [ number_literal ])) ;) (expression_statement "uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;" (assignment_expression "uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18" identifier = (binary_expression "uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18" (binary_expression "uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8" (binary_expression "uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8" (binary_expression "uVar7 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar7 & 0xff0000) >> 8" (parenthesized_expression "(uVar7 & 0xff0000)" ( (binary_expression "uVar7 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar7 & 0xff00) << 8" (parenthesized_expression "(uVar7 & 0xff00)" ( (binary_expression "uVar7 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar7 << 0x18" identifier << number_literal))) ;) (while_statement "while( true ) {\n        if (uVar5 == uVar7) {\n          return puVar6;\n        }\n        puVar6 = puVar6 + 10;\n        if (puVar2 <= puVar6) break;\n        uVar7 = *puVar6;\n        uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        if (uVar5 == uVar7) {\n          return puVar6;\n        }\n        puVar6 = puVar6 + 10;\n        if (puVar2 <= puVar6) break;\n        uVar7 = *puVar6;\n        uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      }" { (if_statement "if (uVar5 == uVar7) {\n          return puVar6;\n        }" if (parenthesized_expression "(uVar5 == uVar7)" ( (binary_expression "uVar5 == uVar7" identifier == identifier) )) (compound_statement "{\n          return puVar6;\n        }" { (return_statement "return puVar6;" return identifier ;) })) (expression_statement "puVar6 = puVar6 + 10;" (assignment_expression "puVar6 = puVar6 + 10" identifier = (binary_expression "puVar6 + 10" identifier + number_literal)) ;) (if_statement "if (puVar2 <= puVar6) break;" if (parenthesized_expression "(puVar2 <= puVar6)" ( (binary_expression "puVar2 <= puVar6" identifier <= identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar7 = *puVar6;" (assignment_expression "uVar7 = *puVar6" identifier = (pointer_expression "*puVar6" * identifier)) ;) (expression_statement "uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;" (assignment_expression "uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18" identifier = (binary_expression "uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18" (binary_expression "uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8" (binary_expression "uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8" (binary_expression "uVar7 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar7 & 0xff0000) >> 8" (parenthesized_expression "(uVar7 & 0xff0000)" ( (binary_expression "uVar7 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar7 & 0xff00) << 8" (parenthesized_expression "(uVar7 & 0xff00)" ( (binary_expression "uVar7 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar7 << 0x18" identifier << number_literal))) ;) })) })) (if_statement "if (uVar5 == 0) break;" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "sVar3 = strlen(param_3);" (assignment_expression "sVar3 = strlen(param_3)" identifier = (call_expression "strlen(param_3)" identifier (argument_list "(param_3)" ( identifier )))) ;) (expression_statement "sVar3 = sVar3 + 1;" (assignment_expression "sVar3 = sVar3 + 1" identifier = (binary_expression "sVar3 + 1" identifier + number_literal)) ;) (expression_statement "__haystacklen = param_5 - (uVar5 + sVar3);" (assignment_expression "__haystacklen = param_5 - (uVar5 + sVar3)" identifier = (binary_expression "param_5 - (uVar5 + sVar3)" identifier - (parenthesized_expression "(uVar5 + sVar3)" ( (binary_expression "uVar5 + sVar3" identifier + identifier) )))) ;) (expression_statement "pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);" (assignment_expression "pvVar4 = (void *)((long)param_4 + uVar5 + sVar3)" identifier = (cast_expression "(void *)((long)param_4 + uVar5 + sVar3)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_4 + uVar5 + sVar3)" ( (binary_expression "(long)param_4 + uVar5 + sVar3" (binary_expression "(long)param_4 + uVar5" (cast_expression "(long)param_4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + identifier) )))) ;) (labeled_statement "LAB_0022d8fa:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);" statement_identifier : (expression_statement "pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);" (assignment_expression "pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3)" identifier = (call_expression "memmem(pvVar4,__haystacklen,param_3,sVar3)" identifier (argument_list "(pvVar4,__haystacklen,param_3,sVar3)" ( identifier , identifier , identifier , identifier )))) ;)) (if_statement "if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }" if (parenthesized_expression "(pvVar4 == (void *)0x0)" ( (binary_expression "pvVar4 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return (uint *)0x0;\n    }" { (return_statement "return (uint *)0x0;" return (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "uVar5 = (long)pvVar4 - (long)param_4;" (assignment_expression "uVar5 = (long)pvVar4 - (long)param_4" identifier = (binary_expression "(long)pvVar4 - (long)param_4" (cast_expression "(long)pvVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)param_4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "param_6 = param_2;" (assignment_expression "param_6 = param_2" identifier = identifier) ;) (if_statement "if (uVar5 == 0) {\n      return param_2;\n    }" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (compound_statement "{\n      return param_2;\n    }" { (return_statement "return param_2;" return identifier ;) })) })) (return_statement "return (uint *)0x0;" return (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })))
(translation_unit "/* DWARF original name: find_shdr<32, true>\n   DWARF original prototype: uchar * find_shdr<32,_true>(Object * this, uchar * pshdrs, char * name,\n   char * names, section_size_type names_size, uchar * hdr) */\n\nuchar * __thiscall\ngold::Object::find_shdr<32,_true>\n          (Object *this,uchar *pshdrs,char *name,char *names,section_size_type names_size,uchar *hdr\n          )\n\n{\n  uint uVar1;\n  size_t sVar2;\n  void *pvVar3;\n  ulong uVar4;\n  uint *puVar5;\n  uint uVar6;\n  size_t __haystacklen;\n  char *__haystack;\n  \n  uVar1 = this->shnum_;\n  if (hdr == (uchar *)0x0) {\n    sVar2 = strlen(name);\n    sVar2 = sVar2 + 1;\n    __haystacklen = names_size;\n    __haystack = names;\n    goto LAB_0022d8fa;\n  }\n  uVar6 = *(uint *)hdr;\n  uVar4 = (ulong)(uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18);\n  while( true ) {\n    puVar5 = (uint *)(hdr + 0x28);\n    if (puVar5 < pshdrs + uVar1 * 0x28) {\n      uVar6 = *(uint *)(hdr + 0x28);\n      uVar6 = uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      while( true ) {\n        if (uVar4 == uVar6) {\n          return (uchar *)puVar5;\n        }\n        puVar5 = puVar5 + 10;\n        if (pshdrs + uVar1 * 0x28 <= puVar5) break;\n        uVar6 = *puVar5;\n        uVar6 = uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      }\n    }\n    if (uVar4 == 0) break;\n    sVar2 = strlen(name);\n    sVar2 = sVar2 + 1;\n    __haystacklen = names_size - (uVar4 + sVar2);\n    __haystack = names + uVar4 + sVar2;\nLAB_0022d8fa:\n    pvVar3 = memmem(__haystack,__haystacklen,name,sVar2);\n    if (pvVar3 == (void *)0x0) {\n      return (uchar *)0x0;\n    }\n    uVar4 = (long)pvVar3 - (long)names;\n    hdr = pshdrs;\n    if (uVar4 == 0) {\n      return pshdrs;\n    }\n  }\n  return (uchar *)0x0;\n}\n\n" comment (ERROR "uchar * __thiscall\ngold::Object::find_shdr<32,_true>\n          (Object *this,uchar *pshdrs,char *name,char *names,section_size_type names_size,uchar *hdr\n          )" (binary_expression "uchar * __thiscall\ngold::Object::find_shdr<32,_true>\n          (Object *this,uchar *pshdrs,char *name,char *names,section_size_type names_size,uchar *hdr\n          )" (binary_expression "uchar * __thiscall\ngold::Object::find_shdr<32" (binary_expression "uchar * __thiscall" identifier * identifier) (ERROR "gold::Object::find_shdr" identifier : : identifier : : identifier) < number_literal) (ERROR ",_true" , identifier) > (parenthesized_expression "(Object *this,uchar *pshdrs,char *name,char *names,section_size_type names_size,uchar *hdr\n          )" ( (comma_expression "Object *this,uchar *pshdrs,char *name,char *names,section_size_type names_size,uchar *hdr" (binary_expression "Object *this" identifier * identifier) , (comma_expression "uchar *pshdrs,char *name,char *names,section_size_type names_size,uchar *hdr" (binary_expression "uchar *pshdrs" identifier * identifier) , (comma_expression "char *name,char *names,section_size_type names_size,uchar *hdr" (binary_expression "char *name" identifier * identifier) , (comma_expression "char *names,section_size_type names_size,uchar *hdr" (binary_expression "char *names" identifier * identifier) , (comma_expression "section_size_type names_size,uchar *hdr" identifier (ERROR "names_size" identifier) , (binary_expression "uchar *hdr" identifier * identifier)))))) )))) (compound_statement "{\n  uint uVar1;\n  size_t sVar2;\n  void *pvVar3;\n  ulong uVar4;\n  uint *puVar5;\n  uint uVar6;\n  size_t __haystacklen;\n  char *__haystack;\n  \n  uVar1 = this->shnum_;\n  if (hdr == (uchar *)0x0) {\n    sVar2 = strlen(name);\n    sVar2 = sVar2 + 1;\n    __haystacklen = names_size;\n    __haystack = names;\n    goto LAB_0022d8fa;\n  }\n  uVar6 = *(uint *)hdr;\n  uVar4 = (ulong)(uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18);\n  while( true ) {\n    puVar5 = (uint *)(hdr + 0x28);\n    if (puVar5 < pshdrs + uVar1 * 0x28) {\n      uVar6 = *(uint *)(hdr + 0x28);\n      uVar6 = uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      while( true ) {\n        if (uVar4 == uVar6) {\n          return (uchar *)puVar5;\n        }\n        puVar5 = puVar5 + 10;\n        if (pshdrs + uVar1 * 0x28 <= puVar5) break;\n        uVar6 = *puVar5;\n        uVar6 = uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      }\n    }\n    if (uVar4 == 0) break;\n    sVar2 = strlen(name);\n    sVar2 = sVar2 + 1;\n    __haystacklen = names_size - (uVar4 + sVar2);\n    __haystack = names + uVar4 + sVar2;\nLAB_0022d8fa:\n    pvVar3 = memmem(__haystack,__haystacklen,name,sVar2);\n    if (pvVar3 == (void *)0x0) {\n      return (uchar *)0x0;\n    }\n    uVar4 = (long)pvVar3 - (long)names;\n    hdr = pshdrs;\n    if (uVar4 == 0) {\n      return pshdrs;\n    }\n  }\n  return (uchar *)0x0;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "size_t sVar2;" primitive_type identifier ;) (declaration "void *pvVar3;" primitive_type (pointer_declarator "*pvVar3" * identifier) ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "uint *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "size_t __haystacklen;" primitive_type identifier ;) (declaration "char *__haystack;" primitive_type (pointer_declarator "*__haystack" * identifier) ;) (expression_statement "uVar1 = this->shnum_;" (assignment_expression "uVar1 = this->shnum_" identifier = (field_expression "this->shnum_" identifier -> field_identifier)) ;) (if_statement "if (hdr == (uchar *)0x0) {\n    sVar2 = strlen(name);\n    sVar2 = sVar2 + 1;\n    __haystacklen = names_size;\n    __haystack = names;\n    goto LAB_0022d8fa;\n  }" if (parenthesized_expression "(hdr == (uchar *)0x0)" ( (binary_expression "hdr == (uchar *)0x0" identifier == (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    sVar2 = strlen(name);\n    sVar2 = sVar2 + 1;\n    __haystacklen = names_size;\n    __haystack = names;\n    goto LAB_0022d8fa;\n  }" { (expression_statement "sVar2 = strlen(name);" (assignment_expression "sVar2 = strlen(name)" identifier = (call_expression "strlen(name)" identifier (argument_list "(name)" ( identifier )))) ;) (expression_statement "sVar2 = sVar2 + 1;" (assignment_expression "sVar2 = sVar2 + 1" identifier = (binary_expression "sVar2 + 1" identifier + number_literal)) ;) (expression_statement "__haystacklen = names_size;" (assignment_expression "__haystacklen = names_size" identifier = identifier) ;) (expression_statement "__haystack = names;" (assignment_expression "__haystack = names" identifier = identifier) ;) (goto_statement "goto LAB_0022d8fa;" goto statement_identifier ;) })) (expression_statement "uVar6 = *(uint *)hdr;" (assignment_expression "uVar6 = *(uint *)hdr" identifier = (pointer_expression "*(uint *)hdr" * (cast_expression "(uint *)hdr" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "uVar4 = (ulong)(uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18);" (assignment_expression "uVar4 = (ulong)(uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18)" identifier = (call_expression "(ulong)(uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18)" ( (binary_expression "uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18" (binary_expression "uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8" (binary_expression "uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8" (binary_expression "uVar6 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar6 & 0xff0000) >> 8" (parenthesized_expression "(uVar6 & 0xff0000)" ( (binary_expression "uVar6 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar6 & 0xff00) << 8" (parenthesized_expression "(uVar6 & 0xff00)" ( (binary_expression "uVar6 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar6 << 0x18" identifier << number_literal)) )))) ;) (while_statement "while( true ) {\n    puVar5 = (uint *)(hdr + 0x28);\n    if (puVar5 < pshdrs + uVar1 * 0x28) {\n      uVar6 = *(uint *)(hdr + 0x28);\n      uVar6 = uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      while( true ) {\n        if (uVar4 == uVar6) {\n          return (uchar *)puVar5;\n        }\n        puVar5 = puVar5 + 10;\n        if (pshdrs + uVar1 * 0x28 <= puVar5) break;\n        uVar6 = *puVar5;\n        uVar6 = uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      }\n    }\n    if (uVar4 == 0) break;\n    sVar2 = strlen(name);\n    sVar2 = sVar2 + 1;\n    __haystacklen = names_size - (uVar4 + sVar2);\n    __haystack = names + uVar4 + sVar2;\nLAB_0022d8fa:\n    pvVar3 = memmem(__haystack,__haystacklen,name,sVar2);\n    if (pvVar3 == (void *)0x0) {\n      return (uchar *)0x0;\n    }\n    uVar4 = (long)pvVar3 - (long)names;\n    hdr = pshdrs;\n    if (uVar4 == 0) {\n      return pshdrs;\n    }\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    puVar5 = (uint *)(hdr + 0x28);\n    if (puVar5 < pshdrs + uVar1 * 0x28) {\n      uVar6 = *(uint *)(hdr + 0x28);\n      uVar6 = uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      while( true ) {\n        if (uVar4 == uVar6) {\n          return (uchar *)puVar5;\n        }\n        puVar5 = puVar5 + 10;\n        if (pshdrs + uVar1 * 0x28 <= puVar5) break;\n        uVar6 = *puVar5;\n        uVar6 = uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      }\n    }\n    if (uVar4 == 0) break;\n    sVar2 = strlen(name);\n    sVar2 = sVar2 + 1;\n    __haystacklen = names_size - (uVar4 + sVar2);\n    __haystack = names + uVar4 + sVar2;\nLAB_0022d8fa:\n    pvVar3 = memmem(__haystack,__haystacklen,name,sVar2);\n    if (pvVar3 == (void *)0x0) {\n      return (uchar *)0x0;\n    }\n    uVar4 = (long)pvVar3 - (long)names;\n    hdr = pshdrs;\n    if (uVar4 == 0) {\n      return pshdrs;\n    }\n  }" { (expression_statement "puVar5 = (uint *)(hdr + 0x28);" (assignment_expression "puVar5 = (uint *)(hdr + 0x28)" identifier = (cast_expression "(uint *)(hdr + 0x28)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(hdr + 0x28)" ( (binary_expression "hdr + 0x28" identifier + number_literal) )))) ;) (if_statement "if (puVar5 < pshdrs + uVar1 * 0x28) {\n      uVar6 = *(uint *)(hdr + 0x28);\n      uVar6 = uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      while( true ) {\n        if (uVar4 == uVar6) {\n          return (uchar *)puVar5;\n        }\n        puVar5 = puVar5 + 10;\n        if (pshdrs + uVar1 * 0x28 <= puVar5) break;\n        uVar6 = *puVar5;\n        uVar6 = uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      }\n    }" if (parenthesized_expression "(puVar5 < pshdrs + uVar1 * 0x28)" ( (binary_expression "puVar5 < pshdrs + uVar1 * 0x28" identifier < (binary_expression "pshdrs + uVar1 * 0x28" identifier + (binary_expression "uVar1 * 0x28" identifier * number_literal))) )) (compound_statement "{\n      uVar6 = *(uint *)(hdr + 0x28);\n      uVar6 = uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      while( true ) {\n        if (uVar4 == uVar6) {\n          return (uchar *)puVar5;\n        }\n        puVar5 = puVar5 + 10;\n        if (pshdrs + uVar1 * 0x28 <= puVar5) break;\n        uVar6 = *puVar5;\n        uVar6 = uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      }\n    }" { (expression_statement "uVar6 = *(uint *)(hdr + 0x28);" (assignment_expression "uVar6 = *(uint *)(hdr + 0x28)" identifier = (pointer_expression "*(uint *)(hdr + 0x28)" * (cast_expression "(uint *)(hdr + 0x28)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(hdr + 0x28)" ( (binary_expression "hdr + 0x28" identifier + number_literal) ))))) ;) (expression_statement "uVar6 = uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;" (assignment_expression "uVar6 = uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18" identifier = (binary_expression "uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18" (binary_expression "uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8" (binary_expression "uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8" (binary_expression "uVar6 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar6 & 0xff0000) >> 8" (parenthesized_expression "(uVar6 & 0xff0000)" ( (binary_expression "uVar6 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar6 & 0xff00) << 8" (parenthesized_expression "(uVar6 & 0xff00)" ( (binary_expression "uVar6 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar6 << 0x18" identifier << number_literal))) ;) (while_statement "while( true ) {\n        if (uVar4 == uVar6) {\n          return (uchar *)puVar5;\n        }\n        puVar5 = puVar5 + 10;\n        if (pshdrs + uVar1 * 0x28 <= puVar5) break;\n        uVar6 = *puVar5;\n        uVar6 = uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        if (uVar4 == uVar6) {\n          return (uchar *)puVar5;\n        }\n        puVar5 = puVar5 + 10;\n        if (pshdrs + uVar1 * 0x28 <= puVar5) break;\n        uVar6 = *puVar5;\n        uVar6 = uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      }" { (if_statement "if (uVar4 == uVar6) {\n          return (uchar *)puVar5;\n        }" if (parenthesized_expression "(uVar4 == uVar6)" ( (binary_expression "uVar4 == uVar6" identifier == identifier) )) (compound_statement "{\n          return (uchar *)puVar5;\n        }" { (return_statement "return (uchar *)puVar5;" return (cast_expression "(uchar *)puVar5" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) ;) })) (expression_statement "puVar5 = puVar5 + 10;" (assignment_expression "puVar5 = puVar5 + 10" identifier = (binary_expression "puVar5 + 10" identifier + number_literal)) ;) (if_statement "if (pshdrs + uVar1 * 0x28 <= puVar5) break;" if (parenthesized_expression "(pshdrs + uVar1 * 0x28 <= puVar5)" ( (binary_expression "pshdrs + uVar1 * 0x28 <= puVar5" (binary_expression "pshdrs + uVar1 * 0x28" identifier + (binary_expression "uVar1 * 0x28" identifier * number_literal)) <= identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar6 = *puVar5;" (assignment_expression "uVar6 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "uVar6 = uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;" (assignment_expression "uVar6 = uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18" identifier = (binary_expression "uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18" (binary_expression "uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8" (binary_expression "uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8" (binary_expression "uVar6 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar6 & 0xff0000) >> 8" (parenthesized_expression "(uVar6 & 0xff0000)" ( (binary_expression "uVar6 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar6 & 0xff00) << 8" (parenthesized_expression "(uVar6 & 0xff00)" ( (binary_expression "uVar6 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar6 << 0x18" identifier << number_literal))) ;) })) })) (if_statement "if (uVar4 == 0) break;" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "sVar2 = strlen(name);" (assignment_expression "sVar2 = strlen(name)" identifier = (call_expression "strlen(name)" identifier (argument_list "(name)" ( identifier )))) ;) (expression_statement "sVar2 = sVar2 + 1;" (assignment_expression "sVar2 = sVar2 + 1" identifier = (binary_expression "sVar2 + 1" identifier + number_literal)) ;) (expression_statement "__haystacklen = names_size - (uVar4 + sVar2);" (assignment_expression "__haystacklen = names_size - (uVar4 + sVar2)" identifier = (binary_expression "names_size - (uVar4 + sVar2)" identifier - (parenthesized_expression "(uVar4 + sVar2)" ( (binary_expression "uVar4 + sVar2" identifier + identifier) )))) ;) (expression_statement "__haystack = names + uVar4 + sVar2;" (assignment_expression "__haystack = names + uVar4 + sVar2" identifier = (binary_expression "names + uVar4 + sVar2" (binary_expression "names + uVar4" identifier + identifier) + identifier)) ;) (labeled_statement "LAB_0022d8fa:\n    pvVar3 = memmem(__haystack,__haystacklen,name,sVar2);" statement_identifier : (expression_statement "pvVar3 = memmem(__haystack,__haystacklen,name,sVar2);" (assignment_expression "pvVar3 = memmem(__haystack,__haystacklen,name,sVar2)" identifier = (call_expression "memmem(__haystack,__haystacklen,name,sVar2)" identifier (argument_list "(__haystack,__haystacklen,name,sVar2)" ( identifier , identifier , identifier , identifier )))) ;)) (if_statement "if (pvVar3 == (void *)0x0) {\n      return (uchar *)0x0;\n    }" if (parenthesized_expression "(pvVar3 == (void *)0x0)" ( (binary_expression "pvVar3 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return (uchar *)0x0;\n    }" { (return_statement "return (uchar *)0x0;" return (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "uVar4 = (long)pvVar3 - (long)names;" (assignment_expression "uVar4 = (long)pvVar3 - (long)names" identifier = (binary_expression "(long)pvVar3 - (long)names" (cast_expression "(long)pvVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)names" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "hdr = pshdrs;" (assignment_expression "hdr = pshdrs" identifier = identifier) ;) (if_statement "if (uVar4 == 0) {\n      return pshdrs;\n    }" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (compound_statement "{\n      return pshdrs;\n    }" { (return_statement "return pshdrs;" return identifier ;) })) })) (return_statement "return (uchar *)0x0;" return (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) }))
(translation_unit "uint * FUN_0022d870(long param_1,uint *param_2,char *param_3,void *param_4,size_t param_5,\n                   uint *param_6)\n\n{\n  int iVar1;\n  uint *puVar2;\n  size_t sVar3;\n  void *pvVar4;\n  ulong uVar5;\n  uint *puVar6;\n  uint uVar7;\n  size_t __haystacklen;\n  \n  iVar1 = *(int *)(param_1 + 0x38);\n  if (param_6 == (uint *)0x0) {\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5;\n    pvVar4 = param_4;\n    goto LAB_0022d8fa;\n  }\n  uVar7 = *param_6;\n  uVar5 = (ulong)(uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18);\n  while( true ) {\n    puVar6 = param_6 + 10;\n    puVar2 = (uint *)((ulong)(uint)(iVar1 * 0x28) + (long)param_2);\n    if (puVar6 < puVar2) {\n      uVar7 = param_6[10];\n      uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      while( true ) {\n        if (uVar5 == uVar7) {\n          return puVar6;\n        }\n        puVar6 = puVar6 + 10;\n        if (puVar2 <= puVar6) break;\n        uVar7 = *puVar6;\n        uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      }\n    }\n    if (uVar5 == 0) break;\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5 - (uVar5 + sVar3);\n    pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);\nLAB_0022d8fa:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);\n    if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar5 = (long)pvVar4 - (long)param_4;\n    param_6 = param_2;\n    if (uVar5 == 0) {\n      return param_2;\n    }\n  }\n  return (uint *)0x0;\n}\n\n" (function_definition "uint * FUN_0022d870(long param_1,uint *param_2,char *param_3,void *param_4,size_t param_5,\n                   uint *param_6)\n\n{\n  int iVar1;\n  uint *puVar2;\n  size_t sVar3;\n  void *pvVar4;\n  ulong uVar5;\n  uint *puVar6;\n  uint uVar7;\n  size_t __haystacklen;\n  \n  iVar1 = *(int *)(param_1 + 0x38);\n  if (param_6 == (uint *)0x0) {\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5;\n    pvVar4 = param_4;\n    goto LAB_0022d8fa;\n  }\n  uVar7 = *param_6;\n  uVar5 = (ulong)(uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18);\n  while( true ) {\n    puVar6 = param_6 + 10;\n    puVar2 = (uint *)((ulong)(uint)(iVar1 * 0x28) + (long)param_2);\n    if (puVar6 < puVar2) {\n      uVar7 = param_6[10];\n      uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      while( true ) {\n        if (uVar5 == uVar7) {\n          return puVar6;\n        }\n        puVar6 = puVar6 + 10;\n        if (puVar2 <= puVar6) break;\n        uVar7 = *puVar6;\n        uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      }\n    }\n    if (uVar5 == 0) break;\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5 - (uVar5 + sVar3);\n    pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);\nLAB_0022d8fa:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);\n    if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar5 = (long)pvVar4 - (long)param_4;\n    param_6 = param_2;\n    if (uVar5 == 0) {\n      return param_2;\n    }\n  }\n  return (uint *)0x0;\n}" type_identifier (pointer_declarator "* FUN_0022d870(long param_1,uint *param_2,char *param_3,void *param_4,size_t param_5,\n                   uint *param_6)" * (function_declarator "FUN_0022d870(long param_1,uint *param_2,char *param_3,void *param_4,size_t param_5,\n                   uint *param_6)" identifier (parameter_list "(long param_1,uint *param_2,char *param_3,void *param_4,size_t param_5,\n                   uint *param_6)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "char *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "void *param_4" primitive_type (pointer_declarator "*param_4" * identifier)) , (parameter_declaration "size_t param_5" primitive_type identifier) , (parameter_declaration "uint *param_6" type_identifier (pointer_declarator "*param_6" * identifier)) )))) (compound_statement "{\n  int iVar1;\n  uint *puVar2;\n  size_t sVar3;\n  void *pvVar4;\n  ulong uVar5;\n  uint *puVar6;\n  uint uVar7;\n  size_t __haystacklen;\n  \n  iVar1 = *(int *)(param_1 + 0x38);\n  if (param_6 == (uint *)0x0) {\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5;\n    pvVar4 = param_4;\n    goto LAB_0022d8fa;\n  }\n  uVar7 = *param_6;\n  uVar5 = (ulong)(uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18);\n  while( true ) {\n    puVar6 = param_6 + 10;\n    puVar2 = (uint *)((ulong)(uint)(iVar1 * 0x28) + (long)param_2);\n    if (puVar6 < puVar2) {\n      uVar7 = param_6[10];\n      uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      while( true ) {\n        if (uVar5 == uVar7) {\n          return puVar6;\n        }\n        puVar6 = puVar6 + 10;\n        if (puVar2 <= puVar6) break;\n        uVar7 = *puVar6;\n        uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      }\n    }\n    if (uVar5 == 0) break;\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5 - (uVar5 + sVar3);\n    pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);\nLAB_0022d8fa:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);\n    if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar5 = (long)pvVar4 - (long)param_4;\n    param_6 = param_2;\n    if (uVar5 == 0) {\n      return param_2;\n    }\n  }\n  return (uint *)0x0;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "uint *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "size_t sVar3;" primitive_type identifier ;) (declaration "void *pvVar4;" primitive_type (pointer_declarator "*pvVar4" * identifier) ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "uint *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "size_t __haystacklen;" primitive_type identifier ;) (expression_statement "iVar1 = *(int *)(param_1 + 0x38);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x38)" identifier = (pointer_expression "*(int *)(param_1 + 0x38)" * (cast_expression "(int *)(param_1 + 0x38)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x38)" ( (binary_expression "param_1 + 0x38" identifier + number_literal) ))))) ;) (if_statement "if (param_6 == (uint *)0x0) {\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5;\n    pvVar4 = param_4;\n    goto LAB_0022d8fa;\n  }" if (parenthesized_expression "(param_6 == (uint *)0x0)" ( (binary_expression "param_6 == (uint *)0x0" identifier == (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5;\n    pvVar4 = param_4;\n    goto LAB_0022d8fa;\n  }" { (expression_statement "sVar3 = strlen(param_3);" (assignment_expression "sVar3 = strlen(param_3)" identifier = (call_expression "strlen(param_3)" identifier (argument_list "(param_3)" ( identifier )))) ;) (expression_statement "sVar3 = sVar3 + 1;" (assignment_expression "sVar3 = sVar3 + 1" identifier = (binary_expression "sVar3 + 1" identifier + number_literal)) ;) (expression_statement "__haystacklen = param_5;" (assignment_expression "__haystacklen = param_5" identifier = identifier) ;) (expression_statement "pvVar4 = param_4;" (assignment_expression "pvVar4 = param_4" identifier = identifier) ;) (goto_statement "goto LAB_0022d8fa;" goto statement_identifier ;) })) (expression_statement "uVar7 = *param_6;" (assignment_expression "uVar7 = *param_6" identifier = (pointer_expression "*param_6" * identifier)) ;) (expression_statement "uVar5 = (ulong)(uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18);" (assignment_expression "uVar5 = (ulong)(uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18)" identifier = (call_expression "(ulong)(uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18)" ( (binary_expression "uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18" (binary_expression "uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8" (binary_expression "uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8" (binary_expression "uVar7 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar7 & 0xff0000) >> 8" (parenthesized_expression "(uVar7 & 0xff0000)" ( (binary_expression "uVar7 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar7 & 0xff00) << 8" (parenthesized_expression "(uVar7 & 0xff00)" ( (binary_expression "uVar7 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar7 << 0x18" identifier << number_literal)) )))) ;) (while_statement "while( true ) {\n    puVar6 = param_6 + 10;\n    puVar2 = (uint *)((ulong)(uint)(iVar1 * 0x28) + (long)param_2);\n    if (puVar6 < puVar2) {\n      uVar7 = param_6[10];\n      uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      while( true ) {\n        if (uVar5 == uVar7) {\n          return puVar6;\n        }\n        puVar6 = puVar6 + 10;\n        if (puVar2 <= puVar6) break;\n        uVar7 = *puVar6;\n        uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      }\n    }\n    if (uVar5 == 0) break;\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5 - (uVar5 + sVar3);\n    pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);\nLAB_0022d8fa:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);\n    if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar5 = (long)pvVar4 - (long)param_4;\n    param_6 = param_2;\n    if (uVar5 == 0) {\n      return param_2;\n    }\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    puVar6 = param_6 + 10;\n    puVar2 = (uint *)((ulong)(uint)(iVar1 * 0x28) + (long)param_2);\n    if (puVar6 < puVar2) {\n      uVar7 = param_6[10];\n      uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      while( true ) {\n        if (uVar5 == uVar7) {\n          return puVar6;\n        }\n        puVar6 = puVar6 + 10;\n        if (puVar2 <= puVar6) break;\n        uVar7 = *puVar6;\n        uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      }\n    }\n    if (uVar5 == 0) break;\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5 - (uVar5 + sVar3);\n    pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);\nLAB_0022d8fa:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);\n    if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar5 = (long)pvVar4 - (long)param_4;\n    param_6 = param_2;\n    if (uVar5 == 0) {\n      return param_2;\n    }\n  }" { (expression_statement "puVar6 = param_6 + 10;" (assignment_expression "puVar6 = param_6 + 10" identifier = (binary_expression "param_6 + 10" identifier + number_literal)) ;) (expression_statement "puVar2 = (uint *)((ulong)(uint)(iVar1 * 0x28) + (long)param_2);" (assignment_expression "puVar2 = (uint *)((ulong)(uint)(iVar1 * 0x28) + (long)param_2)" identifier = (cast_expression "(uint *)((ulong)(uint)(iVar1 * 0x28) + (long)param_2)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ulong)(uint)(iVar1 * 0x28) + (long)param_2)" ( (binary_expression "(ulong)(uint)(iVar1 * 0x28) + (long)param_2" (call_expression "(ulong)(uint)(iVar1 * 0x28)" (call_expression "(ulong)(uint)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uint)" ( identifier ))) (argument_list "(iVar1 * 0x28)" ( (binary_expression "iVar1 * 0x28" identifier * number_literal) ))) + (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )))) ;) (if_statement "if (puVar6 < puVar2) {\n      uVar7 = param_6[10];\n      uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      while( true ) {\n        if (uVar5 == uVar7) {\n          return puVar6;\n        }\n        puVar6 = puVar6 + 10;\n        if (puVar2 <= puVar6) break;\n        uVar7 = *puVar6;\n        uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      }\n    }" if (parenthesized_expression "(puVar6 < puVar2)" ( (binary_expression "puVar6 < puVar2" identifier < identifier) )) (compound_statement "{\n      uVar7 = param_6[10];\n      uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      while( true ) {\n        if (uVar5 == uVar7) {\n          return puVar6;\n        }\n        puVar6 = puVar6 + 10;\n        if (puVar2 <= puVar6) break;\n        uVar7 = *puVar6;\n        uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      }\n    }" { (expression_statement "uVar7 = param_6[10];" (assignment_expression "uVar7 = param_6[10]" identifier = (subscript_expression "param_6[10]" identifier [ number_literal ])) ;) (expression_statement "uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;" (assignment_expression "uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18" identifier = (binary_expression "uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18" (binary_expression "uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8" (binary_expression "uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8" (binary_expression "uVar7 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar7 & 0xff0000) >> 8" (parenthesized_expression "(uVar7 & 0xff0000)" ( (binary_expression "uVar7 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar7 & 0xff00) << 8" (parenthesized_expression "(uVar7 & 0xff00)" ( (binary_expression "uVar7 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar7 << 0x18" identifier << number_literal))) ;) (while_statement "while( true ) {\n        if (uVar5 == uVar7) {\n          return puVar6;\n        }\n        puVar6 = puVar6 + 10;\n        if (puVar2 <= puVar6) break;\n        uVar7 = *puVar6;\n        uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        if (uVar5 == uVar7) {\n          return puVar6;\n        }\n        puVar6 = puVar6 + 10;\n        if (puVar2 <= puVar6) break;\n        uVar7 = *puVar6;\n        uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      }" { (if_statement "if (uVar5 == uVar7) {\n          return puVar6;\n        }" if (parenthesized_expression "(uVar5 == uVar7)" ( (binary_expression "uVar5 == uVar7" identifier == identifier) )) (compound_statement "{\n          return puVar6;\n        }" { (return_statement "return puVar6;" return identifier ;) })) (expression_statement "puVar6 = puVar6 + 10;" (assignment_expression "puVar6 = puVar6 + 10" identifier = (binary_expression "puVar6 + 10" identifier + number_literal)) ;) (if_statement "if (puVar2 <= puVar6) break;" if (parenthesized_expression "(puVar2 <= puVar6)" ( (binary_expression "puVar2 <= puVar6" identifier <= identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar7 = *puVar6;" (assignment_expression "uVar7 = *puVar6" identifier = (pointer_expression "*puVar6" * identifier)) ;) (expression_statement "uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;" (assignment_expression "uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18" identifier = (binary_expression "uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18" (binary_expression "uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8" (binary_expression "uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8" (binary_expression "uVar7 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar7 & 0xff0000) >> 8" (parenthesized_expression "(uVar7 & 0xff0000)" ( (binary_expression "uVar7 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar7 & 0xff00) << 8" (parenthesized_expression "(uVar7 & 0xff00)" ( (binary_expression "uVar7 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar7 << 0x18" identifier << number_literal))) ;) })) })) (if_statement "if (uVar5 == 0) break;" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "sVar3 = strlen(param_3);" (assignment_expression "sVar3 = strlen(param_3)" identifier = (call_expression "strlen(param_3)" identifier (argument_list "(param_3)" ( identifier )))) ;) (expression_statement "sVar3 = sVar3 + 1;" (assignment_expression "sVar3 = sVar3 + 1" identifier = (binary_expression "sVar3 + 1" identifier + number_literal)) ;) (expression_statement "__haystacklen = param_5 - (uVar5 + sVar3);" (assignment_expression "__haystacklen = param_5 - (uVar5 + sVar3)" identifier = (binary_expression "param_5 - (uVar5 + sVar3)" identifier - (parenthesized_expression "(uVar5 + sVar3)" ( (binary_expression "uVar5 + sVar3" identifier + identifier) )))) ;) (expression_statement "pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);" (assignment_expression "pvVar4 = (void *)((long)param_4 + uVar5 + sVar3)" identifier = (cast_expression "(void *)((long)param_4 + uVar5 + sVar3)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_4 + uVar5 + sVar3)" ( (binary_expression "(long)param_4 + uVar5 + sVar3" (binary_expression "(long)param_4 + uVar5" (cast_expression "(long)param_4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + identifier) )))) ;) (labeled_statement "LAB_0022d8fa:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);" statement_identifier : (expression_statement "pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);" (assignment_expression "pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3)" identifier = (call_expression "memmem(pvVar4,__haystacklen,param_3,sVar3)" identifier (argument_list "(pvVar4,__haystacklen,param_3,sVar3)" ( identifier , identifier , identifier , identifier )))) ;)) (if_statement "if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }" if (parenthesized_expression "(pvVar4 == (void *)0x0)" ( (binary_expression "pvVar4 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return (uint *)0x0;\n    }" { (return_statement "return (uint *)0x0;" return (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "uVar5 = (long)pvVar4 - (long)param_4;" (assignment_expression "uVar5 = (long)pvVar4 - (long)param_4" identifier = (binary_expression "(long)pvVar4 - (long)param_4" (cast_expression "(long)pvVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)param_4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "param_6 = param_2;" (assignment_expression "param_6 = param_2" identifier = identifier) ;) (if_statement "if (uVar5 == 0) {\n      return param_2;\n    }" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (compound_statement "{\n      return param_2;\n    }" { (return_statement "return param_2;" return identifier ;) })) })) (return_statement "return (uint *)0x0;" return (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) )))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT << LIT)) )))) ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (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 IDENT * LIT) ))) + (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT << LIT))) ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT << LIT))) ;) })) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) + IDENT) )))) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT )))) ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return IDENT ;) })) })) (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })))
(function_definition "uint * FUN_0022d870(long param_1,uint *param_2,char *param_3,void *param_4,size_t param_5,\n                   uint *param_6)\n\n{\n  int iVar1;\n  uint *puVar2;\n  size_t sVar3;\n  void *pvVar4;\n  ulong uVar5;\n  uint *puVar6;\n  uint uVar7;\n  size_t __haystacklen;\n  \n  iVar1 = *(int *)(param_1 + 0x38);\n  if (param_6 == (uint *)0x0) {\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5;\n    pvVar4 = param_4;\n    goto LAB_0022d8fa;\n  }\n  uVar7 = *param_6;\n  uVar5 = (ulong)(uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18);\n  while( true ) {\n    puVar6 = param_6 + 10;\n    puVar2 = (uint *)((ulong)(uint)(iVar1 * 0x28) + (long)param_2);\n    if (puVar6 < puVar2) {\n      uVar7 = param_6[10];\n      uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      while( true ) {\n        if (uVar5 == uVar7) {\n          return puVar6;\n        }\n        puVar6 = puVar6 + 10;\n        if (puVar2 <= puVar6) break;\n        uVar7 = *puVar6;\n        uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      }\n    }\n    if (uVar5 == 0) break;\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5 - (uVar5 + sVar3);\n    pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);\nLAB_0022d8fa:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);\n    if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar5 = (long)pvVar4 - (long)param_4;\n    param_6 = param_2;\n    if (uVar5 == 0) {\n      return param_2;\n    }\n  }\n  return (uint *)0x0;\n}" (type_identifier "uint") (pointer_declarator "* FUN_0022d870(long param_1,uint *param_2,char *param_3,void *param_4,size_t param_5,\n                   uint *param_6)" (* "*") (function_declarator "FUN_0022d870(long param_1,uint *param_2,char *param_3,void *param_4,size_t param_5,\n                   uint *param_6)" (identifier "FUN_0022d870") (parameter_list "(long param_1,uint *param_2,char *param_3,void *param_4,size_t param_5,\n                   uint *param_6)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "uint *param_2" (type_identifier "uint") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "char *param_3" (primitive_type "char") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "void *param_4" (primitive_type "void") (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) (, ",") (parameter_declaration "size_t param_5" (primitive_type "size_t") (identifier "param_5")) (, ",") (parameter_declaration "uint *param_6" (type_identifier "uint") (pointer_declarator "*param_6" (* "*") (identifier "param_6"))) () ")")))) (compound_statement "{\n  int iVar1;\n  uint *puVar2;\n  size_t sVar3;\n  void *pvVar4;\n  ulong uVar5;\n  uint *puVar6;\n  uint uVar7;\n  size_t __haystacklen;\n  \n  iVar1 = *(int *)(param_1 + 0x38);\n  if (param_6 == (uint *)0x0) {\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5;\n    pvVar4 = param_4;\n    goto LAB_0022d8fa;\n  }\n  uVar7 = *param_6;\n  uVar5 = (ulong)(uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18);\n  while( true ) {\n    puVar6 = param_6 + 10;\n    puVar2 = (uint *)((ulong)(uint)(iVar1 * 0x28) + (long)param_2);\n    if (puVar6 < puVar2) {\n      uVar7 = param_6[10];\n      uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      while( true ) {\n        if (uVar5 == uVar7) {\n          return puVar6;\n        }\n        puVar6 = puVar6 + 10;\n        if (puVar2 <= puVar6) break;\n        uVar7 = *puVar6;\n        uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      }\n    }\n    if (uVar5 == 0) break;\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5 - (uVar5 + sVar3);\n    pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);\nLAB_0022d8fa:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);\n    if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar5 = (long)pvVar4 - (long)param_4;\n    param_6 = param_2;\n    if (uVar5 == 0) {\n      return param_2;\n    }\n  }\n  return (uint *)0x0;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "uint *puVar2;" (type_identifier "uint") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "size_t sVar3;" (primitive_type "size_t") (identifier "sVar3") (; ";")) (declaration "void *pvVar4;" (primitive_type "void") (pointer_declarator "*pvVar4" (* "*") (identifier "pvVar4")) (; ";")) (declaration "ulong uVar5;" (type_identifier "ulong") (identifier "uVar5") (; ";")) (declaration "uint *puVar6;" (type_identifier "uint") (pointer_declarator "*puVar6" (* "*") (identifier "puVar6")) (; ";")) (declaration "uint uVar7;" (type_identifier "uint") (identifier "uVar7") (; ";")) (declaration "size_t __haystacklen;" (primitive_type "size_t") (identifier "__haystacklen") (; ";")) (expression_statement "iVar1 = *(int *)(param_1 + 0x38);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x38)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(param_1 + 0x38)" (* "*") (cast_expression "(int *)(param_1 + 0x38)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x38)" (( "(") (binary_expression "param_1 + 0x38" (identifier "param_1") (+ "+") (number_literal "0x38")) () ")"))))) (; ";")) (if_statement "if (param_6 == (uint *)0x0) {\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5;\n    pvVar4 = param_4;\n    goto LAB_0022d8fa;\n  }" (if "if") (parenthesized_expression "(param_6 == (uint *)0x0)" (( "(") (binary_expression "param_6 == (uint *)0x0" (identifier "param_6") (== "==") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5;\n    pvVar4 = param_4;\n    goto LAB_0022d8fa;\n  }" ({ "{") (expression_statement "sVar3 = strlen(param_3);" (assignment_expression "sVar3 = strlen(param_3)" (identifier "sVar3") (= "=") (call_expression "strlen(param_3)" (identifier "strlen") (argument_list "(param_3)" (( "(") (identifier "param_3") () ")")))) (; ";")) (expression_statement "sVar3 = sVar3 + 1;" (assignment_expression "sVar3 = sVar3 + 1" (identifier "sVar3") (= "=") (binary_expression "sVar3 + 1" (identifier "sVar3") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "__haystacklen = param_5;" (assignment_expression "__haystacklen = param_5" (identifier "__haystacklen") (= "=") (identifier "param_5")) (; ";")) (expression_statement "pvVar4 = param_4;" (assignment_expression "pvVar4 = param_4" (identifier "pvVar4") (= "=") (identifier "param_4")) (; ";")) (goto_statement "goto LAB_0022d8fa;" (goto "goto") (statement_identifier "LAB_0022d8fa") (; ";")) (} "}"))) (expression_statement "uVar7 = *param_6;" (assignment_expression "uVar7 = *param_6" (identifier "uVar7") (= "=") (pointer_expression "*param_6" (* "*") (identifier "param_6"))) (; ";")) (expression_statement "uVar5 = (ulong)(uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18);" (assignment_expression "uVar5 = (ulong)(uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18)" (identifier "uVar5") (= "=") (call_expression "(ulong)(uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18)" (( "(") (binary_expression "uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18" (binary_expression "uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8" (binary_expression "uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8" (binary_expression "uVar7 >> 0x18" (identifier "uVar7") (>> ">>") (number_literal "0x18")) (| "|") (binary_expression "(uVar7 & 0xff0000) >> 8" (parenthesized_expression "(uVar7 & 0xff0000)" (( "(") (binary_expression "uVar7 & 0xff0000" (identifier "uVar7") (& "&") (number_literal "0xff0000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar7 & 0xff00) << 8" (parenthesized_expression "(uVar7 & 0xff00)" (( "(") (binary_expression "uVar7 & 0xff00" (identifier "uVar7") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "uVar7 << 0x18" (identifier "uVar7") (<< "<<") (number_literal "0x18"))) () ")")))) (; ";")) (while_statement "while( true ) {\n    puVar6 = param_6 + 10;\n    puVar2 = (uint *)((ulong)(uint)(iVar1 * 0x28) + (long)param_2);\n    if (puVar6 < puVar2) {\n      uVar7 = param_6[10];\n      uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      while( true ) {\n        if (uVar5 == uVar7) {\n          return puVar6;\n        }\n        puVar6 = puVar6 + 10;\n        if (puVar2 <= puVar6) break;\n        uVar7 = *puVar6;\n        uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      }\n    }\n    if (uVar5 == 0) break;\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5 - (uVar5 + sVar3);\n    pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);\nLAB_0022d8fa:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);\n    if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar5 = (long)pvVar4 - (long)param_4;\n    param_6 = param_2;\n    if (uVar5 == 0) {\n      return param_2;\n    }\n  }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n    puVar6 = param_6 + 10;\n    puVar2 = (uint *)((ulong)(uint)(iVar1 * 0x28) + (long)param_2);\n    if (puVar6 < puVar2) {\n      uVar7 = param_6[10];\n      uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      while( true ) {\n        if (uVar5 == uVar7) {\n          return puVar6;\n        }\n        puVar6 = puVar6 + 10;\n        if (puVar2 <= puVar6) break;\n        uVar7 = *puVar6;\n        uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      }\n    }\n    if (uVar5 == 0) break;\n    sVar3 = strlen(param_3);\n    sVar3 = sVar3 + 1;\n    __haystacklen = param_5 - (uVar5 + sVar3);\n    pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);\nLAB_0022d8fa:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);\n    if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar5 = (long)pvVar4 - (long)param_4;\n    param_6 = param_2;\n    if (uVar5 == 0) {\n      return param_2;\n    }\n  }" ({ "{") (expression_statement "puVar6 = param_6 + 10;" (assignment_expression "puVar6 = param_6 + 10" (identifier "puVar6") (= "=") (binary_expression "param_6 + 10" (identifier "param_6") (+ "+") (number_literal "10"))) (; ";")) (expression_statement "puVar2 = (uint *)((ulong)(uint)(iVar1 * 0x28) + (long)param_2);" (assignment_expression "puVar2 = (uint *)((ulong)(uint)(iVar1 * 0x28) + (long)param_2)" (identifier "puVar2") (= "=") (cast_expression "(uint *)((ulong)(uint)(iVar1 * 0x28) + (long)param_2)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((ulong)(uint)(iVar1 * 0x28) + (long)param_2)" (( "(") (binary_expression "(ulong)(uint)(iVar1 * 0x28) + (long)param_2" (call_expression "(ulong)(uint)(iVar1 * 0x28)" (call_expression "(ulong)(uint)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(uint)" (( "(") (identifier "uint") () ")"))) (argument_list "(iVar1 * 0x28)" (( "(") (binary_expression "iVar1 * 0x28" (identifier "iVar1") (* "*") (number_literal "0x28")) () ")"))) (+ "+") (cast_expression "(long)param_2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_2"))) () ")")))) (; ";")) (if_statement "if (puVar6 < puVar2) {\n      uVar7 = param_6[10];\n      uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      while( true ) {\n        if (uVar5 == uVar7) {\n          return puVar6;\n        }\n        puVar6 = puVar6 + 10;\n        if (puVar2 <= puVar6) break;\n        uVar7 = *puVar6;\n        uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      }\n    }" (if "if") (parenthesized_expression "(puVar6 < puVar2)" (( "(") (binary_expression "puVar6 < puVar2" (identifier "puVar6") (< "<") (identifier "puVar2")) () ")")) (compound_statement "{\n      uVar7 = param_6[10];\n      uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      while( true ) {\n        if (uVar5 == uVar7) {\n          return puVar6;\n        }\n        puVar6 = puVar6 + 10;\n        if (puVar2 <= puVar6) break;\n        uVar7 = *puVar6;\n        uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      }\n    }" ({ "{") (expression_statement "uVar7 = param_6[10];" (assignment_expression "uVar7 = param_6[10]" (identifier "uVar7") (= "=") (subscript_expression "param_6[10]" (identifier "param_6") ([ "[") (number_literal "10") (] "]"))) (; ";")) (expression_statement "uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;" (assignment_expression "uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18" (identifier "uVar7") (= "=") (binary_expression "uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18" (binary_expression "uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8" (binary_expression "uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8" (binary_expression "uVar7 >> 0x18" (identifier "uVar7") (>> ">>") (number_literal "0x18")) (| "|") (binary_expression "(uVar7 & 0xff0000) >> 8" (parenthesized_expression "(uVar7 & 0xff0000)" (( "(") (binary_expression "uVar7 & 0xff0000" (identifier "uVar7") (& "&") (number_literal "0xff0000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar7 & 0xff00) << 8" (parenthesized_expression "(uVar7 & 0xff00)" (( "(") (binary_expression "uVar7 & 0xff00" (identifier "uVar7") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "uVar7 << 0x18" (identifier "uVar7") (<< "<<") (number_literal "0x18")))) (; ";")) (while_statement "while( true ) {\n        if (uVar5 == uVar7) {\n          return puVar6;\n        }\n        puVar6 = puVar6 + 10;\n        if (puVar2 <= puVar6) break;\n        uVar7 = *puVar6;\n        uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n        if (uVar5 == uVar7) {\n          return puVar6;\n        }\n        puVar6 = puVar6 + 10;\n        if (puVar2 <= puVar6) break;\n        uVar7 = *puVar6;\n        uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;\n      }" ({ "{") (if_statement "if (uVar5 == uVar7) {\n          return puVar6;\n        }" (if "if") (parenthesized_expression "(uVar5 == uVar7)" (( "(") (binary_expression "uVar5 == uVar7" (identifier "uVar5") (== "==") (identifier "uVar7")) () ")")) (compound_statement "{\n          return puVar6;\n        }" ({ "{") (return_statement "return puVar6;" (return "return") (identifier "puVar6") (; ";")) (} "}"))) (expression_statement "puVar6 = puVar6 + 10;" (assignment_expression "puVar6 = puVar6 + 10" (identifier "puVar6") (= "=") (binary_expression "puVar6 + 10" (identifier "puVar6") (+ "+") (number_literal "10"))) (; ";")) (if_statement "if (puVar2 <= puVar6) break;" (if "if") (parenthesized_expression "(puVar2 <= puVar6)" (( "(") (binary_expression "puVar2 <= puVar6" (identifier "puVar2") (<= "<=") (identifier "puVar6")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar7 = *puVar6;" (assignment_expression "uVar7 = *puVar6" (identifier "uVar7") (= "=") (pointer_expression "*puVar6" (* "*") (identifier "puVar6"))) (; ";")) (expression_statement "uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;" (assignment_expression "uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18" (identifier "uVar7") (= "=") (binary_expression "uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18" (binary_expression "uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8" (binary_expression "uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8" (binary_expression "uVar7 >> 0x18" (identifier "uVar7") (>> ">>") (number_literal "0x18")) (| "|") (binary_expression "(uVar7 & 0xff0000) >> 8" (parenthesized_expression "(uVar7 & 0xff0000)" (( "(") (binary_expression "uVar7 & 0xff0000" (identifier "uVar7") (& "&") (number_literal "0xff0000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar7 & 0xff00) << 8" (parenthesized_expression "(uVar7 & 0xff00)" (( "(") (binary_expression "uVar7 & 0xff00" (identifier "uVar7") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "uVar7 << 0x18" (identifier "uVar7") (<< "<<") (number_literal "0x18")))) (; ";")) (} "}"))) (} "}"))) (if_statement "if (uVar5 == 0) break;" (if "if") (parenthesized_expression "(uVar5 == 0)" (( "(") (binary_expression "uVar5 == 0" (identifier "uVar5") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "sVar3 = strlen(param_3);" (assignment_expression "sVar3 = strlen(param_3)" (identifier "sVar3") (= "=") (call_expression "strlen(param_3)" (identifier "strlen") (argument_list "(param_3)" (( "(") (identifier "param_3") () ")")))) (; ";")) (expression_statement "sVar3 = sVar3 + 1;" (assignment_expression "sVar3 = sVar3 + 1" (identifier "sVar3") (= "=") (binary_expression "sVar3 + 1" (identifier "sVar3") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "__haystacklen = param_5 - (uVar5 + sVar3);" (assignment_expression "__haystacklen = param_5 - (uVar5 + sVar3)" (identifier "__haystacklen") (= "=") (binary_expression "param_5 - (uVar5 + sVar3)" (identifier "param_5") (- "-") (parenthesized_expression "(uVar5 + sVar3)" (( "(") (binary_expression "uVar5 + sVar3" (identifier "uVar5") (+ "+") (identifier "sVar3")) () ")")))) (; ";")) (expression_statement "pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);" (assignment_expression "pvVar4 = (void *)((long)param_4 + uVar5 + sVar3)" (identifier "pvVar4") (= "=") (cast_expression "(void *)((long)param_4 + uVar5 + sVar3)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_4 + uVar5 + sVar3)" (( "(") (binary_expression "(long)param_4 + uVar5 + sVar3" (binary_expression "(long)param_4 + uVar5" (cast_expression "(long)param_4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_4")) (+ "+") (identifier "uVar5")) (+ "+") (identifier "sVar3")) () ")")))) (; ";")) (labeled_statement "LAB_0022d8fa:\n    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);" (statement_identifier "LAB_0022d8fa") (: ":") (expression_statement "pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);" (assignment_expression "pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3)" (identifier "pvVar4") (= "=") (call_expression "memmem(pvVar4,__haystacklen,param_3,sVar3)" (identifier "memmem") (argument_list "(pvVar4,__haystacklen,param_3,sVar3)" (( "(") (identifier "pvVar4") (, ",") (identifier "__haystacklen") (, ",") (identifier "param_3") (, ",") (identifier "sVar3") () ")")))) (; ";"))) (if_statement "if (pvVar4 == (void *)0x0) {\n      return (uint *)0x0;\n    }" (if "if") (parenthesized_expression "(pvVar4 == (void *)0x0)" (( "(") (binary_expression "pvVar4 == (void *)0x0" (identifier "pvVar4") (== "==") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      return (uint *)0x0;\n    }" ({ "{") (return_statement "return (uint *)0x0;" (return "return") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}"))) (expression_statement "uVar5 = (long)pvVar4 - (long)param_4;" (assignment_expression "uVar5 = (long)pvVar4 - (long)param_4" (identifier "uVar5") (= "=") (binary_expression "(long)pvVar4 - (long)param_4" (cast_expression "(long)pvVar4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pvVar4")) (- "-") (cast_expression "(long)param_4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_4")))) (; ";")) (expression_statement "param_6 = param_2;" (assignment_expression "param_6 = param_2" (identifier "param_6") (= "=") (identifier "param_2")) (; ";")) (if_statement "if (uVar5 == 0) {\n      return param_2;\n    }" (if "if") (parenthesized_expression "(uVar5 == 0)" (( "(") (binary_expression "uVar5 == 0" (identifier "uVar5") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return param_2;\n    }" ({ "{") (return_statement "return param_2;" (return "return") (identifier "param_2") (; ";")) (} "}"))) (} "}"))) (return_statement "return (uint *)0x0;" (return "return") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}")))

/* DWARF original name: find_shdr<32, true>
   DWARF original prototype: uchar * find_shdr<32,_true>(Object * this, uchar * pshdrs, char * name,
   char * names, section_size_type names_size, uchar * hdr) */

type_3 * __thiscall
gold::Object::find_shdr<32,_true>
          (Object *this,type_3 *var_6,char *name,char *var_10,section_size_type var_9,type_3 *var_1
          )

{
  type_1 var_7;
  size_t var_3;
  void *var_12;
  type_2 var_8;
  type_1 *var_5;
  type_1 var_4;
  size_t __haystacklen;
  char *__haystack;
  
  var_7 = this->shnum_;
  if (var_1 == (type_3 *)0x0) {
    var_3 = var_2(name);
    var_3 = var_3 + 1;
    __haystacklen = var_9;
    __haystack = var_10;
    goto LAB_0022d8fa;
  }
  var_4 = *(type_1 *)var_1;
  var_8 = (type_2)(var_4 >> 0x18 | (var_4 & 0xff0000) >> 8 | (var_4 & 0xff00) << 8 | var_4 << 0x18);
  while( true ) {
    var_5 = (type_1 *)(var_1 + 0x28);
    if (var_5 < var_6 + var_7 * 0x28) {
      var_4 = *(type_1 *)(var_1 + 0x28);
      var_4 = var_4 >> 0x18 | (var_4 & 0xff0000) >> 8 | (var_4 & 0xff00) << 8 | var_4 << 0x18;
      while( true ) {
        if (var_8 == var_4) {
          return (type_3 *)var_5;
        }
        var_5 = var_5 + 10;
        if (var_6 + var_7 * 0x28 <= var_5) break;
        var_4 = *var_5;
        var_4 = var_4 >> 0x18 | (var_4 & 0xff0000) >> 8 | (var_4 & 0xff00) << 8 | var_4 << 0x18;
      }
    }
    if (var_8 == 0) break;
    var_3 = var_2(name);
    var_3 = var_3 + 1;
    __haystacklen = var_9 - (var_8 + var_3);
    __haystack = var_10 + var_8 + var_3;
LAB_0022d8fa:
    var_12 = var_11(__haystack,__haystacklen,name,var_3);
    if (var_12 == (void *)0x0) {
      return (type_3 *)0x0;
    }
    var_8 = (long)var_12 - (long)var_10;
    var_1 = var_6;
    if (var_8 == 0) {
      return var_6;
    }
  }
  return (type_3 *)0x0;
}


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

uint * MASKED(long param_1,uint *param_2,char *param_3,void *param_4,size_t param_5,
                   uint *param_6)

{
  int iVar1;
  uint *puVar2;
  size_t sVar3;
  void *pvVar4;
  ulong uVar5;
  uint *puVar6;
  uint uVar7;
  size_t __haystacklen;
  
  iVar1 = *(int *)(param_1 + 0x38);
  if (param_6 == (uint *)0x0) {
    sVar3 = strlen(param_3);
    sVar3 = sVar3 + 1;
    __haystacklen = param_5;
    pvVar4 = param_4;
    goto LAB_0022d8fa;
  }
  uVar7 = *param_6;
  uVar5 = (ulong)(uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18);
  while( true ) {
    puVar6 = param_6 + 10;
    puVar2 = (uint *)((ulong)(uint)(iVar1 * 0x28) + (long)param_2);
    if (puVar6 < puVar2) {
      uVar7 = param_6[10];
      uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;
      while( true ) {
        if (uVar5 == uVar7) {
          return puVar6;
        }
        puVar6 = puVar6 + 10;
        if (puVar2 <= puVar6) break;
        uVar7 = *puVar6;
        uVar7 = uVar7 >> 0x18 | (uVar7 & 0xff0000) >> 8 | (uVar7 & 0xff00) << 8 | uVar7 << 0x18;
      }
    }
    if (uVar5 == 0) break;
    sVar3 = strlen(param_3);
    sVar3 = sVar3 + 1;
    __haystacklen = param_5 - (uVar5 + sVar3);
    pvVar4 = (void *)((long)param_4 + uVar5 + sVar3);
LAB_0022d8fa:
    pvVar4 = memmem(pvVar4,__haystacklen,param_3,sVar3);
    if (pvVar4 == (void *)0x0) {
      return (uint *)0x0;
    }
    uVar5 = (long)pvVar4 - (long)param_4;
    param_6 = param_2;
    if (uVar5 == 0) {
      return param_2;
    }
  }
  return (uint *)0x0;
}

