
_Bool knuth_morris_pratt(uchar *haystack,uchar *needle,size_t needle_len,uchar **resultp)

{
  uchar uVar1;
  bool bVar2;
  size_t sVar3;
  long lVar4;
  undefined1 *puVar5;
  void *p;
  uchar *puVar6;
  long in_FS_OFFSET;
  undefined1 auStack_48 [8];
  long local_40;
  
  puVar5 = auStack_48;
  local_40 = *(long *)(in_FS_OFFSET + 0x28);
  bVar2 = (long)(needle_len << 3) < 0 || needle_len >> 0x3d != 0;
  if (bVar2) {
    bVar2 = false;
  }
  else {
    sVar3 = needle_len * 8;
    if (sVar3 < 0xfa1) {
      lVar4 = -(sVar3 + 0x36 & 0xfffffffffffffff0);
      p = (void *)((ulong)(&stack0xffffffffffffffdf + lVar4) & 0xffffffffffffffe0);
      puVar5 = auStack_48 + lVar4;
    }
    else {
      p = mmalloca(sVar3);
      puVar5 = auStack_48;
    }
    if (p != (void *)0x0) {
      *(undefined8 *)((long)p + 8) = 1;
      if (2 < needle_len) {
        lVar4 = 0;
        sVar3 = 2;
        do {
          uVar1 = needle[lVar4];
          while (needle[sVar3 - 1] != uVar1) {
            if (lVar4 == 0) {
              *(size_t *)((long)p + sVar3 * 8) = sVar3;
              lVar4 = 0;
              goto LAB_00106560;
            }
            lVar4 = lVar4 - *(long *)((long)p + lVar4 * 8);
            uVar1 = needle[lVar4];
          }
          lVar4 = lVar4 + 1;
          *(size_t *)((long)p + sVar3 * 8) = sVar3 - lVar4;
LAB_00106560:
          sVar3 = sVar3 + 1;
        } while (needle_len != sVar3);
      }
      *resultp = (uchar *)0x0;
      sVar3 = 0;
      puVar6 = haystack;
      do {
        while( true ) {
          if (*haystack == '\0') goto LAB_001065b2;
          if (needle[sVar3] == *haystack) break;
          if (sVar3 == 0) {
            puVar6 = puVar6 + 1;
            haystack = haystack + 1;
          }
          else {
            lVar4 = *(long *)((long)p + sVar3 * 8);
            puVar6 = puVar6 + lVar4;
            sVar3 = sVar3 - lVar4;
          }
        }
        sVar3 = sVar3 + 1;
        haystack = haystack + 1;
      } while (needle_len != sVar3);
      *resultp = puVar6;
LAB_001065b2:
      *(undefined8 *)(puVar5 + -8) = 0x1065b7;
      freea(p);
      bVar2 = true;
    }
  }
  if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {
    return bVar2;
  }
                    /* WARNING: Subroutine does not return */
  *(code **)(puVar5 + -8) = knuth_morris_pratt_multibyte;
  __stack_chk_fail();
}



bool FUN_001064a4(char *param_1,long param_2,ulong param_3,undefined8 *param_4)

{
  char cVar1;
  ulong uVar2;
  long lVar3;
  undefined1 *puVar4;
  ulong uVar5;
  char *pcVar6;
  bool bVar7;
  long in_FS_OFFSET;
  undefined1 auStack_48 [8];
  long local_40;
  
  puVar4 = auStack_48;
  local_40 = *(long *)(in_FS_OFFSET + 0x28);
  bVar7 = (long)(param_3 << 3) < 0 || param_3 >> 0x3d != 0;
  if (bVar7) {
    bVar7 = false;
  }
  else {
    if (param_3 * 8 < 0xfa1) {
      lVar3 = -(param_3 * 8 + 0x36 & 0xfffffffffffffff0);
      uVar5 = (ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0;
      puVar4 = auStack_48 + lVar3;
    }
    else {
      uVar5 = FUN_0010b163();
      puVar4 = auStack_48;
    }
    if (uVar5 != 0) {
      *(undefined8 *)(uVar5 + 8) = 1;
      if (2 < param_3) {
        lVar3 = 0;
        uVar2 = 2;
        do {
          cVar1 = *(char *)(param_2 + lVar3);
          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {
            if (lVar3 == 0) {
              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;
              lVar3 = 0;
              goto LAB_00106560;
            }
            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);
            cVar1 = *(char *)(param_2 + lVar3);
          }
          lVar3 = lVar3 + 1;
          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;
LAB_00106560:
          uVar2 = uVar2 + 1;
        } while (param_3 != uVar2);
      }
      *param_4 = 0;
      uVar2 = 0;
      pcVar6 = param_1;
      do {
        while( true ) {
          if (*param_1 == '\0') goto LAB_001065b2;
          if (*(char *)(param_2 + uVar2) == *param_1) break;
          if (uVar2 == 0) {
            pcVar6 = pcVar6 + 1;
            param_1 = param_1 + 1;
          }
          else {
            lVar3 = *(long *)(uVar5 + uVar2 * 8);
            pcVar6 = pcVar6 + lVar3;
            uVar2 = uVar2 - lVar3;
          }
        }
        uVar2 = uVar2 + 1;
        param_1 = param_1 + 1;
      } while (param_3 != uVar2);
      *param_4 = pcVar6;
LAB_001065b2:
      *(undefined8 *)(puVar4 + -8) = 0x1065b7;
      FUN_0010b1a0();
      bVar7 = true;
    }
  }
  if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {
    return bVar7;
  }
                    /* WARNING: Subroutine does not return */
  *(code **)(puVar4 + -8) = FUN_00106610;
  __stack_chk_fail();
}


PUSH RBP
MOV RBP,RSP
PUSH R15
PUSH R14
PUSH R13
PUSH R12
PUSH RBX
SUB RSP,0x18
MOV RAX,qword ptr FS:[0x28]
MOV qword ptr [RBP + -0x38],RAX
XOR EAX,EAX
MOV RAX,RDX
SHR RAX,0x3d
SETNZ R15B
MOVZX R15D,R15B
MOV RAX,RDX
SHL RAX,0x3
MOV EAX,0x1
CMOVS R15,RAX
TEST R15B,R15B
JNZ 0x00106603
MOV R13,RDI
MOV RBX,RSI
MOV R12,RDX
MOV R14,RCX
LEA RDI,[RDX*0x8]
CMP RDI,0xfa0
JA 0x00106548
ADD RDI,0x36
AND RDI,-0x10
SUB RSP,RDI
LEA RDI,[RSP + 0xf]
AND RDI,-0x10
ADD RDI,0x1f
AND RDI,-0x20
TEST RDI,RDI
JZ 0x001065bd
MOV qword ptr [RDI + 0x8],0x1
CMP R12,0x2
JBE 0x00106591
MOV EDX,0x0
MOV ECX,0x2
JMP 0x00106569
CALL 0x0010b163
MOV RDI,RAX
JMP 0x00106525
ADD RDX,0x1
MOV RAX,RCX
SUB RAX,RDX
MOV qword ptr [RDI + RCX*0x8],RAX
ADD RCX,0x1
CMP R12,RCX
JZ 0x00106591
MOVZX EAX,byte ptr [RBX + RCX*0x1 + -0x1]
CMP AL,byte ptr [RBX + RDX*0x1]
JZ 0x00106552
TEST RDX,RDX
JZ 0x00106586
SUB RDX,qword ptr [RDI + RDX*0x8]
CMP byte ptr [RBX + RDX*0x1],AL
JZ 0x00106552
TEST RDX,RDX
JNZ 0x00106578
MOV qword ptr [RDI + RCX*0x8],RCX
MOV EDX,0x0
JMP 0x00106560
MOV qword ptr [R14],0x0
MOV RCX,R13
MOV EAX,0x0
JMP 0x001065e6
ADD RAX,0x1
ADD RCX,0x1
CMP R12,RAX
JNZ 0x001065e6
MOV qword ptr [R14],R13
CALL 0x0010b1a0
MOV R15D,0x1
MOV EAX,R15D
MOV RSI,qword ptr [RBP + -0x38]
XOR RSI,qword ptr FS:[0x28]
JNZ 0x0010660b
LEA RSP,[RBP + -0x28]
POP RBX
POP R12
POP R13
POP R14
POP R15
POP RBP
RET
ADD R13,0x1
ADD RCX,0x1
MOVZX EDX,byte ptr [RCX]
TEST DL,DL
JZ 0x001065b2
CMP byte ptr [RBX + RAX*0x1],DL
JZ 0x001065a2
TEST RAX,RAX
JZ 0x001065de
MOV RDX,qword ptr [RDI + RAX*0x8]
ADD R13,RDX
SUB RAX,RDX
JMP 0x001065e6
MOV R15D,0x0
JMP 0x001065bd
CALL 0x001021a0
(translation_unit "bool FUN_001064a4(char *param_1,long param_2,ulong param_3,undefined8 *param_4)\n\n{\n  char cVar1;\n  ulong uVar2;\n  long lVar3;\n  undefined1 *puVar4;\n  ulong uVar5;\n  char *pcVar6;\n  bool bVar7;\n  long in_FS_OFFSET;\n  undefined1 auStack_48 [8];\n  long local_40;\n  \n  puVar4 = auStack_48;\n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  bVar7 = (long)(param_3 << 3) < 0 || param_3 >> 0x3d != 0;\n  if (bVar7) {\n    bVar7 = false;\n  }\n  else {\n    if (param_3 * 8 < 0xfa1) {\n      lVar3 = -(param_3 * 8 + 0x36 & 0xfffffffffffffff0);\n      uVar5 = (ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0;\n      puVar4 = auStack_48 + lVar3;\n    }\n    else {\n      uVar5 = FUN_0010b163();\n      puVar4 = auStack_48;\n    }\n    if (uVar5 != 0) {\n      *(undefined8 *)(uVar5 + 8) = 1;\n      if (2 < param_3) {\n        lVar3 = 0;\n        uVar2 = 2;\n        do {\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        } while (param_3 != uVar2);\n      }\n      *param_4 = 0;\n      uVar2 = 0;\n      pcVar6 = param_1;\n      do {\n        while( true ) {\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }\n        uVar2 = uVar2 + 1;\n        param_1 = param_1 + 1;\n      } while (param_3 != uVar2);\n      *param_4 = pcVar6;\nLAB_001065b2:\n      *(undefined8 *)(puVar4 + -8) = 0x1065b7;\n      FUN_0010b1a0();\n      bVar7 = true;\n    }\n  }\n  if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return bVar7;\n  }\n                    /* WARNING: Subroutine does not return */\n  *(code **)(puVar4 + -8) = FUN_00106610;\n  __stack_chk_fail();\n}\n\n" (function_definition "bool FUN_001064a4(char *param_1,long param_2,ulong param_3,undefined8 *param_4)\n\n{\n  char cVar1;\n  ulong uVar2;\n  long lVar3;\n  undefined1 *puVar4;\n  ulong uVar5;\n  char *pcVar6;\n  bool bVar7;\n  long in_FS_OFFSET;\n  undefined1 auStack_48 [8];\n  long local_40;\n  \n  puVar4 = auStack_48;\n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  bVar7 = (long)(param_3 << 3) < 0 || param_3 >> 0x3d != 0;\n  if (bVar7) {\n    bVar7 = false;\n  }\n  else {\n    if (param_3 * 8 < 0xfa1) {\n      lVar3 = -(param_3 * 8 + 0x36 & 0xfffffffffffffff0);\n      uVar5 = (ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0;\n      puVar4 = auStack_48 + lVar3;\n    }\n    else {\n      uVar5 = FUN_0010b163();\n      puVar4 = auStack_48;\n    }\n    if (uVar5 != 0) {\n      *(undefined8 *)(uVar5 + 8) = 1;\n      if (2 < param_3) {\n        lVar3 = 0;\n        uVar2 = 2;\n        do {\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        } while (param_3 != uVar2);\n      }\n      *param_4 = 0;\n      uVar2 = 0;\n      pcVar6 = param_1;\n      do {\n        while( true ) {\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }\n        uVar2 = uVar2 + 1;\n        param_1 = param_1 + 1;\n      } while (param_3 != uVar2);\n      *param_4 = pcVar6;\nLAB_001065b2:\n      *(undefined8 *)(puVar4 + -8) = 0x1065b7;\n      FUN_0010b1a0();\n      bVar7 = true;\n    }\n  }\n  if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return bVar7;\n  }\n                    /* WARNING: Subroutine does not return */\n  *(code **)(puVar4 + -8) = FUN_00106610;\n  __stack_chk_fail();\n}" primitive_type (function_declarator "FUN_001064a4(char *param_1,long param_2,ulong param_3,undefined8 *param_4)" identifier (parameter_list "(char *param_1,long param_2,ulong param_3,undefined8 *param_4)" ( (parameter_declaration "char *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "ulong param_3" type_identifier identifier) , (parameter_declaration "undefined8 *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  char cVar1;\n  ulong uVar2;\n  long lVar3;\n  undefined1 *puVar4;\n  ulong uVar5;\n  char *pcVar6;\n  bool bVar7;\n  long in_FS_OFFSET;\n  undefined1 auStack_48 [8];\n  long local_40;\n  \n  puVar4 = auStack_48;\n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  bVar7 = (long)(param_3 << 3) < 0 || param_3 >> 0x3d != 0;\n  if (bVar7) {\n    bVar7 = false;\n  }\n  else {\n    if (param_3 * 8 < 0xfa1) {\n      lVar3 = -(param_3 * 8 + 0x36 & 0xfffffffffffffff0);\n      uVar5 = (ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0;\n      puVar4 = auStack_48 + lVar3;\n    }\n    else {\n      uVar5 = FUN_0010b163();\n      puVar4 = auStack_48;\n    }\n    if (uVar5 != 0) {\n      *(undefined8 *)(uVar5 + 8) = 1;\n      if (2 < param_3) {\n        lVar3 = 0;\n        uVar2 = 2;\n        do {\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        } while (param_3 != uVar2);\n      }\n      *param_4 = 0;\n      uVar2 = 0;\n      pcVar6 = param_1;\n      do {\n        while( true ) {\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }\n        uVar2 = uVar2 + 1;\n        param_1 = param_1 + 1;\n      } while (param_3 != uVar2);\n      *param_4 = pcVar6;\nLAB_001065b2:\n      *(undefined8 *)(puVar4 + -8) = 0x1065b7;\n      FUN_0010b1a0();\n      bVar7 = true;\n    }\n  }\n  if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return bVar7;\n  }\n                    /* WARNING: Subroutine does not return */\n  *(code **)(puVar4 + -8) = FUN_00106610;\n  __stack_chk_fail();\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "char *pcVar6;" primitive_type (pointer_declarator "*pcVar6" * identifier) ;) (declaration "bool bVar7;" primitive_type identifier ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 auStack_48 [8];" type_identifier (array_declarator "auStack_48 [8]" identifier [ number_literal ]) ;) (declaration "long local_40;" (sized_type_specifier "long" long) identifier ;) (expression_statement "puVar4 = auStack_48;" (assignment_expression "puVar4 = auStack_48" identifier = identifier) ;) (expression_statement "local_40 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_40 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (expression_statement "bVar7 = (long)(param_3 << 3) < 0 || param_3 >> 0x3d != 0;" (assignment_expression "bVar7 = (long)(param_3 << 3) < 0 || param_3 >> 0x3d != 0" identifier = (binary_expression "(long)(param_3 << 3) < 0 || param_3 >> 0x3d != 0" (binary_expression "(long)(param_3 << 3) < 0" (cast_expression "(long)(param_3 << 3)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(param_3 << 3)" ( (binary_expression "param_3 << 3" identifier << number_literal) ))) < number_literal) || (binary_expression "param_3 >> 0x3d != 0" (binary_expression "param_3 >> 0x3d" identifier >> number_literal) != number_literal))) ;) (if_statement "if (bVar7) {\n    bVar7 = false;\n  }\n  else {\n    if (param_3 * 8 < 0xfa1) {\n      lVar3 = -(param_3 * 8 + 0x36 & 0xfffffffffffffff0);\n      uVar5 = (ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0;\n      puVar4 = auStack_48 + lVar3;\n    }\n    else {\n      uVar5 = FUN_0010b163();\n      puVar4 = auStack_48;\n    }\n    if (uVar5 != 0) {\n      *(undefined8 *)(uVar5 + 8) = 1;\n      if (2 < param_3) {\n        lVar3 = 0;\n        uVar2 = 2;\n        do {\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        } while (param_3 != uVar2);\n      }\n      *param_4 = 0;\n      uVar2 = 0;\n      pcVar6 = param_1;\n      do {\n        while( true ) {\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }\n        uVar2 = uVar2 + 1;\n        param_1 = param_1 + 1;\n      } while (param_3 != uVar2);\n      *param_4 = pcVar6;\nLAB_001065b2:\n      *(undefined8 *)(puVar4 + -8) = 0x1065b7;\n      FUN_0010b1a0();\n      bVar7 = true;\n    }\n  }" if (parenthesized_expression "(bVar7)" ( identifier )) (compound_statement "{\n    bVar7 = false;\n  }" { (expression_statement "bVar7 = false;" (assignment_expression "bVar7 = false" identifier = false) ;) }) (else_clause "else {\n    if (param_3 * 8 < 0xfa1) {\n      lVar3 = -(param_3 * 8 + 0x36 & 0xfffffffffffffff0);\n      uVar5 = (ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0;\n      puVar4 = auStack_48 + lVar3;\n    }\n    else {\n      uVar5 = FUN_0010b163();\n      puVar4 = auStack_48;\n    }\n    if (uVar5 != 0) {\n      *(undefined8 *)(uVar5 + 8) = 1;\n      if (2 < param_3) {\n        lVar3 = 0;\n        uVar2 = 2;\n        do {\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        } while (param_3 != uVar2);\n      }\n      *param_4 = 0;\n      uVar2 = 0;\n      pcVar6 = param_1;\n      do {\n        while( true ) {\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }\n        uVar2 = uVar2 + 1;\n        param_1 = param_1 + 1;\n      } while (param_3 != uVar2);\n      *param_4 = pcVar6;\nLAB_001065b2:\n      *(undefined8 *)(puVar4 + -8) = 0x1065b7;\n      FUN_0010b1a0();\n      bVar7 = true;\n    }\n  }" else (compound_statement "{\n    if (param_3 * 8 < 0xfa1) {\n      lVar3 = -(param_3 * 8 + 0x36 & 0xfffffffffffffff0);\n      uVar5 = (ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0;\n      puVar4 = auStack_48 + lVar3;\n    }\n    else {\n      uVar5 = FUN_0010b163();\n      puVar4 = auStack_48;\n    }\n    if (uVar5 != 0) {\n      *(undefined8 *)(uVar5 + 8) = 1;\n      if (2 < param_3) {\n        lVar3 = 0;\n        uVar2 = 2;\n        do {\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        } while (param_3 != uVar2);\n      }\n      *param_4 = 0;\n      uVar2 = 0;\n      pcVar6 = param_1;\n      do {\n        while( true ) {\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }\n        uVar2 = uVar2 + 1;\n        param_1 = param_1 + 1;\n      } while (param_3 != uVar2);\n      *param_4 = pcVar6;\nLAB_001065b2:\n      *(undefined8 *)(puVar4 + -8) = 0x1065b7;\n      FUN_0010b1a0();\n      bVar7 = true;\n    }\n  }" { (if_statement "if (param_3 * 8 < 0xfa1) {\n      lVar3 = -(param_3 * 8 + 0x36 & 0xfffffffffffffff0);\n      uVar5 = (ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0;\n      puVar4 = auStack_48 + lVar3;\n    }\n    else {\n      uVar5 = FUN_0010b163();\n      puVar4 = auStack_48;\n    }" if (parenthesized_expression "(param_3 * 8 < 0xfa1)" ( (binary_expression "param_3 * 8 < 0xfa1" (binary_expression "param_3 * 8" identifier * number_literal) < number_literal) )) (compound_statement "{\n      lVar3 = -(param_3 * 8 + 0x36 & 0xfffffffffffffff0);\n      uVar5 = (ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0;\n      puVar4 = auStack_48 + lVar3;\n    }" { (expression_statement "lVar3 = -(param_3 * 8 + 0x36 & 0xfffffffffffffff0);" (assignment_expression "lVar3 = -(param_3 * 8 + 0x36 & 0xfffffffffffffff0)" identifier = (unary_expression "-(param_3 * 8 + 0x36 & 0xfffffffffffffff0)" - (parenthesized_expression "(param_3 * 8 + 0x36 & 0xfffffffffffffff0)" ( (binary_expression "param_3 * 8 + 0x36 & 0xfffffffffffffff0" (binary_expression "param_3 * 8 + 0x36" (binary_expression "param_3 * 8" identifier * number_literal) + number_literal) & number_literal) )))) ;) (expression_statement "uVar5 = (ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0;" (assignment_expression "uVar5 = (ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0" identifier = (binary_expression "(ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0" (call_expression "(ulong)(&stack0xffffffffffffffdf + lVar3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(&stack0xffffffffffffffdf + lVar3)" ( (binary_expression "&stack0xffffffffffffffdf + lVar3" (pointer_expression "&stack0xffffffffffffffdf" & identifier) + identifier) ))) & number_literal)) ;) (expression_statement "puVar4 = auStack_48 + lVar3;" (assignment_expression "puVar4 = auStack_48 + lVar3" identifier = (binary_expression "auStack_48 + lVar3" identifier + identifier)) ;) }) (else_clause "else {\n      uVar5 = FUN_0010b163();\n      puVar4 = auStack_48;\n    }" else (compound_statement "{\n      uVar5 = FUN_0010b163();\n      puVar4 = auStack_48;\n    }" { (expression_statement "uVar5 = FUN_0010b163();" (assignment_expression "uVar5 = FUN_0010b163()" identifier = (call_expression "FUN_0010b163()" identifier (argument_list "()" ( )))) ;) (expression_statement "puVar4 = auStack_48;" (assignment_expression "puVar4 = auStack_48" identifier = identifier) ;) }))) (if_statement "if (uVar5 != 0) {\n      *(undefined8 *)(uVar5 + 8) = 1;\n      if (2 < param_3) {\n        lVar3 = 0;\n        uVar2 = 2;\n        do {\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        } while (param_3 != uVar2);\n      }\n      *param_4 = 0;\n      uVar2 = 0;\n      pcVar6 = param_1;\n      do {\n        while( true ) {\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }\n        uVar2 = uVar2 + 1;\n        param_1 = param_1 + 1;\n      } while (param_3 != uVar2);\n      *param_4 = pcVar6;\nLAB_001065b2:\n      *(undefined8 *)(puVar4 + -8) = 0x1065b7;\n      FUN_0010b1a0();\n      bVar7 = true;\n    }" if (parenthesized_expression "(uVar5 != 0)" ( (binary_expression "uVar5 != 0" identifier != number_literal) )) (compound_statement "{\n      *(undefined8 *)(uVar5 + 8) = 1;\n      if (2 < param_3) {\n        lVar3 = 0;\n        uVar2 = 2;\n        do {\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        } while (param_3 != uVar2);\n      }\n      *param_4 = 0;\n      uVar2 = 0;\n      pcVar6 = param_1;\n      do {\n        while( true ) {\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }\n        uVar2 = uVar2 + 1;\n        param_1 = param_1 + 1;\n      } while (param_3 != uVar2);\n      *param_4 = pcVar6;\nLAB_001065b2:\n      *(undefined8 *)(puVar4 + -8) = 0x1065b7;\n      FUN_0010b1a0();\n      bVar7 = true;\n    }" { (expression_statement "*(undefined8 *)(uVar5 + 8) = 1;" (assignment_expression "*(undefined8 *)(uVar5 + 8) = 1" (pointer_expression "*(undefined8 *)(uVar5 + 8)" * (cast_expression "(undefined8 *)(uVar5 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar5 + 8)" ( (binary_expression "uVar5 + 8" identifier + number_literal) )))) = number_literal) ;) (if_statement "if (2 < param_3) {\n        lVar3 = 0;\n        uVar2 = 2;\n        do {\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        } while (param_3 != uVar2);\n      }" if (parenthesized_expression "(2 < param_3)" ( (binary_expression "2 < param_3" number_literal < identifier) )) (compound_statement "{\n        lVar3 = 0;\n        uVar2 = 2;\n        do {\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        } while (param_3 != uVar2);\n      }" { (expression_statement "lVar3 = 0;" (assignment_expression "lVar3 = 0" identifier = number_literal) ;) (expression_statement "uVar2 = 2;" (assignment_expression "uVar2 = 2" identifier = number_literal) ;) (do_statement "do {\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        } while (param_3 != uVar2);" do (compound_statement "{\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        }" { (expression_statement "cVar1 = *(char *)(param_2 + lVar3);" (assignment_expression "cVar1 = *(char *)(param_2 + lVar3)" identifier = (pointer_expression "*(char *)(param_2 + lVar3)" * (cast_expression "(char *)(param_2 + lVar3)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + lVar3)" ( (binary_expression "param_2 + lVar3" identifier + identifier) ))))) ;) (while_statement "while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }" while (parenthesized_expression "(*(char *)(param_2 + -1 + uVar2) != cVar1)" ( (binary_expression "*(char *)(param_2 + -1 + uVar2) != cVar1" (pointer_expression "*(char *)(param_2 + -1 + uVar2)" * (cast_expression "(char *)(param_2 + -1 + uVar2)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + -1 + uVar2)" ( (binary_expression "param_2 + -1 + uVar2" (binary_expression "param_2 + -1" identifier + number_literal) + identifier) )))) != identifier) )) (compound_statement "{\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }" { (if_statement "if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }" if (parenthesized_expression "(lVar3 == 0)" ( (binary_expression "lVar3 == 0" identifier == number_literal) )) (compound_statement "{\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }" { (expression_statement "*(ulong *)(uVar5 + uVar2 * 8) = uVar2;" (assignment_expression "*(ulong *)(uVar5 + uVar2 * 8) = uVar2" (pointer_expression "*(ulong *)(uVar5 + uVar2 * 8)" * (cast_expression "(ulong *)(uVar5 + uVar2 * 8)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar5 + uVar2 * 8)" ( (binary_expression "uVar5 + uVar2 * 8" identifier + (binary_expression "uVar2 * 8" identifier * number_literal)) )))) = identifier) ;) (expression_statement "lVar3 = 0;" (assignment_expression "lVar3 = 0" identifier = number_literal) ;) (goto_statement "goto LAB_00106560;" goto statement_identifier ;) })) (expression_statement "lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);" (assignment_expression "lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8)" identifier = (binary_expression "lVar3 - *(long *)(uVar5 + lVar3 * 8)" identifier - (pointer_expression "*(long *)(uVar5 + lVar3 * 8)" * (cast_expression "(long *)(uVar5 + lVar3 * 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar5 + lVar3 * 8)" ( (binary_expression "uVar5 + lVar3 * 8" identifier + (binary_expression "lVar3 * 8" identifier * number_literal)) )))))) ;) (expression_statement "cVar1 = *(char *)(param_2 + lVar3);" (assignment_expression "cVar1 = *(char *)(param_2 + lVar3)" identifier = (pointer_expression "*(char *)(param_2 + lVar3)" * (cast_expression "(char *)(param_2 + lVar3)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + lVar3)" ( (binary_expression "param_2 + lVar3" identifier + identifier) ))))) ;) })) (expression_statement "lVar3 = lVar3 + 1;" (assignment_expression "lVar3 = lVar3 + 1" identifier = (binary_expression "lVar3 + 1" identifier + number_literal)) ;) (expression_statement "*(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;" (assignment_expression "*(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3" (pointer_expression "*(ulong *)(uVar5 + uVar2 * 8)" * (cast_expression "(ulong *)(uVar5 + uVar2 * 8)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar5 + uVar2 * 8)" ( (binary_expression "uVar5 + uVar2 * 8" identifier + (binary_expression "uVar2 * 8" identifier * number_literal)) )))) = (binary_expression "uVar2 - lVar3" identifier - identifier)) ;) (labeled_statement "LAB_00106560:\n          uVar2 = uVar2 + 1;" statement_identifier : (expression_statement "uVar2 = uVar2 + 1;" (assignment_expression "uVar2 = uVar2 + 1" identifier = (binary_expression "uVar2 + 1" identifier + number_literal)) ;)) }) while (parenthesized_expression "(param_3 != uVar2)" ( (binary_expression "param_3 != uVar2" identifier != identifier) )) ;) })) (expression_statement "*param_4 = 0;" (assignment_expression "*param_4 = 0" (pointer_expression "*param_4" * identifier) = number_literal) ;) (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" identifier = number_literal) ;) (expression_statement "pcVar6 = param_1;" (assignment_expression "pcVar6 = param_1" identifier = identifier) ;) (do_statement "do {\n        while( true ) {\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }\n        uVar2 = uVar2 + 1;\n        param_1 = param_1 + 1;\n      } while (param_3 != uVar2);" do (compound_statement "{\n        while( true ) {\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }\n        uVar2 = uVar2 + 1;\n        param_1 = param_1 + 1;\n      }" { (while_statement "while( true ) {\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }" { (if_statement "if (*param_1 == '\0') goto LAB_001065b2;" if (parenthesized_expression "(*param_1 == '\0')" ( (binary_expression "*param_1 == '\0'" (pointer_expression "*param_1" * identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (goto_statement "goto LAB_001065b2;" goto statement_identifier ;)) (if_statement "if (*(char *)(param_2 + uVar2) == *param_1) break;" if (parenthesized_expression "(*(char *)(param_2 + uVar2) == *param_1)" ( (binary_expression "*(char *)(param_2 + uVar2) == *param_1" (pointer_expression "*(char *)(param_2 + uVar2)" * (cast_expression "(char *)(param_2 + uVar2)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + uVar2)" ( (binary_expression "param_2 + uVar2" identifier + identifier) )))) == (pointer_expression "*param_1" * identifier)) )) (break_statement "break;" break ;)) (if_statement "if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }" { (expression_statement "pcVar6 = pcVar6 + 1;" (assignment_expression "pcVar6 = pcVar6 + 1" identifier = (binary_expression "pcVar6 + 1" identifier + number_literal)) ;) (expression_statement "param_1 = param_1 + 1;" (assignment_expression "param_1 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ;) }) (else_clause "else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }" else (compound_statement "{\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }" { (expression_statement "lVar3 = *(long *)(uVar5 + uVar2 * 8);" (assignment_expression "lVar3 = *(long *)(uVar5 + uVar2 * 8)" identifier = (pointer_expression "*(long *)(uVar5 + uVar2 * 8)" * (cast_expression "(long *)(uVar5 + uVar2 * 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar5 + uVar2 * 8)" ( (binary_expression "uVar5 + uVar2 * 8" identifier + (binary_expression "uVar2 * 8" identifier * number_literal)) ))))) ;) (expression_statement "pcVar6 = pcVar6 + lVar3;" (assignment_expression "pcVar6 = pcVar6 + lVar3" identifier = (binary_expression "pcVar6 + lVar3" identifier + identifier)) ;) (expression_statement "uVar2 = uVar2 - lVar3;" (assignment_expression "uVar2 = uVar2 - lVar3" identifier = (binary_expression "uVar2 - lVar3" identifier - identifier)) ;) }))) })) (expression_statement "uVar2 = uVar2 + 1;" (assignment_expression "uVar2 = uVar2 + 1" identifier = (binary_expression "uVar2 + 1" identifier + number_literal)) ;) (expression_statement "param_1 = param_1 + 1;" (assignment_expression "param_1 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(param_3 != uVar2)" ( (binary_expression "param_3 != uVar2" identifier != identifier) )) ;) (expression_statement "*param_4 = pcVar6;" (assignment_expression "*param_4 = pcVar6" (pointer_expression "*param_4" * identifier) = identifier) ;) (labeled_statement "LAB_001065b2:\n      *(undefined8 *)(puVar4 + -8) = 0x1065b7;" statement_identifier : (expression_statement "*(undefined8 *)(puVar4 + -8) = 0x1065b7;" (assignment_expression "*(undefined8 *)(puVar4 + -8) = 0x1065b7" (pointer_expression "*(undefined8 *)(puVar4 + -8)" * (cast_expression "(undefined8 *)(puVar4 + -8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + -8)" ( (binary_expression "puVar4 + -8" identifier + number_literal) )))) = number_literal) ;)) (expression_statement "FUN_0010b1a0();" (call_expression "FUN_0010b1a0()" identifier (argument_list "()" ( ))) ;) (expression_statement "bVar7 = true;" (assignment_expression "bVar7 = true" identifier = true) ;) })) }))) (if_statement "if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return bVar7;\n  }" if (parenthesized_expression "(local_40 == *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_40 == *(long *)(in_FS_OFFSET + 0x28)" identifier == (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n    return bVar7;\n  }" { (return_statement "return bVar7;" return identifier ;) })) comment (expression_statement "*(code **)(puVar4 + -8) = FUN_00106610;" (assignment_expression "*(code **)(puVar4 + -8) = FUN_00106610" (pointer_expression "*(code **)(puVar4 + -8)" * (cast_expression "(code **)(puVar4 + -8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar4 + -8)" ( (binary_expression "puVar4 + -8" identifier + number_literal) )))) = identifier) ;) (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit "_Bool knuth_morris_pratt(uchar *haystack,uchar *needle,size_t needle_len,uchar **resultp)\n\n{\n  uchar uVar1;\n  bool bVar2;\n  size_t sVar3;\n  long lVar4;\n  undefined1 *puVar5;\n  void *p;\n  uchar *puVar6;\n  long in_FS_OFFSET;\n  undefined1 auStack_48 [8];\n  long local_40;\n  \n  puVar5 = auStack_48;\n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  bVar2 = (long)(needle_len << 3) < 0 || needle_len >> 0x3d != 0;\n  if (bVar2) {\n    bVar2 = false;\n  }\n  else {\n    sVar3 = needle_len * 8;\n    if (sVar3 < 0xfa1) {\n      lVar4 = -(sVar3 + 0x36 & 0xfffffffffffffff0);\n      p = (void *)((ulong)(&stack0xffffffffffffffdf + lVar4) & 0xffffffffffffffe0);\n      puVar5 = auStack_48 + lVar4;\n    }\n    else {\n      p = mmalloca(sVar3);\n      puVar5 = auStack_48;\n    }\n    if (p != (void *)0x0) {\n      *(undefined8 *)((long)p + 8) = 1;\n      if (2 < needle_len) {\n        lVar4 = 0;\n        sVar3 = 2;\n        do {\n          uVar1 = needle[lVar4];\n          while (needle[sVar3 - 1] != uVar1) {\n            if (lVar4 == 0) {\n              *(size_t *)((long)p + sVar3 * 8) = sVar3;\n              lVar4 = 0;\n              goto LAB_00106560;\n            }\n            lVar4 = lVar4 - *(long *)((long)p + lVar4 * 8);\n            uVar1 = needle[lVar4];\n          }\n          lVar4 = lVar4 + 1;\n          *(size_t *)((long)p + sVar3 * 8) = sVar3 - lVar4;\nLAB_00106560:\n          sVar3 = sVar3 + 1;\n        } while (needle_len != sVar3);\n      }\n      *resultp = (uchar *)0x0;\n      sVar3 = 0;\n      puVar6 = haystack;\n      do {\n        while( true ) {\n          if (*haystack == '\0') goto LAB_001065b2;\n          if (needle[sVar3] == *haystack) break;\n          if (sVar3 == 0) {\n            puVar6 = puVar6 + 1;\n            haystack = haystack + 1;\n          }\n          else {\n            lVar4 = *(long *)((long)p + sVar3 * 8);\n            puVar6 = puVar6 + lVar4;\n            sVar3 = sVar3 - lVar4;\n          }\n        }\n        sVar3 = sVar3 + 1;\n        haystack = haystack + 1;\n      } while (needle_len != sVar3);\n      *resultp = puVar6;\nLAB_001065b2:\n      *(undefined8 *)(puVar5 + -8) = 0x1065b7;\n      freea(p);\n      bVar2 = true;\n    }\n  }\n  if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return bVar2;\n  }\n                    /* WARNING: Subroutine does not return */\n  *(code **)(puVar5 + -8) = knuth_morris_pratt_multibyte;\n  __stack_chk_fail();\n}\n\n" (function_definition "_Bool knuth_morris_pratt(uchar *haystack,uchar *needle,size_t needle_len,uchar **resultp)\n\n{\n  uchar uVar1;\n  bool bVar2;\n  size_t sVar3;\n  long lVar4;\n  undefined1 *puVar5;\n  void *p;\n  uchar *puVar6;\n  long in_FS_OFFSET;\n  undefined1 auStack_48 [8];\n  long local_40;\n  \n  puVar5 = auStack_48;\n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  bVar2 = (long)(needle_len << 3) < 0 || needle_len >> 0x3d != 0;\n  if (bVar2) {\n    bVar2 = false;\n  }\n  else {\n    sVar3 = needle_len * 8;\n    if (sVar3 < 0xfa1) {\n      lVar4 = -(sVar3 + 0x36 & 0xfffffffffffffff0);\n      p = (void *)((ulong)(&stack0xffffffffffffffdf + lVar4) & 0xffffffffffffffe0);\n      puVar5 = auStack_48 + lVar4;\n    }\n    else {\n      p = mmalloca(sVar3);\n      puVar5 = auStack_48;\n    }\n    if (p != (void *)0x0) {\n      *(undefined8 *)((long)p + 8) = 1;\n      if (2 < needle_len) {\n        lVar4 = 0;\n        sVar3 = 2;\n        do {\n          uVar1 = needle[lVar4];\n          while (needle[sVar3 - 1] != uVar1) {\n            if (lVar4 == 0) {\n              *(size_t *)((long)p + sVar3 * 8) = sVar3;\n              lVar4 = 0;\n              goto LAB_00106560;\n            }\n            lVar4 = lVar4 - *(long *)((long)p + lVar4 * 8);\n            uVar1 = needle[lVar4];\n          }\n          lVar4 = lVar4 + 1;\n          *(size_t *)((long)p + sVar3 * 8) = sVar3 - lVar4;\nLAB_00106560:\n          sVar3 = sVar3 + 1;\n        } while (needle_len != sVar3);\n      }\n      *resultp = (uchar *)0x0;\n      sVar3 = 0;\n      puVar6 = haystack;\n      do {\n        while( true ) {\n          if (*haystack == '\0') goto LAB_001065b2;\n          if (needle[sVar3] == *haystack) break;\n          if (sVar3 == 0) {\n            puVar6 = puVar6 + 1;\n            haystack = haystack + 1;\n          }\n          else {\n            lVar4 = *(long *)((long)p + sVar3 * 8);\n            puVar6 = puVar6 + lVar4;\n            sVar3 = sVar3 - lVar4;\n          }\n        }\n        sVar3 = sVar3 + 1;\n        haystack = haystack + 1;\n      } while (needle_len != sVar3);\n      *resultp = puVar6;\nLAB_001065b2:\n      *(undefined8 *)(puVar5 + -8) = 0x1065b7;\n      freea(p);\n      bVar2 = true;\n    }\n  }\n  if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return bVar2;\n  }\n                    /* WARNING: Subroutine does not return */\n  *(code **)(puVar5 + -8) = knuth_morris_pratt_multibyte;\n  __stack_chk_fail();\n}" type_identifier (function_declarator "knuth_morris_pratt(uchar *haystack,uchar *needle,size_t needle_len,uchar **resultp)" identifier (parameter_list "(uchar *haystack,uchar *needle,size_t needle_len,uchar **resultp)" ( (parameter_declaration "uchar *haystack" type_identifier (pointer_declarator "*haystack" * identifier)) , (parameter_declaration "uchar *needle" type_identifier (pointer_declarator "*needle" * identifier)) , (parameter_declaration "size_t needle_len" primitive_type identifier) , (parameter_declaration "uchar **resultp" type_identifier (pointer_declarator "**resultp" * (pointer_declarator "*resultp" * identifier))) ))) (compound_statement "{\n  uchar uVar1;\n  bool bVar2;\n  size_t sVar3;\n  long lVar4;\n  undefined1 *puVar5;\n  void *p;\n  uchar *puVar6;\n  long in_FS_OFFSET;\n  undefined1 auStack_48 [8];\n  long local_40;\n  \n  puVar5 = auStack_48;\n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  bVar2 = (long)(needle_len << 3) < 0 || needle_len >> 0x3d != 0;\n  if (bVar2) {\n    bVar2 = false;\n  }\n  else {\n    sVar3 = needle_len * 8;\n    if (sVar3 < 0xfa1) {\n      lVar4 = -(sVar3 + 0x36 & 0xfffffffffffffff0);\n      p = (void *)((ulong)(&stack0xffffffffffffffdf + lVar4) & 0xffffffffffffffe0);\n      puVar5 = auStack_48 + lVar4;\n    }\n    else {\n      p = mmalloca(sVar3);\n      puVar5 = auStack_48;\n    }\n    if (p != (void *)0x0) {\n      *(undefined8 *)((long)p + 8) = 1;\n      if (2 < needle_len) {\n        lVar4 = 0;\n        sVar3 = 2;\n        do {\n          uVar1 = needle[lVar4];\n          while (needle[sVar3 - 1] != uVar1) {\n            if (lVar4 == 0) {\n              *(size_t *)((long)p + sVar3 * 8) = sVar3;\n              lVar4 = 0;\n              goto LAB_00106560;\n            }\n            lVar4 = lVar4 - *(long *)((long)p + lVar4 * 8);\n            uVar1 = needle[lVar4];\n          }\n          lVar4 = lVar4 + 1;\n          *(size_t *)((long)p + sVar3 * 8) = sVar3 - lVar4;\nLAB_00106560:\n          sVar3 = sVar3 + 1;\n        } while (needle_len != sVar3);\n      }\n      *resultp = (uchar *)0x0;\n      sVar3 = 0;\n      puVar6 = haystack;\n      do {\n        while( true ) {\n          if (*haystack == '\0') goto LAB_001065b2;\n          if (needle[sVar3] == *haystack) break;\n          if (sVar3 == 0) {\n            puVar6 = puVar6 + 1;\n            haystack = haystack + 1;\n          }\n          else {\n            lVar4 = *(long *)((long)p + sVar3 * 8);\n            puVar6 = puVar6 + lVar4;\n            sVar3 = sVar3 - lVar4;\n          }\n        }\n        sVar3 = sVar3 + 1;\n        haystack = haystack + 1;\n      } while (needle_len != sVar3);\n      *resultp = puVar6;\nLAB_001065b2:\n      *(undefined8 *)(puVar5 + -8) = 0x1065b7;\n      freea(p);\n      bVar2 = true;\n    }\n  }\n  if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return bVar2;\n  }\n                    /* WARNING: Subroutine does not return */\n  *(code **)(puVar5 + -8) = knuth_morris_pratt_multibyte;\n  __stack_chk_fail();\n}" { (declaration "uchar uVar1;" type_identifier identifier ;) (declaration "bool bVar2;" primitive_type identifier ;) (declaration "size_t sVar3;" primitive_type identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "void *p;" primitive_type (pointer_declarator "*p" * identifier) ;) (declaration "uchar *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 auStack_48 [8];" type_identifier (array_declarator "auStack_48 [8]" identifier [ number_literal ]) ;) (declaration "long local_40;" (sized_type_specifier "long" long) identifier ;) (expression_statement "puVar5 = auStack_48;" (assignment_expression "puVar5 = auStack_48" identifier = identifier) ;) (expression_statement "local_40 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_40 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (expression_statement "bVar2 = (long)(needle_len << 3) < 0 || needle_len >> 0x3d != 0;" (assignment_expression "bVar2 = (long)(needle_len << 3) < 0 || needle_len >> 0x3d != 0" identifier = (binary_expression "(long)(needle_len << 3) < 0 || needle_len >> 0x3d != 0" (binary_expression "(long)(needle_len << 3) < 0" (cast_expression "(long)(needle_len << 3)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(needle_len << 3)" ( (binary_expression "needle_len << 3" identifier << number_literal) ))) < number_literal) || (binary_expression "needle_len >> 0x3d != 0" (binary_expression "needle_len >> 0x3d" identifier >> number_literal) != number_literal))) ;) (if_statement "if (bVar2) {\n    bVar2 = false;\n  }\n  else {\n    sVar3 = needle_len * 8;\n    if (sVar3 < 0xfa1) {\n      lVar4 = -(sVar3 + 0x36 & 0xfffffffffffffff0);\n      p = (void *)((ulong)(&stack0xffffffffffffffdf + lVar4) & 0xffffffffffffffe0);\n      puVar5 = auStack_48 + lVar4;\n    }\n    else {\n      p = mmalloca(sVar3);\n      puVar5 = auStack_48;\n    }\n    if (p != (void *)0x0) {\n      *(undefined8 *)((long)p + 8) = 1;\n      if (2 < needle_len) {\n        lVar4 = 0;\n        sVar3 = 2;\n        do {\n          uVar1 = needle[lVar4];\n          while (needle[sVar3 - 1] != uVar1) {\n            if (lVar4 == 0) {\n              *(size_t *)((long)p + sVar3 * 8) = sVar3;\n              lVar4 = 0;\n              goto LAB_00106560;\n            }\n            lVar4 = lVar4 - *(long *)((long)p + lVar4 * 8);\n            uVar1 = needle[lVar4];\n          }\n          lVar4 = lVar4 + 1;\n          *(size_t *)((long)p + sVar3 * 8) = sVar3 - lVar4;\nLAB_00106560:\n          sVar3 = sVar3 + 1;\n        } while (needle_len != sVar3);\n      }\n      *resultp = (uchar *)0x0;\n      sVar3 = 0;\n      puVar6 = haystack;\n      do {\n        while( true ) {\n          if (*haystack == '\0') goto LAB_001065b2;\n          if (needle[sVar3] == *haystack) break;\n          if (sVar3 == 0) {\n            puVar6 = puVar6 + 1;\n            haystack = haystack + 1;\n          }\n          else {\n            lVar4 = *(long *)((long)p + sVar3 * 8);\n            puVar6 = puVar6 + lVar4;\n            sVar3 = sVar3 - lVar4;\n          }\n        }\n        sVar3 = sVar3 + 1;\n        haystack = haystack + 1;\n      } while (needle_len != sVar3);\n      *resultp = puVar6;\nLAB_001065b2:\n      *(undefined8 *)(puVar5 + -8) = 0x1065b7;\n      freea(p);\n      bVar2 = true;\n    }\n  }" if (parenthesized_expression "(bVar2)" ( identifier )) (compound_statement "{\n    bVar2 = false;\n  }" { (expression_statement "bVar2 = false;" (assignment_expression "bVar2 = false" identifier = false) ;) }) (else_clause "else {\n    sVar3 = needle_len * 8;\n    if (sVar3 < 0xfa1) {\n      lVar4 = -(sVar3 + 0x36 & 0xfffffffffffffff0);\n      p = (void *)((ulong)(&stack0xffffffffffffffdf + lVar4) & 0xffffffffffffffe0);\n      puVar5 = auStack_48 + lVar4;\n    }\n    else {\n      p = mmalloca(sVar3);\n      puVar5 = auStack_48;\n    }\n    if (p != (void *)0x0) {\n      *(undefined8 *)((long)p + 8) = 1;\n      if (2 < needle_len) {\n        lVar4 = 0;\n        sVar3 = 2;\n        do {\n          uVar1 = needle[lVar4];\n          while (needle[sVar3 - 1] != uVar1) {\n            if (lVar4 == 0) {\n              *(size_t *)((long)p + sVar3 * 8) = sVar3;\n              lVar4 = 0;\n              goto LAB_00106560;\n            }\n            lVar4 = lVar4 - *(long *)((long)p + lVar4 * 8);\n            uVar1 = needle[lVar4];\n          }\n          lVar4 = lVar4 + 1;\n          *(size_t *)((long)p + sVar3 * 8) = sVar3 - lVar4;\nLAB_00106560:\n          sVar3 = sVar3 + 1;\n        } while (needle_len != sVar3);\n      }\n      *resultp = (uchar *)0x0;\n      sVar3 = 0;\n      puVar6 = haystack;\n      do {\n        while( true ) {\n          if (*haystack == '\0') goto LAB_001065b2;\n          if (needle[sVar3] == *haystack) break;\n          if (sVar3 == 0) {\n            puVar6 = puVar6 + 1;\n            haystack = haystack + 1;\n          }\n          else {\n            lVar4 = *(long *)((long)p + sVar3 * 8);\n            puVar6 = puVar6 + lVar4;\n            sVar3 = sVar3 - lVar4;\n          }\n        }\n        sVar3 = sVar3 + 1;\n        haystack = haystack + 1;\n      } while (needle_len != sVar3);\n      *resultp = puVar6;\nLAB_001065b2:\n      *(undefined8 *)(puVar5 + -8) = 0x1065b7;\n      freea(p);\n      bVar2 = true;\n    }\n  }" else (compound_statement "{\n    sVar3 = needle_len * 8;\n    if (sVar3 < 0xfa1) {\n      lVar4 = -(sVar3 + 0x36 & 0xfffffffffffffff0);\n      p = (void *)((ulong)(&stack0xffffffffffffffdf + lVar4) & 0xffffffffffffffe0);\n      puVar5 = auStack_48 + lVar4;\n    }\n    else {\n      p = mmalloca(sVar3);\n      puVar5 = auStack_48;\n    }\n    if (p != (void *)0x0) {\n      *(undefined8 *)((long)p + 8) = 1;\n      if (2 < needle_len) {\n        lVar4 = 0;\n        sVar3 = 2;\n        do {\n          uVar1 = needle[lVar4];\n          while (needle[sVar3 - 1] != uVar1) {\n            if (lVar4 == 0) {\n              *(size_t *)((long)p + sVar3 * 8) = sVar3;\n              lVar4 = 0;\n              goto LAB_00106560;\n            }\n            lVar4 = lVar4 - *(long *)((long)p + lVar4 * 8);\n            uVar1 = needle[lVar4];\n          }\n          lVar4 = lVar4 + 1;\n          *(size_t *)((long)p + sVar3 * 8) = sVar3 - lVar4;\nLAB_00106560:\n          sVar3 = sVar3 + 1;\n        } while (needle_len != sVar3);\n      }\n      *resultp = (uchar *)0x0;\n      sVar3 = 0;\n      puVar6 = haystack;\n      do {\n        while( true ) {\n          if (*haystack == '\0') goto LAB_001065b2;\n          if (needle[sVar3] == *haystack) break;\n          if (sVar3 == 0) {\n            puVar6 = puVar6 + 1;\n            haystack = haystack + 1;\n          }\n          else {\n            lVar4 = *(long *)((long)p + sVar3 * 8);\n            puVar6 = puVar6 + lVar4;\n            sVar3 = sVar3 - lVar4;\n          }\n        }\n        sVar3 = sVar3 + 1;\n        haystack = haystack + 1;\n      } while (needle_len != sVar3);\n      *resultp = puVar6;\nLAB_001065b2:\n      *(undefined8 *)(puVar5 + -8) = 0x1065b7;\n      freea(p);\n      bVar2 = true;\n    }\n  }" { (expression_statement "sVar3 = needle_len * 8;" (assignment_expression "sVar3 = needle_len * 8" identifier = (binary_expression "needle_len * 8" identifier * number_literal)) ;) (if_statement "if (sVar3 < 0xfa1) {\n      lVar4 = -(sVar3 + 0x36 & 0xfffffffffffffff0);\n      p = (void *)((ulong)(&stack0xffffffffffffffdf + lVar4) & 0xffffffffffffffe0);\n      puVar5 = auStack_48 + lVar4;\n    }\n    else {\n      p = mmalloca(sVar3);\n      puVar5 = auStack_48;\n    }" if (parenthesized_expression "(sVar3 < 0xfa1)" ( (binary_expression "sVar3 < 0xfa1" identifier < number_literal) )) (compound_statement "{\n      lVar4 = -(sVar3 + 0x36 & 0xfffffffffffffff0);\n      p = (void *)((ulong)(&stack0xffffffffffffffdf + lVar4) & 0xffffffffffffffe0);\n      puVar5 = auStack_48 + lVar4;\n    }" { (expression_statement "lVar4 = -(sVar3 + 0x36 & 0xfffffffffffffff0);" (assignment_expression "lVar4 = -(sVar3 + 0x36 & 0xfffffffffffffff0)" identifier = (unary_expression "-(sVar3 + 0x36 & 0xfffffffffffffff0)" - (parenthesized_expression "(sVar3 + 0x36 & 0xfffffffffffffff0)" ( (binary_expression "sVar3 + 0x36 & 0xfffffffffffffff0" (binary_expression "sVar3 + 0x36" identifier + number_literal) & number_literal) )))) ;) (expression_statement "p = (void *)((ulong)(&stack0xffffffffffffffdf + lVar4) & 0xffffffffffffffe0);" (assignment_expression "p = (void *)((ulong)(&stack0xffffffffffffffdf + lVar4) & 0xffffffffffffffe0)" identifier = (cast_expression "(void *)((ulong)(&stack0xffffffffffffffdf + lVar4) & 0xffffffffffffffe0)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ulong)(&stack0xffffffffffffffdf + lVar4) & 0xffffffffffffffe0)" ( (binary_expression "(ulong)(&stack0xffffffffffffffdf + lVar4) & 0xffffffffffffffe0" (call_expression "(ulong)(&stack0xffffffffffffffdf + lVar4)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(&stack0xffffffffffffffdf + lVar4)" ( (binary_expression "&stack0xffffffffffffffdf + lVar4" (pointer_expression "&stack0xffffffffffffffdf" & identifier) + identifier) ))) & number_literal) )))) ;) (expression_statement "puVar5 = auStack_48 + lVar4;" (assignment_expression "puVar5 = auStack_48 + lVar4" identifier = (binary_expression "auStack_48 + lVar4" identifier + identifier)) ;) }) (else_clause "else {\n      p = mmalloca(sVar3);\n      puVar5 = auStack_48;\n    }" else (compound_statement "{\n      p = mmalloca(sVar3);\n      puVar5 = auStack_48;\n    }" { (expression_statement "p = mmalloca(sVar3);" (assignment_expression "p = mmalloca(sVar3)" identifier = (call_expression "mmalloca(sVar3)" identifier (argument_list "(sVar3)" ( identifier )))) ;) (expression_statement "puVar5 = auStack_48;" (assignment_expression "puVar5 = auStack_48" identifier = identifier) ;) }))) (if_statement "if (p != (void *)0x0) {\n      *(undefined8 *)((long)p + 8) = 1;\n      if (2 < needle_len) {\n        lVar4 = 0;\n        sVar3 = 2;\n        do {\n          uVar1 = needle[lVar4];\n          while (needle[sVar3 - 1] != uVar1) {\n            if (lVar4 == 0) {\n              *(size_t *)((long)p + sVar3 * 8) = sVar3;\n              lVar4 = 0;\n              goto LAB_00106560;\n            }\n            lVar4 = lVar4 - *(long *)((long)p + lVar4 * 8);\n            uVar1 = needle[lVar4];\n          }\n          lVar4 = lVar4 + 1;\n          *(size_t *)((long)p + sVar3 * 8) = sVar3 - lVar4;\nLAB_00106560:\n          sVar3 = sVar3 + 1;\n        } while (needle_len != sVar3);\n      }\n      *resultp = (uchar *)0x0;\n      sVar3 = 0;\n      puVar6 = haystack;\n      do {\n        while( true ) {\n          if (*haystack == '\0') goto LAB_001065b2;\n          if (needle[sVar3] == *haystack) break;\n          if (sVar3 == 0) {\n            puVar6 = puVar6 + 1;\n            haystack = haystack + 1;\n          }\n          else {\n            lVar4 = *(long *)((long)p + sVar3 * 8);\n            puVar6 = puVar6 + lVar4;\n            sVar3 = sVar3 - lVar4;\n          }\n        }\n        sVar3 = sVar3 + 1;\n        haystack = haystack + 1;\n      } while (needle_len != sVar3);\n      *resultp = puVar6;\nLAB_001065b2:\n      *(undefined8 *)(puVar5 + -8) = 0x1065b7;\n      freea(p);\n      bVar2 = true;\n    }" if (parenthesized_expression "(p != (void *)0x0)" ( (binary_expression "p != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      *(undefined8 *)((long)p + 8) = 1;\n      if (2 < needle_len) {\n        lVar4 = 0;\n        sVar3 = 2;\n        do {\n          uVar1 = needle[lVar4];\n          while (needle[sVar3 - 1] != uVar1) {\n            if (lVar4 == 0) {\n              *(size_t *)((long)p + sVar3 * 8) = sVar3;\n              lVar4 = 0;\n              goto LAB_00106560;\n            }\n            lVar4 = lVar4 - *(long *)((long)p + lVar4 * 8);\n            uVar1 = needle[lVar4];\n          }\n          lVar4 = lVar4 + 1;\n          *(size_t *)((long)p + sVar3 * 8) = sVar3 - lVar4;\nLAB_00106560:\n          sVar3 = sVar3 + 1;\n        } while (needle_len != sVar3);\n      }\n      *resultp = (uchar *)0x0;\n      sVar3 = 0;\n      puVar6 = haystack;\n      do {\n        while( true ) {\n          if (*haystack == '\0') goto LAB_001065b2;\n          if (needle[sVar3] == *haystack) break;\n          if (sVar3 == 0) {\n            puVar6 = puVar6 + 1;\n            haystack = haystack + 1;\n          }\n          else {\n            lVar4 = *(long *)((long)p + sVar3 * 8);\n            puVar6 = puVar6 + lVar4;\n            sVar3 = sVar3 - lVar4;\n          }\n        }\n        sVar3 = sVar3 + 1;\n        haystack = haystack + 1;\n      } while (needle_len != sVar3);\n      *resultp = puVar6;\nLAB_001065b2:\n      *(undefined8 *)(puVar5 + -8) = 0x1065b7;\n      freea(p);\n      bVar2 = true;\n    }" { (expression_statement "*(undefined8 *)((long)p + 8) = 1;" (assignment_expression "*(undefined8 *)((long)p + 8) = 1" (pointer_expression "*(undefined8 *)((long)p + 8)" * (cast_expression "(undefined8 *)((long)p + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)p + 8)" ( (binary_expression "(long)p + 8" (cast_expression "(long)p" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (if_statement "if (2 < needle_len) {\n        lVar4 = 0;\n        sVar3 = 2;\n        do {\n          uVar1 = needle[lVar4];\n          while (needle[sVar3 - 1] != uVar1) {\n            if (lVar4 == 0) {\n              *(size_t *)((long)p + sVar3 * 8) = sVar3;\n              lVar4 = 0;\n              goto LAB_00106560;\n            }\n            lVar4 = lVar4 - *(long *)((long)p + lVar4 * 8);\n            uVar1 = needle[lVar4];\n          }\n          lVar4 = lVar4 + 1;\n          *(size_t *)((long)p + sVar3 * 8) = sVar3 - lVar4;\nLAB_00106560:\n          sVar3 = sVar3 + 1;\n        } while (needle_len != sVar3);\n      }" if (parenthesized_expression "(2 < needle_len)" ( (binary_expression "2 < needle_len" number_literal < identifier) )) (compound_statement "{\n        lVar4 = 0;\n        sVar3 = 2;\n        do {\n          uVar1 = needle[lVar4];\n          while (needle[sVar3 - 1] != uVar1) {\n            if (lVar4 == 0) {\n              *(size_t *)((long)p + sVar3 * 8) = sVar3;\n              lVar4 = 0;\n              goto LAB_00106560;\n            }\n            lVar4 = lVar4 - *(long *)((long)p + lVar4 * 8);\n            uVar1 = needle[lVar4];\n          }\n          lVar4 = lVar4 + 1;\n          *(size_t *)((long)p + sVar3 * 8) = sVar3 - lVar4;\nLAB_00106560:\n          sVar3 = sVar3 + 1;\n        } while (needle_len != sVar3);\n      }" { (expression_statement "lVar4 = 0;" (assignment_expression "lVar4 = 0" identifier = number_literal) ;) (expression_statement "sVar3 = 2;" (assignment_expression "sVar3 = 2" identifier = number_literal) ;) (do_statement "do {\n          uVar1 = needle[lVar4];\n          while (needle[sVar3 - 1] != uVar1) {\n            if (lVar4 == 0) {\n              *(size_t *)((long)p + sVar3 * 8) = sVar3;\n              lVar4 = 0;\n              goto LAB_00106560;\n            }\n            lVar4 = lVar4 - *(long *)((long)p + lVar4 * 8);\n            uVar1 = needle[lVar4];\n          }\n          lVar4 = lVar4 + 1;\n          *(size_t *)((long)p + sVar3 * 8) = sVar3 - lVar4;\nLAB_00106560:\n          sVar3 = sVar3 + 1;\n        } while (needle_len != sVar3);" do (compound_statement "{\n          uVar1 = needle[lVar4];\n          while (needle[sVar3 - 1] != uVar1) {\n            if (lVar4 == 0) {\n              *(size_t *)((long)p + sVar3 * 8) = sVar3;\n              lVar4 = 0;\n              goto LAB_00106560;\n            }\n            lVar4 = lVar4 - *(long *)((long)p + lVar4 * 8);\n            uVar1 = needle[lVar4];\n          }\n          lVar4 = lVar4 + 1;\n          *(size_t *)((long)p + sVar3 * 8) = sVar3 - lVar4;\nLAB_00106560:\n          sVar3 = sVar3 + 1;\n        }" { (expression_statement "uVar1 = needle[lVar4];" (assignment_expression "uVar1 = needle[lVar4]" identifier = (subscript_expression "needle[lVar4]" identifier [ identifier ])) ;) (while_statement "while (needle[sVar3 - 1] != uVar1) {\n            if (lVar4 == 0) {\n              *(size_t *)((long)p + sVar3 * 8) = sVar3;\n              lVar4 = 0;\n              goto LAB_00106560;\n            }\n            lVar4 = lVar4 - *(long *)((long)p + lVar4 * 8);\n            uVar1 = needle[lVar4];\n          }" while (parenthesized_expression "(needle[sVar3 - 1] != uVar1)" ( (binary_expression "needle[sVar3 - 1] != uVar1" (subscript_expression "needle[sVar3 - 1]" identifier [ (binary_expression "sVar3 - 1" identifier - number_literal) ]) != identifier) )) (compound_statement "{\n            if (lVar4 == 0) {\n              *(size_t *)((long)p + sVar3 * 8) = sVar3;\n              lVar4 = 0;\n              goto LAB_00106560;\n            }\n            lVar4 = lVar4 - *(long *)((long)p + lVar4 * 8);\n            uVar1 = needle[lVar4];\n          }" { (if_statement "if (lVar4 == 0) {\n              *(size_t *)((long)p + sVar3 * 8) = sVar3;\n              lVar4 = 0;\n              goto LAB_00106560;\n            }" if (parenthesized_expression "(lVar4 == 0)" ( (binary_expression "lVar4 == 0" identifier == number_literal) )) (compound_statement "{\n              *(size_t *)((long)p + sVar3 * 8) = sVar3;\n              lVar4 = 0;\n              goto LAB_00106560;\n            }" { (expression_statement "*(size_t *)((long)p + sVar3 * 8) = sVar3;" (assignment_expression "*(size_t *)((long)p + sVar3 * 8) = sVar3" (pointer_expression "*(size_t *)((long)p + sVar3 * 8)" * (cast_expression "(size_t *)((long)p + sVar3 * 8)" ( (type_descriptor "size_t *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)p + sVar3 * 8)" ( (binary_expression "(long)p + sVar3 * 8" (cast_expression "(long)p" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (binary_expression "sVar3 * 8" identifier * number_literal)) )))) = identifier) ;) (expression_statement "lVar4 = 0;" (assignment_expression "lVar4 = 0" identifier = number_literal) ;) (goto_statement "goto LAB_00106560;" goto statement_identifier ;) })) (expression_statement "lVar4 = lVar4 - *(long *)((long)p + lVar4 * 8);" (assignment_expression "lVar4 = lVar4 - *(long *)((long)p + lVar4 * 8)" identifier = (binary_expression "lVar4 - *(long *)((long)p + lVar4 * 8)" identifier - (pointer_expression "*(long *)((long)p + lVar4 * 8)" * (cast_expression "(long *)((long)p + lVar4 * 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)p + lVar4 * 8)" ( (binary_expression "(long)p + lVar4 * 8" (cast_expression "(long)p" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (binary_expression "lVar4 * 8" identifier * number_literal)) )))))) ;) (expression_statement "uVar1 = needle[lVar4];" (assignment_expression "uVar1 = needle[lVar4]" identifier = (subscript_expression "needle[lVar4]" identifier [ identifier ])) ;) })) (expression_statement "lVar4 = lVar4 + 1;" (assignment_expression "lVar4 = lVar4 + 1" identifier = (binary_expression "lVar4 + 1" identifier + number_literal)) ;) (expression_statement "*(size_t *)((long)p + sVar3 * 8) = sVar3 - lVar4;" (assignment_expression "*(size_t *)((long)p + sVar3 * 8) = sVar3 - lVar4" (pointer_expression "*(size_t *)((long)p + sVar3 * 8)" * (cast_expression "(size_t *)((long)p + sVar3 * 8)" ( (type_descriptor "size_t *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)p + sVar3 * 8)" ( (binary_expression "(long)p + sVar3 * 8" (cast_expression "(long)p" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (binary_expression "sVar3 * 8" identifier * number_literal)) )))) = (binary_expression "sVar3 - lVar4" identifier - identifier)) ;) (labeled_statement "LAB_00106560:\n          sVar3 = sVar3 + 1;" statement_identifier : (expression_statement "sVar3 = sVar3 + 1;" (assignment_expression "sVar3 = sVar3 + 1" identifier = (binary_expression "sVar3 + 1" identifier + number_literal)) ;)) }) while (parenthesized_expression "(needle_len != sVar3)" ( (binary_expression "needle_len != sVar3" identifier != identifier) )) ;) })) (expression_statement "*resultp = (uchar *)0x0;" (assignment_expression "*resultp = (uchar *)0x0" (pointer_expression "*resultp" * identifier) = (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "sVar3 = 0;" (assignment_expression "sVar3 = 0" identifier = number_literal) ;) (expression_statement "puVar6 = haystack;" (assignment_expression "puVar6 = haystack" identifier = identifier) ;) (do_statement "do {\n        while( true ) {\n          if (*haystack == '\0') goto LAB_001065b2;\n          if (needle[sVar3] == *haystack) break;\n          if (sVar3 == 0) {\n            puVar6 = puVar6 + 1;\n            haystack = haystack + 1;\n          }\n          else {\n            lVar4 = *(long *)((long)p + sVar3 * 8);\n            puVar6 = puVar6 + lVar4;\n            sVar3 = sVar3 - lVar4;\n          }\n        }\n        sVar3 = sVar3 + 1;\n        haystack = haystack + 1;\n      } while (needle_len != sVar3);" do (compound_statement "{\n        while( true ) {\n          if (*haystack == '\0') goto LAB_001065b2;\n          if (needle[sVar3] == *haystack) break;\n          if (sVar3 == 0) {\n            puVar6 = puVar6 + 1;\n            haystack = haystack + 1;\n          }\n          else {\n            lVar4 = *(long *)((long)p + sVar3 * 8);\n            puVar6 = puVar6 + lVar4;\n            sVar3 = sVar3 - lVar4;\n          }\n        }\n        sVar3 = sVar3 + 1;\n        haystack = haystack + 1;\n      }" { (while_statement "while( true ) {\n          if (*haystack == '\0') goto LAB_001065b2;\n          if (needle[sVar3] == *haystack) break;\n          if (sVar3 == 0) {\n            puVar6 = puVar6 + 1;\n            haystack = haystack + 1;\n          }\n          else {\n            lVar4 = *(long *)((long)p + sVar3 * 8);\n            puVar6 = puVar6 + lVar4;\n            sVar3 = sVar3 - lVar4;\n          }\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          if (*haystack == '\0') goto LAB_001065b2;\n          if (needle[sVar3] == *haystack) break;\n          if (sVar3 == 0) {\n            puVar6 = puVar6 + 1;\n            haystack = haystack + 1;\n          }\n          else {\n            lVar4 = *(long *)((long)p + sVar3 * 8);\n            puVar6 = puVar6 + lVar4;\n            sVar3 = sVar3 - lVar4;\n          }\n        }" { (if_statement "if (*haystack == '\0') goto LAB_001065b2;" if (parenthesized_expression "(*haystack == '\0')" ( (binary_expression "*haystack == '\0'" (pointer_expression "*haystack" * identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (goto_statement "goto LAB_001065b2;" goto statement_identifier ;)) (if_statement "if (needle[sVar3] == *haystack) break;" if (parenthesized_expression "(needle[sVar3] == *haystack)" ( (binary_expression "needle[sVar3] == *haystack" (subscript_expression "needle[sVar3]" identifier [ identifier ]) == (pointer_expression "*haystack" * identifier)) )) (break_statement "break;" break ;)) (if_statement "if (sVar3 == 0) {\n            puVar6 = puVar6 + 1;\n            haystack = haystack + 1;\n          }\n          else {\n            lVar4 = *(long *)((long)p + sVar3 * 8);\n            puVar6 = puVar6 + lVar4;\n            sVar3 = sVar3 - lVar4;\n          }" if (parenthesized_expression "(sVar3 == 0)" ( (binary_expression "sVar3 == 0" identifier == number_literal) )) (compound_statement "{\n            puVar6 = puVar6 + 1;\n            haystack = haystack + 1;\n          }" { (expression_statement "puVar6 = puVar6 + 1;" (assignment_expression "puVar6 = puVar6 + 1" identifier = (binary_expression "puVar6 + 1" identifier + number_literal)) ;) (expression_statement "haystack = haystack + 1;" (assignment_expression "haystack = haystack + 1" identifier = (binary_expression "haystack + 1" identifier + number_literal)) ;) }) (else_clause "else {\n            lVar4 = *(long *)((long)p + sVar3 * 8);\n            puVar6 = puVar6 + lVar4;\n            sVar3 = sVar3 - lVar4;\n          }" else (compound_statement "{\n            lVar4 = *(long *)((long)p + sVar3 * 8);\n            puVar6 = puVar6 + lVar4;\n            sVar3 = sVar3 - lVar4;\n          }" { (expression_statement "lVar4 = *(long *)((long)p + sVar3 * 8);" (assignment_expression "lVar4 = *(long *)((long)p + sVar3 * 8)" identifier = (pointer_expression "*(long *)((long)p + sVar3 * 8)" * (cast_expression "(long *)((long)p + sVar3 * 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)p + sVar3 * 8)" ( (binary_expression "(long)p + sVar3 * 8" (cast_expression "(long)p" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (binary_expression "sVar3 * 8" identifier * number_literal)) ))))) ;) (expression_statement "puVar6 = puVar6 + lVar4;" (assignment_expression "puVar6 = puVar6 + lVar4" identifier = (binary_expression "puVar6 + lVar4" identifier + identifier)) ;) (expression_statement "sVar3 = sVar3 - lVar4;" (assignment_expression "sVar3 = sVar3 - lVar4" identifier = (binary_expression "sVar3 - lVar4" identifier - identifier)) ;) }))) })) (expression_statement "sVar3 = sVar3 + 1;" (assignment_expression "sVar3 = sVar3 + 1" identifier = (binary_expression "sVar3 + 1" identifier + number_literal)) ;) (expression_statement "haystack = haystack + 1;" (assignment_expression "haystack = haystack + 1" identifier = (binary_expression "haystack + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(needle_len != sVar3)" ( (binary_expression "needle_len != sVar3" identifier != identifier) )) ;) (expression_statement "*resultp = puVar6;" (assignment_expression "*resultp = puVar6" (pointer_expression "*resultp" * identifier) = identifier) ;) (labeled_statement "LAB_001065b2:\n      *(undefined8 *)(puVar5 + -8) = 0x1065b7;" statement_identifier : (expression_statement "*(undefined8 *)(puVar5 + -8) = 0x1065b7;" (assignment_expression "*(undefined8 *)(puVar5 + -8) = 0x1065b7" (pointer_expression "*(undefined8 *)(puVar5 + -8)" * (cast_expression "(undefined8 *)(puVar5 + -8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar5 + -8)" ( (binary_expression "puVar5 + -8" identifier + number_literal) )))) = number_literal) ;)) (expression_statement "freea(p);" (call_expression "freea(p)" identifier (argument_list "(p)" ( identifier ))) ;) (expression_statement "bVar2 = true;" (assignment_expression "bVar2 = true" identifier = true) ;) })) }))) (if_statement "if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return bVar2;\n  }" if (parenthesized_expression "(local_40 == *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_40 == *(long *)(in_FS_OFFSET + 0x28)" identifier == (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n    return bVar2;\n  }" { (return_statement "return bVar2;" return identifier ;) })) comment (expression_statement "*(code **)(puVar5 + -8) = knuth_morris_pratt_multibyte;" (assignment_expression "*(code **)(puVar5 + -8) = knuth_morris_pratt_multibyte" (pointer_expression "*(code **)(puVar5 + -8)" * (cast_expression "(code **)(puVar5 + -8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar5 + -8)" ( (binary_expression "puVar5 + -8" identifier + number_literal) )))) = identifier) ;) (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit "bool FUN_001064a4(char *param_1,long param_2,ulong param_3,undefined8 *param_4)\n\n{\n  char cVar1;\n  ulong uVar2;\n  long lVar3;\n  undefined1 *puVar4;\n  ulong uVar5;\n  char *pcVar6;\n  bool bVar7;\n  long in_FS_OFFSET;\n  undefined1 auStack_48 [8];\n  long local_40;\n  \n  puVar4 = auStack_48;\n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  bVar7 = (long)(param_3 << 3) < 0 || param_3 >> 0x3d != 0;\n  if (bVar7) {\n    bVar7 = false;\n  }\n  else {\n    if (param_3 * 8 < 0xfa1) {\n      lVar3 = -(param_3 * 8 + 0x36 & 0xfffffffffffffff0);\n      uVar5 = (ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0;\n      puVar4 = auStack_48 + lVar3;\n    }\n    else {\n      uVar5 = FUN_0010b163();\n      puVar4 = auStack_48;\n    }\n    if (uVar5 != 0) {\n      *(undefined8 *)(uVar5 + 8) = 1;\n      if (2 < param_3) {\n        lVar3 = 0;\n        uVar2 = 2;\n        do {\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        } while (param_3 != uVar2);\n      }\n      *param_4 = 0;\n      uVar2 = 0;\n      pcVar6 = param_1;\n      do {\n        while( true ) {\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }\n        uVar2 = uVar2 + 1;\n        param_1 = param_1 + 1;\n      } while (param_3 != uVar2);\n      *param_4 = pcVar6;\nLAB_001065b2:\n      *(undefined8 *)(puVar4 + -8) = 0x1065b7;\n      FUN_0010b1a0();\n      bVar7 = true;\n    }\n  }\n  if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return bVar7;\n  }\n                    \n  *(code **)(puVar4 + -8) = FUN_00106610;\n  __stack_chk_fail();\n}\n\n" (function_definition "bool FUN_001064a4(char *param_1,long param_2,ulong param_3,undefined8 *param_4)\n\n{\n  char cVar1;\n  ulong uVar2;\n  long lVar3;\n  undefined1 *puVar4;\n  ulong uVar5;\n  char *pcVar6;\n  bool bVar7;\n  long in_FS_OFFSET;\n  undefined1 auStack_48 [8];\n  long local_40;\n  \n  puVar4 = auStack_48;\n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  bVar7 = (long)(param_3 << 3) < 0 || param_3 >> 0x3d != 0;\n  if (bVar7) {\n    bVar7 = false;\n  }\n  else {\n    if (param_3 * 8 < 0xfa1) {\n      lVar3 = -(param_3 * 8 + 0x36 & 0xfffffffffffffff0);\n      uVar5 = (ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0;\n      puVar4 = auStack_48 + lVar3;\n    }\n    else {\n      uVar5 = FUN_0010b163();\n      puVar4 = auStack_48;\n    }\n    if (uVar5 != 0) {\n      *(undefined8 *)(uVar5 + 8) = 1;\n      if (2 < param_3) {\n        lVar3 = 0;\n        uVar2 = 2;\n        do {\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        } while (param_3 != uVar2);\n      }\n      *param_4 = 0;\n      uVar2 = 0;\n      pcVar6 = param_1;\n      do {\n        while( true ) {\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }\n        uVar2 = uVar2 + 1;\n        param_1 = param_1 + 1;\n      } while (param_3 != uVar2);\n      *param_4 = pcVar6;\nLAB_001065b2:\n      *(undefined8 *)(puVar4 + -8) = 0x1065b7;\n      FUN_0010b1a0();\n      bVar7 = true;\n    }\n  }\n  if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return bVar7;\n  }\n                    \n  *(code **)(puVar4 + -8) = FUN_00106610;\n  __stack_chk_fail();\n}" primitive_type (function_declarator "FUN_001064a4(char *param_1,long param_2,ulong param_3,undefined8 *param_4)" identifier (parameter_list "(char *param_1,long param_2,ulong param_3,undefined8 *param_4)" ( (parameter_declaration "char *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "ulong param_3" type_identifier identifier) , (parameter_declaration "undefined8 *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  char cVar1;\n  ulong uVar2;\n  long lVar3;\n  undefined1 *puVar4;\n  ulong uVar5;\n  char *pcVar6;\n  bool bVar7;\n  long in_FS_OFFSET;\n  undefined1 auStack_48 [8];\n  long local_40;\n  \n  puVar4 = auStack_48;\n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  bVar7 = (long)(param_3 << 3) < 0 || param_3 >> 0x3d != 0;\n  if (bVar7) {\n    bVar7 = false;\n  }\n  else {\n    if (param_3 * 8 < 0xfa1) {\n      lVar3 = -(param_3 * 8 + 0x36 & 0xfffffffffffffff0);\n      uVar5 = (ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0;\n      puVar4 = auStack_48 + lVar3;\n    }\n    else {\n      uVar5 = FUN_0010b163();\n      puVar4 = auStack_48;\n    }\n    if (uVar5 != 0) {\n      *(undefined8 *)(uVar5 + 8) = 1;\n      if (2 < param_3) {\n        lVar3 = 0;\n        uVar2 = 2;\n        do {\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        } while (param_3 != uVar2);\n      }\n      *param_4 = 0;\n      uVar2 = 0;\n      pcVar6 = param_1;\n      do {\n        while( true ) {\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }\n        uVar2 = uVar2 + 1;\n        param_1 = param_1 + 1;\n      } while (param_3 != uVar2);\n      *param_4 = pcVar6;\nLAB_001065b2:\n      *(undefined8 *)(puVar4 + -8) = 0x1065b7;\n      FUN_0010b1a0();\n      bVar7 = true;\n    }\n  }\n  if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return bVar7;\n  }\n                    \n  *(code **)(puVar4 + -8) = FUN_00106610;\n  __stack_chk_fail();\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "char *pcVar6;" primitive_type (pointer_declarator "*pcVar6" * identifier) ;) (declaration "bool bVar7;" primitive_type identifier ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 auStack_48 [8];" type_identifier (array_declarator "auStack_48 [8]" identifier [ number_literal ]) ;) (declaration "long local_40;" (sized_type_specifier "long" long) identifier ;) (expression_statement "puVar4 = auStack_48;" (assignment_expression "puVar4 = auStack_48" identifier = identifier) ;) (expression_statement "local_40 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_40 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (expression_statement "bVar7 = (long)(param_3 << 3) < 0 || param_3 >> 0x3d != 0;" (assignment_expression "bVar7 = (long)(param_3 << 3) < 0 || param_3 >> 0x3d != 0" identifier = (binary_expression "(long)(param_3 << 3) < 0 || param_3 >> 0x3d != 0" (binary_expression "(long)(param_3 << 3) < 0" (cast_expression "(long)(param_3 << 3)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(param_3 << 3)" ( (binary_expression "param_3 << 3" identifier << number_literal) ))) < number_literal) || (binary_expression "param_3 >> 0x3d != 0" (binary_expression "param_3 >> 0x3d" identifier >> number_literal) != number_literal))) ;) (if_statement "if (bVar7) {\n    bVar7 = false;\n  }\n  else {\n    if (param_3 * 8 < 0xfa1) {\n      lVar3 = -(param_3 * 8 + 0x36 & 0xfffffffffffffff0);\n      uVar5 = (ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0;\n      puVar4 = auStack_48 + lVar3;\n    }\n    else {\n      uVar5 = FUN_0010b163();\n      puVar4 = auStack_48;\n    }\n    if (uVar5 != 0) {\n      *(undefined8 *)(uVar5 + 8) = 1;\n      if (2 < param_3) {\n        lVar3 = 0;\n        uVar2 = 2;\n        do {\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        } while (param_3 != uVar2);\n      }\n      *param_4 = 0;\n      uVar2 = 0;\n      pcVar6 = param_1;\n      do {\n        while( true ) {\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }\n        uVar2 = uVar2 + 1;\n        param_1 = param_1 + 1;\n      } while (param_3 != uVar2);\n      *param_4 = pcVar6;\nLAB_001065b2:\n      *(undefined8 *)(puVar4 + -8) = 0x1065b7;\n      FUN_0010b1a0();\n      bVar7 = true;\n    }\n  }" if (parenthesized_expression "(bVar7)" ( identifier )) (compound_statement "{\n    bVar7 = false;\n  }" { (expression_statement "bVar7 = false;" (assignment_expression "bVar7 = false" identifier = false) ;) }) (else_clause "else {\n    if (param_3 * 8 < 0xfa1) {\n      lVar3 = -(param_3 * 8 + 0x36 & 0xfffffffffffffff0);\n      uVar5 = (ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0;\n      puVar4 = auStack_48 + lVar3;\n    }\n    else {\n      uVar5 = FUN_0010b163();\n      puVar4 = auStack_48;\n    }\n    if (uVar5 != 0) {\n      *(undefined8 *)(uVar5 + 8) = 1;\n      if (2 < param_3) {\n        lVar3 = 0;\n        uVar2 = 2;\n        do {\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        } while (param_3 != uVar2);\n      }\n      *param_4 = 0;\n      uVar2 = 0;\n      pcVar6 = param_1;\n      do {\n        while( true ) {\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }\n        uVar2 = uVar2 + 1;\n        param_1 = param_1 + 1;\n      } while (param_3 != uVar2);\n      *param_4 = pcVar6;\nLAB_001065b2:\n      *(undefined8 *)(puVar4 + -8) = 0x1065b7;\n      FUN_0010b1a0();\n      bVar7 = true;\n    }\n  }" else (compound_statement "{\n    if (param_3 * 8 < 0xfa1) {\n      lVar3 = -(param_3 * 8 + 0x36 & 0xfffffffffffffff0);\n      uVar5 = (ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0;\n      puVar4 = auStack_48 + lVar3;\n    }\n    else {\n      uVar5 = FUN_0010b163();\n      puVar4 = auStack_48;\n    }\n    if (uVar5 != 0) {\n      *(undefined8 *)(uVar5 + 8) = 1;\n      if (2 < param_3) {\n        lVar3 = 0;\n        uVar2 = 2;\n        do {\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        } while (param_3 != uVar2);\n      }\n      *param_4 = 0;\n      uVar2 = 0;\n      pcVar6 = param_1;\n      do {\n        while( true ) {\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }\n        uVar2 = uVar2 + 1;\n        param_1 = param_1 + 1;\n      } while (param_3 != uVar2);\n      *param_4 = pcVar6;\nLAB_001065b2:\n      *(undefined8 *)(puVar4 + -8) = 0x1065b7;\n      FUN_0010b1a0();\n      bVar7 = true;\n    }\n  }" { (if_statement "if (param_3 * 8 < 0xfa1) {\n      lVar3 = -(param_3 * 8 + 0x36 & 0xfffffffffffffff0);\n      uVar5 = (ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0;\n      puVar4 = auStack_48 + lVar3;\n    }\n    else {\n      uVar5 = FUN_0010b163();\n      puVar4 = auStack_48;\n    }" if (parenthesized_expression "(param_3 * 8 < 0xfa1)" ( (binary_expression "param_3 * 8 < 0xfa1" (binary_expression "param_3 * 8" identifier * number_literal) < number_literal) )) (compound_statement "{\n      lVar3 = -(param_3 * 8 + 0x36 & 0xfffffffffffffff0);\n      uVar5 = (ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0;\n      puVar4 = auStack_48 + lVar3;\n    }" { (expression_statement "lVar3 = -(param_3 * 8 + 0x36 & 0xfffffffffffffff0);" (assignment_expression "lVar3 = -(param_3 * 8 + 0x36 & 0xfffffffffffffff0)" identifier = (unary_expression "-(param_3 * 8 + 0x36 & 0xfffffffffffffff0)" - (parenthesized_expression "(param_3 * 8 + 0x36 & 0xfffffffffffffff0)" ( (binary_expression "param_3 * 8 + 0x36 & 0xfffffffffffffff0" (binary_expression "param_3 * 8 + 0x36" (binary_expression "param_3 * 8" identifier * number_literal) + number_literal) & number_literal) )))) ;) (expression_statement "uVar5 = (ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0;" (assignment_expression "uVar5 = (ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0" identifier = (binary_expression "(ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0" (call_expression "(ulong)(&stack0xffffffffffffffdf + lVar3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(&stack0xffffffffffffffdf + lVar3)" ( (binary_expression "&stack0xffffffffffffffdf + lVar3" (pointer_expression "&stack0xffffffffffffffdf" & identifier) + identifier) ))) & number_literal)) ;) (expression_statement "puVar4 = auStack_48 + lVar3;" (assignment_expression "puVar4 = auStack_48 + lVar3" identifier = (binary_expression "auStack_48 + lVar3" identifier + identifier)) ;) }) (else_clause "else {\n      uVar5 = FUN_0010b163();\n      puVar4 = auStack_48;\n    }" else (compound_statement "{\n      uVar5 = FUN_0010b163();\n      puVar4 = auStack_48;\n    }" { (expression_statement "uVar5 = FUN_0010b163();" (assignment_expression "uVar5 = FUN_0010b163()" identifier = (call_expression "FUN_0010b163()" identifier (argument_list "()" ( )))) ;) (expression_statement "puVar4 = auStack_48;" (assignment_expression "puVar4 = auStack_48" identifier = identifier) ;) }))) (if_statement "if (uVar5 != 0) {\n      *(undefined8 *)(uVar5 + 8) = 1;\n      if (2 < param_3) {\n        lVar3 = 0;\n        uVar2 = 2;\n        do {\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        } while (param_3 != uVar2);\n      }\n      *param_4 = 0;\n      uVar2 = 0;\n      pcVar6 = param_1;\n      do {\n        while( true ) {\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }\n        uVar2 = uVar2 + 1;\n        param_1 = param_1 + 1;\n      } while (param_3 != uVar2);\n      *param_4 = pcVar6;\nLAB_001065b2:\n      *(undefined8 *)(puVar4 + -8) = 0x1065b7;\n      FUN_0010b1a0();\n      bVar7 = true;\n    }" if (parenthesized_expression "(uVar5 != 0)" ( (binary_expression "uVar5 != 0" identifier != number_literal) )) (compound_statement "{\n      *(undefined8 *)(uVar5 + 8) = 1;\n      if (2 < param_3) {\n        lVar3 = 0;\n        uVar2 = 2;\n        do {\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        } while (param_3 != uVar2);\n      }\n      *param_4 = 0;\n      uVar2 = 0;\n      pcVar6 = param_1;\n      do {\n        while( true ) {\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }\n        uVar2 = uVar2 + 1;\n        param_1 = param_1 + 1;\n      } while (param_3 != uVar2);\n      *param_4 = pcVar6;\nLAB_001065b2:\n      *(undefined8 *)(puVar4 + -8) = 0x1065b7;\n      FUN_0010b1a0();\n      bVar7 = true;\n    }" { (expression_statement "*(undefined8 *)(uVar5 + 8) = 1;" (assignment_expression "*(undefined8 *)(uVar5 + 8) = 1" (pointer_expression "*(undefined8 *)(uVar5 + 8)" * (cast_expression "(undefined8 *)(uVar5 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar5 + 8)" ( (binary_expression "uVar5 + 8" identifier + number_literal) )))) = number_literal) ;) (if_statement "if (2 < param_3) {\n        lVar3 = 0;\n        uVar2 = 2;\n        do {\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        } while (param_3 != uVar2);\n      }" if (parenthesized_expression "(2 < param_3)" ( (binary_expression "2 < param_3" number_literal < identifier) )) (compound_statement "{\n        lVar3 = 0;\n        uVar2 = 2;\n        do {\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        } while (param_3 != uVar2);\n      }" { (expression_statement "lVar3 = 0;" (assignment_expression "lVar3 = 0" identifier = number_literal) ;) (expression_statement "uVar2 = 2;" (assignment_expression "uVar2 = 2" identifier = number_literal) ;) (do_statement "do {\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        } while (param_3 != uVar2);" do (compound_statement "{\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        }" { (expression_statement "cVar1 = *(char *)(param_2 + lVar3);" (assignment_expression "cVar1 = *(char *)(param_2 + lVar3)" identifier = (pointer_expression "*(char *)(param_2 + lVar3)" * (cast_expression "(char *)(param_2 + lVar3)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + lVar3)" ( (binary_expression "param_2 + lVar3" identifier + identifier) ))))) ;) (while_statement "while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }" while (parenthesized_expression "(*(char *)(param_2 + -1 + uVar2) != cVar1)" ( (binary_expression "*(char *)(param_2 + -1 + uVar2) != cVar1" (pointer_expression "*(char *)(param_2 + -1 + uVar2)" * (cast_expression "(char *)(param_2 + -1 + uVar2)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + -1 + uVar2)" ( (binary_expression "param_2 + -1 + uVar2" (binary_expression "param_2 + -1" identifier + number_literal) + identifier) )))) != identifier) )) (compound_statement "{\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }" { (if_statement "if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }" if (parenthesized_expression "(lVar3 == 0)" ( (binary_expression "lVar3 == 0" identifier == number_literal) )) (compound_statement "{\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }" { (expression_statement "*(ulong *)(uVar5 + uVar2 * 8) = uVar2;" (assignment_expression "*(ulong *)(uVar5 + uVar2 * 8) = uVar2" (pointer_expression "*(ulong *)(uVar5 + uVar2 * 8)" * (cast_expression "(ulong *)(uVar5 + uVar2 * 8)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar5 + uVar2 * 8)" ( (binary_expression "uVar5 + uVar2 * 8" identifier + (binary_expression "uVar2 * 8" identifier * number_literal)) )))) = identifier) ;) (expression_statement "lVar3 = 0;" (assignment_expression "lVar3 = 0" identifier = number_literal) ;) (goto_statement "goto LAB_00106560;" goto statement_identifier ;) })) (expression_statement "lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);" (assignment_expression "lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8)" identifier = (binary_expression "lVar3 - *(long *)(uVar5 + lVar3 * 8)" identifier - (pointer_expression "*(long *)(uVar5 + lVar3 * 8)" * (cast_expression "(long *)(uVar5 + lVar3 * 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar5 + lVar3 * 8)" ( (binary_expression "uVar5 + lVar3 * 8" identifier + (binary_expression "lVar3 * 8" identifier * number_literal)) )))))) ;) (expression_statement "cVar1 = *(char *)(param_2 + lVar3);" (assignment_expression "cVar1 = *(char *)(param_2 + lVar3)" identifier = (pointer_expression "*(char *)(param_2 + lVar3)" * (cast_expression "(char *)(param_2 + lVar3)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + lVar3)" ( (binary_expression "param_2 + lVar3" identifier + identifier) ))))) ;) })) (expression_statement "lVar3 = lVar3 + 1;" (assignment_expression "lVar3 = lVar3 + 1" identifier = (binary_expression "lVar3 + 1" identifier + number_literal)) ;) (expression_statement "*(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;" (assignment_expression "*(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3" (pointer_expression "*(ulong *)(uVar5 + uVar2 * 8)" * (cast_expression "(ulong *)(uVar5 + uVar2 * 8)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar5 + uVar2 * 8)" ( (binary_expression "uVar5 + uVar2 * 8" identifier + (binary_expression "uVar2 * 8" identifier * number_literal)) )))) = (binary_expression "uVar2 - lVar3" identifier - identifier)) ;) (labeled_statement "LAB_00106560:\n          uVar2 = uVar2 + 1;" statement_identifier : (expression_statement "uVar2 = uVar2 + 1;" (assignment_expression "uVar2 = uVar2 + 1" identifier = (binary_expression "uVar2 + 1" identifier + number_literal)) ;)) }) while (parenthesized_expression "(param_3 != uVar2)" ( (binary_expression "param_3 != uVar2" identifier != identifier) )) ;) })) (expression_statement "*param_4 = 0;" (assignment_expression "*param_4 = 0" (pointer_expression "*param_4" * identifier) = number_literal) ;) (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" identifier = number_literal) ;) (expression_statement "pcVar6 = param_1;" (assignment_expression "pcVar6 = param_1" identifier = identifier) ;) (do_statement "do {\n        while( true ) {\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }\n        uVar2 = uVar2 + 1;\n        param_1 = param_1 + 1;\n      } while (param_3 != uVar2);" do (compound_statement "{\n        while( true ) {\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }\n        uVar2 = uVar2 + 1;\n        param_1 = param_1 + 1;\n      }" { (while_statement "while( true ) {\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }" { (if_statement "if (*param_1 == '\0') goto LAB_001065b2;" if (parenthesized_expression "(*param_1 == '\0')" ( (binary_expression "*param_1 == '\0'" (pointer_expression "*param_1" * identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (goto_statement "goto LAB_001065b2;" goto statement_identifier ;)) (if_statement "if (*(char *)(param_2 + uVar2) == *param_1) break;" if (parenthesized_expression "(*(char *)(param_2 + uVar2) == *param_1)" ( (binary_expression "*(char *)(param_2 + uVar2) == *param_1" (pointer_expression "*(char *)(param_2 + uVar2)" * (cast_expression "(char *)(param_2 + uVar2)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + uVar2)" ( (binary_expression "param_2 + uVar2" identifier + identifier) )))) == (pointer_expression "*param_1" * identifier)) )) (break_statement "break;" break ;)) (if_statement "if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }" { (expression_statement "pcVar6 = pcVar6 + 1;" (assignment_expression "pcVar6 = pcVar6 + 1" identifier = (binary_expression "pcVar6 + 1" identifier + number_literal)) ;) (expression_statement "param_1 = param_1 + 1;" (assignment_expression "param_1 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ;) }) (else_clause "else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }" else (compound_statement "{\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }" { (expression_statement "lVar3 = *(long *)(uVar5 + uVar2 * 8);" (assignment_expression "lVar3 = *(long *)(uVar5 + uVar2 * 8)" identifier = (pointer_expression "*(long *)(uVar5 + uVar2 * 8)" * (cast_expression "(long *)(uVar5 + uVar2 * 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar5 + uVar2 * 8)" ( (binary_expression "uVar5 + uVar2 * 8" identifier + (binary_expression "uVar2 * 8" identifier * number_literal)) ))))) ;) (expression_statement "pcVar6 = pcVar6 + lVar3;" (assignment_expression "pcVar6 = pcVar6 + lVar3" identifier = (binary_expression "pcVar6 + lVar3" identifier + identifier)) ;) (expression_statement "uVar2 = uVar2 - lVar3;" (assignment_expression "uVar2 = uVar2 - lVar3" identifier = (binary_expression "uVar2 - lVar3" identifier - identifier)) ;) }))) })) (expression_statement "uVar2 = uVar2 + 1;" (assignment_expression "uVar2 = uVar2 + 1" identifier = (binary_expression "uVar2 + 1" identifier + number_literal)) ;) (expression_statement "param_1 = param_1 + 1;" (assignment_expression "param_1 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(param_3 != uVar2)" ( (binary_expression "param_3 != uVar2" identifier != identifier) )) ;) (expression_statement "*param_4 = pcVar6;" (assignment_expression "*param_4 = pcVar6" (pointer_expression "*param_4" * identifier) = identifier) ;) (labeled_statement "LAB_001065b2:\n      *(undefined8 *)(puVar4 + -8) = 0x1065b7;" statement_identifier : (expression_statement "*(undefined8 *)(puVar4 + -8) = 0x1065b7;" (assignment_expression "*(undefined8 *)(puVar4 + -8) = 0x1065b7" (pointer_expression "*(undefined8 *)(puVar4 + -8)" * (cast_expression "(undefined8 *)(puVar4 + -8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + -8)" ( (binary_expression "puVar4 + -8" identifier + number_literal) )))) = number_literal) ;)) (expression_statement "FUN_0010b1a0();" (call_expression "FUN_0010b1a0()" identifier (argument_list "()" ( ))) ;) (expression_statement "bVar7 = true;" (assignment_expression "bVar7 = true" identifier = true) ;) })) }))) (if_statement "if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return bVar7;\n  }" if (parenthesized_expression "(local_40 == *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_40 == *(long *)(in_FS_OFFSET + 0x28)" identifier == (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n    return bVar7;\n  }" { (return_statement "return bVar7;" return identifier ;) })) (expression_statement "*(code **)(puVar4 + -8) = FUN_00106610;" (assignment_expression "*(code **)(puVar4 + -8) = FUN_00106610" (pointer_expression "*(code **)(puVar4 + -8)" * (cast_expression "(code **)(puVar4 + -8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar4 + -8)" ( (binary_expression "puVar4 + -8" identifier + number_literal) )))) = identifier) ;) (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration (sized_type_specifier long) IDENT ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression IDENT << LIT) ))) < LIT) || (binary_expression (binary_expression IDENT >> LIT) != LIT))) ;) (if_statement if (parenthesized_expression ( IDENT )) (compound_statement { (expression_statement (assignment_expression IDENT = BOOL) ;) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT * LIT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (unary_expression - (parenthesized_expression ( (binary_expression (binary_expression (binary_expression IDENT * LIT) + LIT) & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (pointer_expression & IDENT) + IDENT) ))) & LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) ))))) ;) (while_statement while (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) )))) != IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) ))))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) = (binary_expression IDENT - IDENT)) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;)) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == (char_literal ' escape_sequence ')) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) == (pointer_expression * IDENT)) )) (break_statement break ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) }))) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;)) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) })) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })))
(function_definition "bool FUN_001064a4(char *param_1,long param_2,ulong param_3,undefined8 *param_4)\n\n{\n  char cVar1;\n  ulong uVar2;\n  long lVar3;\n  undefined1 *puVar4;\n  ulong uVar5;\n  char *pcVar6;\n  bool bVar7;\n  long in_FS_OFFSET;\n  undefined1 auStack_48 [8];\n  long local_40;\n  \n  puVar4 = auStack_48;\n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  bVar7 = (long)(param_3 << 3) < 0 || param_3 >> 0x3d != 0;\n  if (bVar7) {\n    bVar7 = false;\n  }\n  else {\n    if (param_3 * 8 < 0xfa1) {\n      lVar3 = -(param_3 * 8 + 0x36 & 0xfffffffffffffff0);\n      uVar5 = (ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0;\n      puVar4 = auStack_48 + lVar3;\n    }\n    else {\n      uVar5 = FUN_0010b163();\n      puVar4 = auStack_48;\n    }\n    if (uVar5 != 0) {\n      *(undefined8 *)(uVar5 + 8) = 1;\n      if (2 < param_3) {\n        lVar3 = 0;\n        uVar2 = 2;\n        do {\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        } while (param_3 != uVar2);\n      }\n      *param_4 = 0;\n      uVar2 = 0;\n      pcVar6 = param_1;\n      do {\n        while( true ) {\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }\n        uVar2 = uVar2 + 1;\n        param_1 = param_1 + 1;\n      } while (param_3 != uVar2);\n      *param_4 = pcVar6;\nLAB_001065b2:\n      *(undefined8 *)(puVar4 + -8) = 0x1065b7;\n      FUN_0010b1a0();\n      bVar7 = true;\n    }\n  }\n  if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return bVar7;\n  }\n                    \n  *(code **)(puVar4 + -8) = FUN_00106610;\n  __stack_chk_fail();\n}" (primitive_type "bool") (function_declarator "FUN_001064a4(char *param_1,long param_2,ulong param_3,undefined8 *param_4)" (identifier "FUN_001064a4") (parameter_list "(char *param_1,long param_2,ulong param_3,undefined8 *param_4)" (( "(") (parameter_declaration "char *param_1" (primitive_type "char") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "long param_2" (sized_type_specifier "long" (long "long")) (identifier "param_2")) (, ",") (parameter_declaration "ulong param_3" (type_identifier "ulong") (identifier "param_3")) (, ",") (parameter_declaration "undefined8 *param_4" (type_identifier "undefined8") (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) () ")"))) (compound_statement "{\n  char cVar1;\n  ulong uVar2;\n  long lVar3;\n  undefined1 *puVar4;\n  ulong uVar5;\n  char *pcVar6;\n  bool bVar7;\n  long in_FS_OFFSET;\n  undefined1 auStack_48 [8];\n  long local_40;\n  \n  puVar4 = auStack_48;\n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  bVar7 = (long)(param_3 << 3) < 0 || param_3 >> 0x3d != 0;\n  if (bVar7) {\n    bVar7 = false;\n  }\n  else {\n    if (param_3 * 8 < 0xfa1) {\n      lVar3 = -(param_3 * 8 + 0x36 & 0xfffffffffffffff0);\n      uVar5 = (ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0;\n      puVar4 = auStack_48 + lVar3;\n    }\n    else {\n      uVar5 = FUN_0010b163();\n      puVar4 = auStack_48;\n    }\n    if (uVar5 != 0) {\n      *(undefined8 *)(uVar5 + 8) = 1;\n      if (2 < param_3) {\n        lVar3 = 0;\n        uVar2 = 2;\n        do {\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        } while (param_3 != uVar2);\n      }\n      *param_4 = 0;\n      uVar2 = 0;\n      pcVar6 = param_1;\n      do {\n        while( true ) {\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }\n        uVar2 = uVar2 + 1;\n        param_1 = param_1 + 1;\n      } while (param_3 != uVar2);\n      *param_4 = pcVar6;\nLAB_001065b2:\n      *(undefined8 *)(puVar4 + -8) = 0x1065b7;\n      FUN_0010b1a0();\n      bVar7 = true;\n    }\n  }\n  if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return bVar7;\n  }\n                    \n  *(code **)(puVar4 + -8) = FUN_00106610;\n  __stack_chk_fail();\n}" ({ "{") (declaration "char cVar1;" (primitive_type "char") (identifier "cVar1") (; ";")) (declaration "ulong uVar2;" (type_identifier "ulong") (identifier "uVar2") (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (declaration "undefined1 *puVar4;" (type_identifier "undefined1") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (declaration "ulong uVar5;" (type_identifier "ulong") (identifier "uVar5") (; ";")) (declaration "char *pcVar6;" (primitive_type "char") (pointer_declarator "*pcVar6" (* "*") (identifier "pcVar6")) (; ";")) (declaration "bool bVar7;" (primitive_type "bool") (identifier "bVar7") (; ";")) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" (long "long")) (identifier "in_FS_OFFSET") (; ";")) (declaration "undefined1 auStack_48 [8];" (type_identifier "undefined1") (array_declarator "auStack_48 [8]" (identifier "auStack_48") ([ "[") (number_literal "8") (] "]")) (; ";")) (declaration "long local_40;" (sized_type_specifier "long" (long "long")) (identifier "local_40") (; ";")) (expression_statement "puVar4 = auStack_48;" (assignment_expression "puVar4 = auStack_48" (identifier "puVar4") (= "=") (identifier "auStack_48")) (; ";")) (expression_statement "local_40 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_40 = *(long *)(in_FS_OFFSET + 0x28)" (identifier "local_40") (= "=") (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" (* "*") (cast_expression "(long *)(in_FS_OFFSET + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_FS_OFFSET + 0x28)" (( "(") (binary_expression "in_FS_OFFSET + 0x28" (identifier "in_FS_OFFSET") (+ "+") (number_literal "0x28")) () ")"))))) (; ";")) (expression_statement "bVar7 = (long)(param_3 << 3) < 0 || param_3 >> 0x3d != 0;" (assignment_expression "bVar7 = (long)(param_3 << 3) < 0 || param_3 >> 0x3d != 0" (identifier "bVar7") (= "=") (binary_expression "(long)(param_3 << 3) < 0 || param_3 >> 0x3d != 0" (binary_expression "(long)(param_3 << 3) < 0" (cast_expression "(long)(param_3 << 3)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "(param_3 << 3)" (( "(") (binary_expression "param_3 << 3" (identifier "param_3") (<< "<<") (number_literal "3")) () ")"))) (< "<") (number_literal "0")) (|| "||") (binary_expression "param_3 >> 0x3d != 0" (binary_expression "param_3 >> 0x3d" (identifier "param_3") (>> ">>") (number_literal "0x3d")) (!= "!=") (number_literal "0")))) (; ";")) (if_statement "if (bVar7) {\n    bVar7 = false;\n  }\n  else {\n    if (param_3 * 8 < 0xfa1) {\n      lVar3 = -(param_3 * 8 + 0x36 & 0xfffffffffffffff0);\n      uVar5 = (ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0;\n      puVar4 = auStack_48 + lVar3;\n    }\n    else {\n      uVar5 = FUN_0010b163();\n      puVar4 = auStack_48;\n    }\n    if (uVar5 != 0) {\n      *(undefined8 *)(uVar5 + 8) = 1;\n      if (2 < param_3) {\n        lVar3 = 0;\n        uVar2 = 2;\n        do {\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        } while (param_3 != uVar2);\n      }\n      *param_4 = 0;\n      uVar2 = 0;\n      pcVar6 = param_1;\n      do {\n        while( true ) {\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }\n        uVar2 = uVar2 + 1;\n        param_1 = param_1 + 1;\n      } while (param_3 != uVar2);\n      *param_4 = pcVar6;\nLAB_001065b2:\n      *(undefined8 *)(puVar4 + -8) = 0x1065b7;\n      FUN_0010b1a0();\n      bVar7 = true;\n    }\n  }" (if "if") (parenthesized_expression "(bVar7)" (( "(") (identifier "bVar7") () ")")) (compound_statement "{\n    bVar7 = false;\n  }" ({ "{") (expression_statement "bVar7 = false;" (assignment_expression "bVar7 = false" (identifier "bVar7") (= "=") (false "false")) (; ";")) (} "}")) (else_clause "else {\n    if (param_3 * 8 < 0xfa1) {\n      lVar3 = -(param_3 * 8 + 0x36 & 0xfffffffffffffff0);\n      uVar5 = (ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0;\n      puVar4 = auStack_48 + lVar3;\n    }\n    else {\n      uVar5 = FUN_0010b163();\n      puVar4 = auStack_48;\n    }\n    if (uVar5 != 0) {\n      *(undefined8 *)(uVar5 + 8) = 1;\n      if (2 < param_3) {\n        lVar3 = 0;\n        uVar2 = 2;\n        do {\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        } while (param_3 != uVar2);\n      }\n      *param_4 = 0;\n      uVar2 = 0;\n      pcVar6 = param_1;\n      do {\n        while( true ) {\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }\n        uVar2 = uVar2 + 1;\n        param_1 = param_1 + 1;\n      } while (param_3 != uVar2);\n      *param_4 = pcVar6;\nLAB_001065b2:\n      *(undefined8 *)(puVar4 + -8) = 0x1065b7;\n      FUN_0010b1a0();\n      bVar7 = true;\n    }\n  }" (else "else") (compound_statement "{\n    if (param_3 * 8 < 0xfa1) {\n      lVar3 = -(param_3 * 8 + 0x36 & 0xfffffffffffffff0);\n      uVar5 = (ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0;\n      puVar4 = auStack_48 + lVar3;\n    }\n    else {\n      uVar5 = FUN_0010b163();\n      puVar4 = auStack_48;\n    }\n    if (uVar5 != 0) {\n      *(undefined8 *)(uVar5 + 8) = 1;\n      if (2 < param_3) {\n        lVar3 = 0;\n        uVar2 = 2;\n        do {\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        } while (param_3 != uVar2);\n      }\n      *param_4 = 0;\n      uVar2 = 0;\n      pcVar6 = param_1;\n      do {\n        while( true ) {\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }\n        uVar2 = uVar2 + 1;\n        param_1 = param_1 + 1;\n      } while (param_3 != uVar2);\n      *param_4 = pcVar6;\nLAB_001065b2:\n      *(undefined8 *)(puVar4 + -8) = 0x1065b7;\n      FUN_0010b1a0();\n      bVar7 = true;\n    }\n  }" ({ "{") (if_statement "if (param_3 * 8 < 0xfa1) {\n      lVar3 = -(param_3 * 8 + 0x36 & 0xfffffffffffffff0);\n      uVar5 = (ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0;\n      puVar4 = auStack_48 + lVar3;\n    }\n    else {\n      uVar5 = FUN_0010b163();\n      puVar4 = auStack_48;\n    }" (if "if") (parenthesized_expression "(param_3 * 8 < 0xfa1)" (( "(") (binary_expression "param_3 * 8 < 0xfa1" (binary_expression "param_3 * 8" (identifier "param_3") (* "*") (number_literal "8")) (< "<") (number_literal "0xfa1")) () ")")) (compound_statement "{\n      lVar3 = -(param_3 * 8 + 0x36 & 0xfffffffffffffff0);\n      uVar5 = (ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0;\n      puVar4 = auStack_48 + lVar3;\n    }" ({ "{") (expression_statement "lVar3 = -(param_3 * 8 + 0x36 & 0xfffffffffffffff0);" (assignment_expression "lVar3 = -(param_3 * 8 + 0x36 & 0xfffffffffffffff0)" (identifier "lVar3") (= "=") (unary_expression "-(param_3 * 8 + 0x36 & 0xfffffffffffffff0)" (- "-") (parenthesized_expression "(param_3 * 8 + 0x36 & 0xfffffffffffffff0)" (( "(") (binary_expression "param_3 * 8 + 0x36 & 0xfffffffffffffff0" (binary_expression "param_3 * 8 + 0x36" (binary_expression "param_3 * 8" (identifier "param_3") (* "*") (number_literal "8")) (+ "+") (number_literal "0x36")) (& "&") (number_literal "0xfffffffffffffff0")) () ")")))) (; ";")) (expression_statement "uVar5 = (ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0;" (assignment_expression "uVar5 = (ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0" (identifier "uVar5") (= "=") (binary_expression "(ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0" (call_expression "(ulong)(&stack0xffffffffffffffdf + lVar3)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(&stack0xffffffffffffffdf + lVar3)" (( "(") (binary_expression "&stack0xffffffffffffffdf + lVar3" (pointer_expression "&stack0xffffffffffffffdf" (& "&") (identifier "stack0xffffffffffffffdf")) (+ "+") (identifier "lVar3")) () ")"))) (& "&") (number_literal "0xffffffffffffffe0"))) (; ";")) (expression_statement "puVar4 = auStack_48 + lVar3;" (assignment_expression "puVar4 = auStack_48 + lVar3" (identifier "puVar4") (= "=") (binary_expression "auStack_48 + lVar3" (identifier "auStack_48") (+ "+") (identifier "lVar3"))) (; ";")) (} "}")) (else_clause "else {\n      uVar5 = FUN_0010b163();\n      puVar4 = auStack_48;\n    }" (else "else") (compound_statement "{\n      uVar5 = FUN_0010b163();\n      puVar4 = auStack_48;\n    }" ({ "{") (expression_statement "uVar5 = FUN_0010b163();" (assignment_expression "uVar5 = FUN_0010b163()" (identifier "uVar5") (= "=") (call_expression "FUN_0010b163()" (identifier "FUN_0010b163") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "puVar4 = auStack_48;" (assignment_expression "puVar4 = auStack_48" (identifier "puVar4") (= "=") (identifier "auStack_48")) (; ";")) (} "}")))) (if_statement "if (uVar5 != 0) {\n      *(undefined8 *)(uVar5 + 8) = 1;\n      if (2 < param_3) {\n        lVar3 = 0;\n        uVar2 = 2;\n        do {\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        } while (param_3 != uVar2);\n      }\n      *param_4 = 0;\n      uVar2 = 0;\n      pcVar6 = param_1;\n      do {\n        while( true ) {\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }\n        uVar2 = uVar2 + 1;\n        param_1 = param_1 + 1;\n      } while (param_3 != uVar2);\n      *param_4 = pcVar6;\nLAB_001065b2:\n      *(undefined8 *)(puVar4 + -8) = 0x1065b7;\n      FUN_0010b1a0();\n      bVar7 = true;\n    }" (if "if") (parenthesized_expression "(uVar5 != 0)" (( "(") (binary_expression "uVar5 != 0" (identifier "uVar5") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      *(undefined8 *)(uVar5 + 8) = 1;\n      if (2 < param_3) {\n        lVar3 = 0;\n        uVar2 = 2;\n        do {\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        } while (param_3 != uVar2);\n      }\n      *param_4 = 0;\n      uVar2 = 0;\n      pcVar6 = param_1;\n      do {\n        while( true ) {\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }\n        uVar2 = uVar2 + 1;\n        param_1 = param_1 + 1;\n      } while (param_3 != uVar2);\n      *param_4 = pcVar6;\nLAB_001065b2:\n      *(undefined8 *)(puVar4 + -8) = 0x1065b7;\n      FUN_0010b1a0();\n      bVar7 = true;\n    }" ({ "{") (expression_statement "*(undefined8 *)(uVar5 + 8) = 1;" (assignment_expression "*(undefined8 *)(uVar5 + 8) = 1" (pointer_expression "*(undefined8 *)(uVar5 + 8)" (* "*") (cast_expression "(undefined8 *)(uVar5 + 8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar5 + 8)" (( "(") (binary_expression "uVar5 + 8" (identifier "uVar5") (+ "+") (number_literal "8")) () ")")))) (= "=") (number_literal "1")) (; ";")) (if_statement "if (2 < param_3) {\n        lVar3 = 0;\n        uVar2 = 2;\n        do {\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        } while (param_3 != uVar2);\n      }" (if "if") (parenthesized_expression "(2 < param_3)" (( "(") (binary_expression "2 < param_3" (number_literal "2") (< "<") (identifier "param_3")) () ")")) (compound_statement "{\n        lVar3 = 0;\n        uVar2 = 2;\n        do {\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        } while (param_3 != uVar2);\n      }" ({ "{") (expression_statement "lVar3 = 0;" (assignment_expression "lVar3 = 0" (identifier "lVar3") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar2 = 2;" (assignment_expression "uVar2 = 2" (identifier "uVar2") (= "=") (number_literal "2")) (; ";")) (do_statement "do {\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        } while (param_3 != uVar2);" (do "do") (compound_statement "{\n          cVar1 = *(char *)(param_2 + lVar3);\n          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }\n          lVar3 = lVar3 + 1;\n          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;\nLAB_00106560:\n          uVar2 = uVar2 + 1;\n        }" ({ "{") (expression_statement "cVar1 = *(char *)(param_2 + lVar3);" (assignment_expression "cVar1 = *(char *)(param_2 + lVar3)" (identifier "cVar1") (= "=") (pointer_expression "*(char *)(param_2 + lVar3)" (* "*") (cast_expression "(char *)(param_2 + lVar3)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + lVar3)" (( "(") (binary_expression "param_2 + lVar3" (identifier "param_2") (+ "+") (identifier "lVar3")) () ")"))))) (; ";")) (while_statement "while (*(char *)(param_2 + -1 + uVar2) != cVar1) {\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }" (while "while") (parenthesized_expression "(*(char *)(param_2 + -1 + uVar2) != cVar1)" (( "(") (binary_expression "*(char *)(param_2 + -1 + uVar2) != cVar1" (pointer_expression "*(char *)(param_2 + -1 + uVar2)" (* "*") (cast_expression "(char *)(param_2 + -1 + uVar2)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + -1 + uVar2)" (( "(") (binary_expression "param_2 + -1 + uVar2" (binary_expression "param_2 + -1" (identifier "param_2") (+ "+") (number_literal "-1")) (+ "+") (identifier "uVar2")) () ")")))) (!= "!=") (identifier "cVar1")) () ")")) (compound_statement "{\n            if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }\n            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);\n            cVar1 = *(char *)(param_2 + lVar3);\n          }" ({ "{") (if_statement "if (lVar3 == 0) {\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }" (if "if") (parenthesized_expression "(lVar3 == 0)" (( "(") (binary_expression "lVar3 == 0" (identifier "lVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;\n              lVar3 = 0;\n              goto LAB_00106560;\n            }" ({ "{") (expression_statement "*(ulong *)(uVar5 + uVar2 * 8) = uVar2;" (assignment_expression "*(ulong *)(uVar5 + uVar2 * 8) = uVar2" (pointer_expression "*(ulong *)(uVar5 + uVar2 * 8)" (* "*") (cast_expression "(ulong *)(uVar5 + uVar2 * 8)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar5 + uVar2 * 8)" (( "(") (binary_expression "uVar5 + uVar2 * 8" (identifier "uVar5") (+ "+") (binary_expression "uVar2 * 8" (identifier "uVar2") (* "*") (number_literal "8"))) () ")")))) (= "=") (identifier "uVar2")) (; ";")) (expression_statement "lVar3 = 0;" (assignment_expression "lVar3 = 0" (identifier "lVar3") (= "=") (number_literal "0")) (; ";")) (goto_statement "goto LAB_00106560;" (goto "goto") (statement_identifier "LAB_00106560") (; ";")) (} "}"))) (expression_statement "lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);" (assignment_expression "lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8)" (identifier "lVar3") (= "=") (binary_expression "lVar3 - *(long *)(uVar5 + lVar3 * 8)" (identifier "lVar3") (- "-") (pointer_expression "*(long *)(uVar5 + lVar3 * 8)" (* "*") (cast_expression "(long *)(uVar5 + lVar3 * 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar5 + lVar3 * 8)" (( "(") (binary_expression "uVar5 + lVar3 * 8" (identifier "uVar5") (+ "+") (binary_expression "lVar3 * 8" (identifier "lVar3") (* "*") (number_literal "8"))) () ")")))))) (; ";")) (expression_statement "cVar1 = *(char *)(param_2 + lVar3);" (assignment_expression "cVar1 = *(char *)(param_2 + lVar3)" (identifier "cVar1") (= "=") (pointer_expression "*(char *)(param_2 + lVar3)" (* "*") (cast_expression "(char *)(param_2 + lVar3)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + lVar3)" (( "(") (binary_expression "param_2 + lVar3" (identifier "param_2") (+ "+") (identifier "lVar3")) () ")"))))) (; ";")) (} "}"))) (expression_statement "lVar3 = lVar3 + 1;" (assignment_expression "lVar3 = lVar3 + 1" (identifier "lVar3") (= "=") (binary_expression "lVar3 + 1" (identifier "lVar3") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;" (assignment_expression "*(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3" (pointer_expression "*(ulong *)(uVar5 + uVar2 * 8)" (* "*") (cast_expression "(ulong *)(uVar5 + uVar2 * 8)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar5 + uVar2 * 8)" (( "(") (binary_expression "uVar5 + uVar2 * 8" (identifier "uVar5") (+ "+") (binary_expression "uVar2 * 8" (identifier "uVar2") (* "*") (number_literal "8"))) () ")")))) (= "=") (binary_expression "uVar2 - lVar3" (identifier "uVar2") (- "-") (identifier "lVar3"))) (; ";")) (labeled_statement "LAB_00106560:\n          uVar2 = uVar2 + 1;" (statement_identifier "LAB_00106560") (: ":") (expression_statement "uVar2 = uVar2 + 1;" (assignment_expression "uVar2 = uVar2 + 1" (identifier "uVar2") (= "=") (binary_expression "uVar2 + 1" (identifier "uVar2") (+ "+") (number_literal "1"))) (; ";"))) (} "}")) (while "while") (parenthesized_expression "(param_3 != uVar2)" (( "(") (binary_expression "param_3 != uVar2" (identifier "param_3") (!= "!=") (identifier "uVar2")) () ")")) (; ";")) (} "}"))) (expression_statement "*param_4 = 0;" (assignment_expression "*param_4 = 0" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" (identifier "uVar2") (= "=") (number_literal "0")) (; ";")) (expression_statement "pcVar6 = param_1;" (assignment_expression "pcVar6 = param_1" (identifier "pcVar6") (= "=") (identifier "param_1")) (; ";")) (do_statement "do {\n        while( true ) {\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }\n        uVar2 = uVar2 + 1;\n        param_1 = param_1 + 1;\n      } while (param_3 != uVar2);" (do "do") (compound_statement "{\n        while( true ) {\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }\n        uVar2 = uVar2 + 1;\n        param_1 = param_1 + 1;\n      }" ({ "{") (while_statement "while( true ) {\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n          if (*param_1 == '\0') goto LAB_001065b2;\n          if (*(char *)(param_2 + uVar2) == *param_1) break;\n          if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }\n        }" ({ "{") (if_statement "if (*param_1 == '\0') goto LAB_001065b2;" (if "if") (parenthesized_expression "(*param_1 == '\0')" (( "(") (binary_expression "*param_1 == '\0'" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (goto_statement "goto LAB_001065b2;" (goto "goto") (statement_identifier "LAB_001065b2") (; ";"))) (if_statement "if (*(char *)(param_2 + uVar2) == *param_1) break;" (if "if") (parenthesized_expression "(*(char *)(param_2 + uVar2) == *param_1)" (( "(") (binary_expression "*(char *)(param_2 + uVar2) == *param_1" (pointer_expression "*(char *)(param_2 + uVar2)" (* "*") (cast_expression "(char *)(param_2 + uVar2)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + uVar2)" (( "(") (binary_expression "param_2 + uVar2" (identifier "param_2") (+ "+") (identifier "uVar2")) () ")")))) (== "==") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (if_statement "if (uVar2 == 0) {\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }\n          else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }" (if "if") (parenthesized_expression "(uVar2 == 0)" (( "(") (binary_expression "uVar2 == 0" (identifier "uVar2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n            pcVar6 = pcVar6 + 1;\n            param_1 = param_1 + 1;\n          }" ({ "{") (expression_statement "pcVar6 = pcVar6 + 1;" (assignment_expression "pcVar6 = pcVar6 + 1" (identifier "pcVar6") (= "=") (binary_expression "pcVar6 + 1" (identifier "pcVar6") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "param_1 = param_1 + 1;" (assignment_expression "param_1 = param_1 + 1" (identifier "param_1") (= "=") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (else_clause "else {\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }" (else "else") (compound_statement "{\n            lVar3 = *(long *)(uVar5 + uVar2 * 8);\n            pcVar6 = pcVar6 + lVar3;\n            uVar2 = uVar2 - lVar3;\n          }" ({ "{") (expression_statement "lVar3 = *(long *)(uVar5 + uVar2 * 8);" (assignment_expression "lVar3 = *(long *)(uVar5 + uVar2 * 8)" (identifier "lVar3") (= "=") (pointer_expression "*(long *)(uVar5 + uVar2 * 8)" (* "*") (cast_expression "(long *)(uVar5 + uVar2 * 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar5 + uVar2 * 8)" (( "(") (binary_expression "uVar5 + uVar2 * 8" (identifier "uVar5") (+ "+") (binary_expression "uVar2 * 8" (identifier "uVar2") (* "*") (number_literal "8"))) () ")"))))) (; ";")) (expression_statement "pcVar6 = pcVar6 + lVar3;" (assignment_expression "pcVar6 = pcVar6 + lVar3" (identifier "pcVar6") (= "=") (binary_expression "pcVar6 + lVar3" (identifier "pcVar6") (+ "+") (identifier "lVar3"))) (; ";")) (expression_statement "uVar2 = uVar2 - lVar3;" (assignment_expression "uVar2 = uVar2 - lVar3" (identifier "uVar2") (= "=") (binary_expression "uVar2 - lVar3" (identifier "uVar2") (- "-") (identifier "lVar3"))) (; ";")) (} "}")))) (} "}"))) (expression_statement "uVar2 = uVar2 + 1;" (assignment_expression "uVar2 = uVar2 + 1" (identifier "uVar2") (= "=") (binary_expression "uVar2 + 1" (identifier "uVar2") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "param_1 = param_1 + 1;" (assignment_expression "param_1 = param_1 + 1" (identifier "param_1") (= "=") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_3 != uVar2)" (( "(") (binary_expression "param_3 != uVar2" (identifier "param_3") (!= "!=") (identifier "uVar2")) () ")")) (; ";")) (expression_statement "*param_4 = pcVar6;" (assignment_expression "*param_4 = pcVar6" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (identifier "pcVar6")) (; ";")) (labeled_statement "LAB_001065b2:\n      *(undefined8 *)(puVar4 + -8) = 0x1065b7;" (statement_identifier "LAB_001065b2") (: ":") (expression_statement "*(undefined8 *)(puVar4 + -8) = 0x1065b7;" (assignment_expression "*(undefined8 *)(puVar4 + -8) = 0x1065b7" (pointer_expression "*(undefined8 *)(puVar4 + -8)" (* "*") (cast_expression "(undefined8 *)(puVar4 + -8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar4 + -8)" (( "(") (binary_expression "puVar4 + -8" (identifier "puVar4") (+ "+") (number_literal "-8")) () ")")))) (= "=") (number_literal "0x1065b7")) (; ";"))) (expression_statement "FUN_0010b1a0();" (call_expression "FUN_0010b1a0()" (identifier "FUN_0010b1a0") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "bVar7 = true;" (assignment_expression "bVar7 = true" (identifier "bVar7") (= "=") (true "true")) (; ";")) (} "}"))) (} "}")))) (if_statement "if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return bVar7;\n  }" (if "if") (parenthesized_expression "(local_40 == *(long *)(in_FS_OFFSET + 0x28))" (( "(") (binary_expression "local_40 == *(long *)(in_FS_OFFSET + 0x28)" (identifier "local_40") (== "==") (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" (* "*") (cast_expression "(long *)(in_FS_OFFSET + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_FS_OFFSET + 0x28)" (( "(") (binary_expression "in_FS_OFFSET + 0x28" (identifier "in_FS_OFFSET") (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (compound_statement "{\n    return bVar7;\n  }" ({ "{") (return_statement "return bVar7;" (return "return") (identifier "bVar7") (; ";")) (} "}"))) (expression_statement "*(code **)(puVar4 + -8) = FUN_00106610;" (assignment_expression "*(code **)(puVar4 + -8) = FUN_00106610" (pointer_expression "*(code **)(puVar4 + -8)" (* "*") (cast_expression "(code **)(puVar4 + -8)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar4 + -8)" (( "(") (binary_expression "puVar4 + -8" (identifier "puVar4") (+ "+") (number_literal "-8")) () ")")))) (= "=") (identifier "FUN_00106610")) (; ";")) (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" (identifier "__stack_chk_fail") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))

type_1 function_1(type_2 *var_10,type_2 *needle,size_t var_2,type_2 **resultp)

{
  type_2 var_8;
  bool bVar2;
  size_t var_3;
  long var_4;
  type_3 *var_11;
  void *var_7;
  type_2 *var_9;
  long var_1;
  type_3 var_5 [8];
  long var_13;
  
  var_11 = var_5;
  var_13 = *(long *)(var_1 + 0x28);
  bVar2 = (long)(var_2 << 3) < 0 || var_2 >> 0x3d != 0;
  if (bVar2) {
    bVar2 = false;
  }
  else {
    var_3 = var_2 * 8;
    if (var_3 < 0xfa1) {
      var_4 = -(var_3 + 0x36 & 0xfffffffffffffff0);
      var_7 = (void *)((ulong)(&stack0xffffffffffffffdf + var_4) & 0xffffffffffffffe0);
      var_11 = var_5 + var_4;
    }
    else {
      var_7 = var_6(var_3);
      var_11 = var_5;
    }
    if (var_7 != (void *)0x0) {
      *(type_4 *)((long)var_7 + 8) = 1;
      if (2 < var_2) {
        var_4 = 0;
        var_3 = 2;
        do {
          var_8 = needle[var_4];
          while (needle[var_3 - 1] != var_8) {
            if (var_4 == 0) {
              *(size_t *)((long)var_7 + var_3 * 8) = var_3;
              var_4 = 0;
              goto LAB_00106560;
            }
            var_4 = var_4 - *(long *)((long)var_7 + var_4 * 8);
            var_8 = needle[var_4];
          }
          var_4 = var_4 + 1;
          *(size_t *)((long)var_7 + var_3 * 8) = var_3 - var_4;
LAB_00106560:
          var_3 = var_3 + 1;
        } while (var_2 != var_3);
      }
      *resultp = (type_2 *)0x0;
      var_3 = 0;
      var_9 = var_10;
      do {
        while( true ) {
          if (*var_10 == '\0') goto LAB_001065b2;
          if (needle[var_3] == *var_10) break;
          if (var_3 == 0) {
            var_9 = var_9 + 1;
            var_10 = var_10 + 1;
          }
          else {
            var_4 = *(long *)((long)var_7 + var_3 * 8);
            var_9 = var_9 + var_4;
            var_3 = var_3 - var_4;
          }
        }
        var_3 = var_3 + 1;
        var_10 = var_10 + 1;
      } while (var_2 != var_3);
      *resultp = var_9;
LAB_001065b2:
      *(type_4 *)(var_11 + -8) = 0x1065b7;
      var_12(var_7);
      bVar2 = true;
    }
  }
  if (var_13 == *(long *)(var_1 + 0x28)) {
    return bVar2;
  }
                    /* WARNING: Subroutine does not return */
  *(type_5 **)(var_11 + -8) = knuth_morris_pratt_multibyte;
  var_14();
}


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

bool MASKED(char *param_1,long param_2,ulong param_3,undefined8 *param_4)

{
  char cVar1;
  ulong uVar2;
  long lVar3;
  undefined1 *puVar4;
  ulong uVar5;
  char *pcVar6;
  bool bVar7;
  long in_FS_OFFSET;
  undefined1 auStack_48 [8];
  long local_40;
  
  puVar4 = auStack_48;
  local_40 = *(long *)(in_FS_OFFSET + 0x28);
  bVar7 = (long)(param_3 << 3) < 0 || param_3 >> 0x3d != 0;
  if (bVar7) {
    bVar7 = false;
  }
  else {
    if (param_3 * 8 < 0xfa1) {
      lVar3 = -(param_3 * 8 + 0x36 & 0xfffffffffffffff0);
      uVar5 = (ulong)(&stack0xffffffffffffffdf + lVar3) & 0xffffffffffffffe0;
      puVar4 = auStack_48 + lVar3;
    }
    else {
      uVar5 = FUN_0010b163();
      puVar4 = auStack_48;
    }
    if (uVar5 != 0) {
      *(undefined8 *)(uVar5 + 8) = 1;
      if (2 < param_3) {
        lVar3 = 0;
        uVar2 = 2;
        do {
          cVar1 = *(char *)(param_2 + lVar3);
          while (*(char *)(param_2 + -1 + uVar2) != cVar1) {
            if (lVar3 == 0) {
              *(ulong *)(uVar5 + uVar2 * 8) = uVar2;
              lVar3 = 0;
              goto LAB_00106560;
            }
            lVar3 = lVar3 - *(long *)(uVar5 + lVar3 * 8);
            cVar1 = *(char *)(param_2 + lVar3);
          }
          lVar3 = lVar3 + 1;
          *(ulong *)(uVar5 + uVar2 * 8) = uVar2 - lVar3;
LAB_00106560:
          uVar2 = uVar2 + 1;
        } while (param_3 != uVar2);
      }
      *param_4 = 0;
      uVar2 = 0;
      pcVar6 = param_1;
      do {
        while( true ) {
          if (*param_1 == '\0') goto LAB_001065b2;
          if (*(char *)(param_2 + uVar2) == *param_1) break;
          if (uVar2 == 0) {
            pcVar6 = pcVar6 + 1;
            param_1 = param_1 + 1;
          }
          else {
            lVar3 = *(long *)(uVar5 + uVar2 * 8);
            pcVar6 = pcVar6 + lVar3;
            uVar2 = uVar2 - lVar3;
          }
        }
        uVar2 = uVar2 + 1;
        param_1 = param_1 + 1;
      } while (param_3 != uVar2);
      *param_4 = pcVar6;
LAB_001065b2:
      *(undefined8 *)(puVar4 + -8) = 0x1065b7;
      FUN_0010b1a0();
      bVar7 = true;
    }
  }
  if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {
    return bVar7;
  }
                    /* WARNING: Subroutine does not return */
  *(code **)(puVar4 + -8) = FUN_00106610;
  __stack_chk_fail();
}

