
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void __regparm3 sqlite3UniqueConstraint(Parse *pParse,int onError,Index *pIdx)

{
  Table *pTVar1;
  int iVar2;
  char *p4;
  int iVar3;
  int in_GS_OFFSET;
  char *local_50;
  StrAccum errMsg;
  
  errMsg.db = pParse->db;
  pTVar1 = pIdx->pTable;
  iVar2 = *(int *)(in_GS_OFFSET + 0x14);
  errMsg.zText = (char *)0x0;
  errMsg.nAlloc = 0;
  errMsg.mxAlloc = 200;
  errMsg.nChar = 0;
  errMsg.accError = '\0';
  errMsg.printfFlags = '\0';
  if (pIdx->aColExpr == (ExprList *)0x0) {
    if (pIdx->nKeyCol != 0) {
      iVar3 = 0;
      local_50 = pTVar1->aCol[*pIdx->aiColumn].zName;
      while( true ) {
        iVar3 = iVar3 + 1;
        sqlite3_str_appendall(&errMsg,pTVar1->zName);
        sqlite3_str_append(&errMsg,".",1);
        sqlite3_str_appendall(&errMsg,local_50);
        if ((int)(uint)pIdx->nKeyCol <= iVar3) break;
        local_50 = pTVar1->aCol[pIdx->aiColumn[iVar3]].zName;
        sqlite3_str_append(&errMsg,", ",2);
      }
    }
  }
  else {
    sqlite3_str_appendf(&errMsg,"index \'%q\'",pIdx->zName);
  }
  p4 = sqlite3StrAccumFinish(&errMsg);
  iVar3 = 0x613;
  if ((pIdx->field_0x37 & 3) != 2) {
    iVar3 = 0x813;
  }
  sqlite3HaltConstraint(pParse,iVar3,onError,p4,-7,'\x02');
  if (iVar2 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail_local();
  }
  return;
}



/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void __regparm3 FUN_00065970(undefined4 *param_1,undefined4 param_2,undefined4 *param_3)

{
  undefined4 *puVar1;
  undefined4 uVar2;
  int iVar3;
  int in_GS_OFFSET;
  undefined4 local_50;
  undefined4 local_38;
  undefined4 local_34;
  undefined4 local_30;
  undefined4 local_2c;
  undefined4 local_28;
  undefined2 local_24;
  int local_20;
  undefined4 uStack_14;
  
  uStack_14 = 0x6597b;
  local_38 = *param_1;
  puVar1 = (undefined4 *)param_3[3];
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  local_34 = 0;
  local_30 = 0;
  local_2c = 200;
  local_28 = 0;
  local_24 = 0;
  if (param_3[10] == 0) {
    if (*(short *)((int)param_3 + 0x32) != 0) {
      iVar3 = 0;
      local_50 = *(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1]);
      while( true ) {
        iVar3 = iVar3 + 1;
        FUN_0004ac40(&local_38,*puVar1);
        FUN_0004abe0(&local_38,&DAT_000f7e8c,1);
        FUN_0004ac40(&local_38,local_50);
        if ((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3) break;
        local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]);
        FUN_0004abe0(&local_38,&DAT_000f5380,2);
      }
    }
  }
  else {
    FUN_00056930(&local_38,"index \'%q\'",*param_3);
  }
  uVar2 = FUN_00026fe0();
  FUN_000481e0(uVar2,0xfffffff9,2);
  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_000f4bf0();
}


PUSH EBP
MOV EBP,ECX
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x00014cf0
ADD EBX,0xe3559
SUB ESP,0x4c
MOV ESI,dword ptr [EBP + 0x28]
MOV dword ptr [ESP + 0x18],EAX
MOV EAX,dword ptr [EAX]
MOV dword ptr [ESP + 0x1c],EDX
MOV EDX,dword ptr [EBP + 0xc]
MOV ECX,dword ptr GS:[0x14]
MOV dword ptr [ESP + 0x3c],ECX
XOR ECX,ECX
XOR ECX,ECX
MOV dword ptr [ESP + 0x8],EDX
MOV dword ptr [ESP + 0x24],EAX
MOV dword ptr [ESP + 0x28],0x0
MOV dword ptr [ESP + 0x2c],0x0
MOV dword ptr [ESP + 0x30],0xc8
MOV dword ptr [ESP + 0x34],0x0
MOV word ptr [ESP + 0x38],CX
TEST ESI,ESI
JZ 0x00065a40
SUB ESP,0x4
LEA EAX,[EBX + 0xfffadfda]
PUSH dword ptr [EBP]
PUSH EAX
LEA ESI,[ESP + 0x30]
PUSH ESI
CALL 0x00056930
ADD ESP,0x10
MOV EAX,ESI
CALL 0x00026fe0
MOVZX EDX,byte ptr [EBP + 0x37]
MOV ECX,0x813
AND EDX,0x3
CMP DL,0x2
MOV EDX,0x613
CMOVNZ EDX,ECX
SUB ESP,0x4
PUSH 0x2
PUSH -0x7
PUSH EAX
MOV EAX,dword ptr [ESP + 0x28]
MOV ECX,dword ptr [ESP + 0x2c]
CALL 0x000481e0
ADD ESP,0x10
MOV EAX,dword ptr [ESP + 0x3c]
XOR EAX,dword ptr GS:[0x14]
JNZ 0x00065ae6
ADD ESP,0x4c
POP EBX
POP ESI
POP EDI
POP EBP
RET
CMP word ptr [EBP + 0x32],0x0
LEA ESI,[ESP + 0x24]
JZ 0x000659ee
MOV EAX,dword ptr [EBP + 0x4]
MOV ECX,dword ptr [ESP + 0x8]
XOR EDI,EDI
LEA ESI,[ESP + 0x24]
MOVSX EAX,word ptr [EAX]
SHL EAX,0x4
ADD EAX,dword ptr [ECX + 0x4]
MOV EAX,dword ptr [EAX]
MOV dword ptr [ESP + 0xc],EAX
LEA EAX,[EBX + 0xfffaefb8]
MOV dword ptr [ESP + 0x10],EAX
LEA EAX,[EBX + 0xfffac4ac]
MOV dword ptr [ESP + 0x14],EAX
JMP 0x00065aa9
MOV EAX,dword ptr [EBP + 0x4]
MOV ECX,dword ptr [ESP + 0x8]
SUB ESP,0x4
MOVSX EAX,word ptr [EAX + EDI*0x2]
SHL EAX,0x4
ADD EAX,dword ptr [ECX + 0x4]
MOV EAX,dword ptr [EAX]
MOV dword ptr [ESP + 0x10],EAX
PUSH 0x2
PUSH dword ptr [ESP + 0x1c]
PUSH ESI
CALL 0x0004abe0
ADD ESP,0x10
SUB ESP,0x8
ADD EDI,0x1
MOV EAX,dword ptr [ESP + 0x10]
PUSH dword ptr [EAX]
PUSH ESI
CALL 0x0004ac40
ADD ESP,0xc
PUSH 0x1
PUSH dword ptr [ESP + 0x18]
PUSH ESI
CALL 0x0004abe0
POP EAX
POP EDX
PUSH dword ptr [ESP + 0x14]
PUSH ESI
CALL 0x0004ac40
MOVZX EAX,word ptr [EBP + 0x32]
ADD ESP,0x10
CMP EAX,EDI
JG 0x00065a80
JMP 0x000659ee
CALL 0x000f4bf0
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nvoid __regparm3 FUN_00065970(undefined4 *param_1,undefined4 param_2,undefined4 *param_3)\n\n{\n  undefined4 *puVar1;\n  undefined4 uVar2;\n  int iVar3;\n  int in_GS_OFFSET;\n  undefined4 local_50;\n  undefined4 local_38;\n  undefined4 local_34;\n  undefined4 local_30;\n  undefined4 local_2c;\n  undefined4 local_28;\n  undefined2 local_24;\n  int local_20;\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x6597b;\n  local_38 = *param_1;\n  puVar1 = (undefined4 *)param_3[3];\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  local_34 = 0;\n  local_30 = 0;\n  local_2c = 200;\n  local_28 = 0;\n  local_24 = 0;\n  if (param_3[10] == 0) {\n    if (*(short *)((int)param_3 + 0x32) != 0) {\n      iVar3 = 0;\n      local_50 = *(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1]);\n      while( true ) {\n        iVar3 = iVar3 + 1;\n        FUN_0004ac40(&local_38,*puVar1);\n        FUN_0004abe0(&local_38,&DAT_000f7e8c,1);\n        FUN_0004ac40(&local_38,local_50);\n        if ((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3) break;\n        local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]);\n        FUN_0004abe0(&local_38,&DAT_000f5380,2);\n      }\n    }\n  }\n  else {\n    FUN_00056930(&local_38,"index \'%q\'",*param_3);\n  }\n  uVar2 = FUN_00026fe0();\n  FUN_000481e0(uVar2,0xfffffff9,2);\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_000f4bf0();\n}\n\n" comment (function_definition "void __regparm3 FUN_00065970(undefined4 *param_1,undefined4 param_2,undefined4 *param_3)\n\n{\n  undefined4 *puVar1;\n  undefined4 uVar2;\n  int iVar3;\n  int in_GS_OFFSET;\n  undefined4 local_50;\n  undefined4 local_38;\n  undefined4 local_34;\n  undefined4 local_30;\n  undefined4 local_2c;\n  undefined4 local_28;\n  undefined2 local_24;\n  int local_20;\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x6597b;\n  local_38 = *param_1;\n  puVar1 = (undefined4 *)param_3[3];\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  local_34 = 0;\n  local_30 = 0;\n  local_2c = 200;\n  local_28 = 0;\n  local_24 = 0;\n  if (param_3[10] == 0) {\n    if (*(short *)((int)param_3 + 0x32) != 0) {\n      iVar3 = 0;\n      local_50 = *(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1]);\n      while( true ) {\n        iVar3 = iVar3 + 1;\n        FUN_0004ac40(&local_38,*puVar1);\n        FUN_0004abe0(&local_38,&DAT_000f7e8c,1);\n        FUN_0004ac40(&local_38,local_50);\n        if ((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3) break;\n        local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]);\n        FUN_0004abe0(&local_38,&DAT_000f5380,2);\n      }\n    }\n  }\n  else {\n    FUN_00056930(&local_38,"index \'%q\'",*param_3);\n  }\n  uVar2 = FUN_00026fe0();\n  FUN_000481e0(uVar2,0xfffffff9,2);\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_000f4bf0();\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_00065970(undefined4 *param_1,undefined4 param_2,undefined4 *param_3)" identifier (parameter_list "(undefined4 *param_1,undefined4 param_2,undefined4 *param_3)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "undefined4 *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  undefined4 *puVar1;\n  undefined4 uVar2;\n  int iVar3;\n  int in_GS_OFFSET;\n  undefined4 local_50;\n  undefined4 local_38;\n  undefined4 local_34;\n  undefined4 local_30;\n  undefined4 local_2c;\n  undefined4 local_28;\n  undefined2 local_24;\n  int local_20;\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x6597b;\n  local_38 = *param_1;\n  puVar1 = (undefined4 *)param_3[3];\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  local_34 = 0;\n  local_30 = 0;\n  local_2c = 200;\n  local_28 = 0;\n  local_24 = 0;\n  if (param_3[10] == 0) {\n    if (*(short *)((int)param_3 + 0x32) != 0) {\n      iVar3 = 0;\n      local_50 = *(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1]);\n      while( true ) {\n        iVar3 = iVar3 + 1;\n        FUN_0004ac40(&local_38,*puVar1);\n        FUN_0004abe0(&local_38,&DAT_000f7e8c,1);\n        FUN_0004ac40(&local_38,local_50);\n        if ((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3) break;\n        local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]);\n        FUN_0004abe0(&local_38,&DAT_000f5380,2);\n      }\n    }\n  }\n  else {\n    FUN_00056930(&local_38,"index \'%q\'",*param_3);\n  }\n  uVar2 = FUN_00026fe0();\n  FUN_000481e0(uVar2,0xfffffff9,2);\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_000f4bf0();\n}" { (declaration "undefined4 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int in_GS_OFFSET;" primitive_type identifier ;) (declaration "undefined4 local_50;" type_identifier identifier ;) (declaration "undefined4 local_38;" type_identifier identifier ;) (declaration "undefined4 local_34;" type_identifier identifier ;) (declaration "undefined4 local_30;" type_identifier identifier ;) (declaration "undefined4 local_2c;" type_identifier identifier ;) (declaration "undefined4 local_28;" type_identifier identifier ;) (declaration "undefined2 local_24;" type_identifier identifier ;) (declaration "int local_20;" primitive_type identifier ;) (declaration "undefined4 uStack_14;" type_identifier identifier ;) (expression_statement "uStack_14 = 0x6597b;" (assignment_expression "uStack_14 = 0x6597b" identifier = number_literal) ;) (expression_statement "local_38 = *param_1;" (assignment_expression "local_38 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "puVar1 = (undefined4 *)param_3[3];" (assignment_expression "puVar1 = (undefined4 *)param_3[3]" identifier = (cast_expression "(undefined4 *)param_3[3]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_3[3]" identifier [ number_literal ]))) ;) (expression_statement "local_20 = *(int *)(in_GS_OFFSET + 0x14);" (assignment_expression "local_20 = *(int *)(in_GS_OFFSET + 0x14)" identifier = (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) ;) (expression_statement "local_34 = 0;" (assignment_expression "local_34 = 0" identifier = number_literal) ;) (expression_statement "local_30 = 0;" (assignment_expression "local_30 = 0" identifier = number_literal) ;) (expression_statement "local_2c = 200;" (assignment_expression "local_2c = 200" identifier = number_literal) ;) (expression_statement "local_28 = 0;" (assignment_expression "local_28 = 0" identifier = number_literal) ;) (expression_statement "local_24 = 0;" (assignment_expression "local_24 = 0" identifier = number_literal) ;) (if_statement "if (param_3[10] == 0) {\n    if (*(short *)((int)param_3 + 0x32) != 0) {\n      iVar3 = 0;\n      local_50 = *(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1]);\n      while( true ) {\n        iVar3 = iVar3 + 1;\n        FUN_0004ac40(&local_38,*puVar1);\n        FUN_0004abe0(&local_38,&DAT_000f7e8c,1);\n        FUN_0004ac40(&local_38,local_50);\n        if ((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3) break;\n        local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]);\n        FUN_0004abe0(&local_38,&DAT_000f5380,2);\n      }\n    }\n  }\n  else {\n    FUN_00056930(&local_38,"index \'%q\'",*param_3);\n  }" if (parenthesized_expression "(param_3[10] == 0)" ( (binary_expression "param_3[10] == 0" (subscript_expression "param_3[10]" identifier [ number_literal ]) == number_literal) )) (compound_statement "{\n    if (*(short *)((int)param_3 + 0x32) != 0) {\n      iVar3 = 0;\n      local_50 = *(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1]);\n      while( true ) {\n        iVar3 = iVar3 + 1;\n        FUN_0004ac40(&local_38,*puVar1);\n        FUN_0004abe0(&local_38,&DAT_000f7e8c,1);\n        FUN_0004ac40(&local_38,local_50);\n        if ((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3) break;\n        local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]);\n        FUN_0004abe0(&local_38,&DAT_000f5380,2);\n      }\n    }\n  }" { (if_statement "if (*(short *)((int)param_3 + 0x32) != 0) {\n      iVar3 = 0;\n      local_50 = *(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1]);\n      while( true ) {\n        iVar3 = iVar3 + 1;\n        FUN_0004ac40(&local_38,*puVar1);\n        FUN_0004abe0(&local_38,&DAT_000f7e8c,1);\n        FUN_0004ac40(&local_38,local_50);\n        if ((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3) break;\n        local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]);\n        FUN_0004abe0(&local_38,&DAT_000f5380,2);\n      }\n    }" if (parenthesized_expression "(*(short *)((int)param_3 + 0x32) != 0)" ( (binary_expression "*(short *)((int)param_3 + 0x32) != 0" (pointer_expression "*(short *)((int)param_3 + 0x32)" * (cast_expression "(short *)((int)param_3 + 0x32)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_3 + 0x32)" ( (binary_expression "(int)param_3 + 0x32" (cast_expression "(int)param_3" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) != number_literal) )) (compound_statement "{\n      iVar3 = 0;\n      local_50 = *(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1]);\n      while( true ) {\n        iVar3 = iVar3 + 1;\n        FUN_0004ac40(&local_38,*puVar1);\n        FUN_0004abe0(&local_38,&DAT_000f7e8c,1);\n        FUN_0004ac40(&local_38,local_50);\n        if ((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3) break;\n        local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]);\n        FUN_0004abe0(&local_38,&DAT_000f5380,2);\n      }\n    }" { (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (expression_statement "local_50 = *(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1]);" (assignment_expression "local_50 = *(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1])" identifier = (pointer_expression "*(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1])" * (cast_expression "(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1])" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(short *)param_3[1] * 0x10 + puVar1[1])" ( (binary_expression "*(short *)param_3[1] * 0x10 + puVar1[1]" (binary_expression "*(short *)param_3[1] * 0x10" (pointer_expression "*(short *)param_3[1]" * (cast_expression "(short *)param_3[1]" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_3[1]" identifier [ number_literal ]))) * number_literal) + (subscript_expression "puVar1[1]" identifier [ number_literal ])) ))))) ;) (while_statement "while( true ) {\n        iVar3 = iVar3 + 1;\n        FUN_0004ac40(&local_38,*puVar1);\n        FUN_0004abe0(&local_38,&DAT_000f7e8c,1);\n        FUN_0004ac40(&local_38,local_50);\n        if ((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3) break;\n        local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]);\n        FUN_0004abe0(&local_38,&DAT_000f5380,2);\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        iVar3 = iVar3 + 1;\n        FUN_0004ac40(&local_38,*puVar1);\n        FUN_0004abe0(&local_38,&DAT_000f7e8c,1);\n        FUN_0004ac40(&local_38,local_50);\n        if ((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3) break;\n        local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]);\n        FUN_0004abe0(&local_38,&DAT_000f5380,2);\n      }" { (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (expression_statement "FUN_0004ac40(&local_38,*puVar1);" (call_expression "FUN_0004ac40(&local_38,*puVar1)" identifier (argument_list "(&local_38,*puVar1)" ( (pointer_expression "&local_38" & identifier) , (pointer_expression "*puVar1" * identifier) ))) ;) (expression_statement "FUN_0004abe0(&local_38,&DAT_000f7e8c,1);" (call_expression "FUN_0004abe0(&local_38,&DAT_000f7e8c,1)" identifier (argument_list "(&local_38,&DAT_000f7e8c,1)" ( (pointer_expression "&local_38" & identifier) , (pointer_expression "&DAT_000f7e8c" & identifier) , number_literal ))) ;) (expression_statement "FUN_0004ac40(&local_38,local_50);" (call_expression "FUN_0004ac40(&local_38,local_50)" identifier (argument_list "(&local_38,local_50)" ( (pointer_expression "&local_38" & identifier) , identifier ))) ;) (if_statement "if ((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3) break;" if (parenthesized_expression "((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3)" ( (binary_expression "(int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3" (binary_expression "(int)(uint)*(ushort *)((int)param_3 + 0x32)" (cast_expression "(int)(uint)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uint)" ( identifier ))) * (cast_expression "(ushort *)((int)param_3 + 0x32)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_3 + 0x32)" ( (binary_expression "(int)param_3 + 0x32" (cast_expression "(int)param_3" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) <= identifier) )) (break_statement "break;" break ;)) (expression_statement "local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]);" (assignment_expression "local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1])" identifier = (pointer_expression "*(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1])" * (cast_expression "(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1])" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1])" ( (binary_expression "*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]" (binary_expression "*(short *)(param_3[1] + iVar3 * 2) * 0x10" (pointer_expression "*(short *)(param_3[1] + iVar3 * 2)" * (cast_expression "(short *)(param_3[1] + iVar3 * 2)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3[1] + iVar3 * 2)" ( (binary_expression "param_3[1] + iVar3 * 2" (subscript_expression "param_3[1]" identifier [ number_literal ]) + (binary_expression "iVar3 * 2" identifier * number_literal)) )))) * number_literal) + (subscript_expression "puVar1[1]" identifier [ number_literal ])) ))))) ;) (expression_statement "FUN_0004abe0(&local_38,&DAT_000f5380,2);" (call_expression "FUN_0004abe0(&local_38,&DAT_000f5380,2)" identifier (argument_list "(&local_38,&DAT_000f5380,2)" ( (pointer_expression "&local_38" & identifier) , (pointer_expression "&DAT_000f5380" & identifier) , number_literal ))) ;) })) })) }) (else_clause "else {\n    FUN_00056930(&local_38,"index \'%q\'",*param_3);\n  }" else (compound_statement "{\n    FUN_00056930(&local_38,"index \'%q\'",*param_3);\n  }" { (expression_statement "FUN_00056930(&local_38,"index \'%q\'",*param_3);" (call_expression "FUN_00056930(&local_38,"index \'%q\'",*param_3)" identifier (argument_list "(&local_38,"index \'%q\'",*param_3)" ( (pointer_expression "&local_38" & identifier) , (string_literal ""index \'%q\'"" " string_content escape_sequence string_content escape_sequence ") , (pointer_expression "*param_3" * identifier) ))) ;) }))) (expression_statement "uVar2 = FUN_00026fe0();" (assignment_expression "uVar2 = FUN_00026fe0()" identifier = (call_expression "FUN_00026fe0()" identifier (argument_list "()" ( )))) ;) (expression_statement "FUN_000481e0(uVar2,0xfffffff9,2);" (call_expression "FUN_000481e0(uVar2,0xfffffff9,2)" identifier (argument_list "(uVar2,0xfffffff9,2)" ( identifier , number_literal , number_literal ))) ;) (if_statement "if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return;\n  }" if (parenthesized_expression "(local_20 == *(int *)(in_GS_OFFSET + 0x14))" ( (binary_expression "local_20 == *(int *)(in_GS_OFFSET + 0x14)" identifier == (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) comment (expression_statement "FUN_000f4bf0();" (call_expression "FUN_000f4bf0()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nvoid __regparm3 sqlite3UniqueConstraint(Parse *pParse,int onError,Index *pIdx)\n\n{\n  Table *pTVar1;\n  int iVar2;\n  char *p4;\n  int iVar3;\n  int in_GS_OFFSET;\n  char *local_50;\n  StrAccum errMsg;\n  \n  errMsg.db = pParse->db;\n  pTVar1 = pIdx->pTable;\n  iVar2 = *(int *)(in_GS_OFFSET + 0x14);\n  errMsg.zText = (char *)0x0;\n  errMsg.nAlloc = 0;\n  errMsg.mxAlloc = 200;\n  errMsg.nChar = 0;\n  errMsg.accError = '\0';\n  errMsg.printfFlags = '\0';\n  if (pIdx->aColExpr == (ExprList *)0x0) {\n    if (pIdx->nKeyCol != 0) {\n      iVar3 = 0;\n      local_50 = pTVar1->aCol[*pIdx->aiColumn].zName;\n      while( true ) {\n        iVar3 = iVar3 + 1;\n        sqlite3_str_appendall(&errMsg,pTVar1->zName);\n        sqlite3_str_append(&errMsg,".",1);\n        sqlite3_str_appendall(&errMsg,local_50);\n        if ((int)(uint)pIdx->nKeyCol <= iVar3) break;\n        local_50 = pTVar1->aCol[pIdx->aiColumn[iVar3]].zName;\n        sqlite3_str_append(&errMsg,", ",2);\n      }\n    }\n  }\n  else {\n    sqlite3_str_appendf(&errMsg,"index \'%q\'",pIdx->zName);\n  }\n  p4 = sqlite3StrAccumFinish(&errMsg);\n  iVar3 = 0x613;\n  if ((pIdx->field_0x37 & 3) != 2) {\n    iVar3 = 0x813;\n  }\n  sqlite3HaltConstraint(pParse,iVar3,onError,p4,-7,'\x02');\n  if (iVar2 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }\n  return;\n}\n\n" comment (function_definition "void __regparm3 sqlite3UniqueConstraint(Parse *pParse,int onError,Index *pIdx)\n\n{\n  Table *pTVar1;\n  int iVar2;\n  char *p4;\n  int iVar3;\n  int in_GS_OFFSET;\n  char *local_50;\n  StrAccum errMsg;\n  \n  errMsg.db = pParse->db;\n  pTVar1 = pIdx->pTable;\n  iVar2 = *(int *)(in_GS_OFFSET + 0x14);\n  errMsg.zText = (char *)0x0;\n  errMsg.nAlloc = 0;\n  errMsg.mxAlloc = 200;\n  errMsg.nChar = 0;\n  errMsg.accError = '\0';\n  errMsg.printfFlags = '\0';\n  if (pIdx->aColExpr == (ExprList *)0x0) {\n    if (pIdx->nKeyCol != 0) {\n      iVar3 = 0;\n      local_50 = pTVar1->aCol[*pIdx->aiColumn].zName;\n      while( true ) {\n        iVar3 = iVar3 + 1;\n        sqlite3_str_appendall(&errMsg,pTVar1->zName);\n        sqlite3_str_append(&errMsg,".",1);\n        sqlite3_str_appendall(&errMsg,local_50);\n        if ((int)(uint)pIdx->nKeyCol <= iVar3) break;\n        local_50 = pTVar1->aCol[pIdx->aiColumn[iVar3]].zName;\n        sqlite3_str_append(&errMsg,", ",2);\n      }\n    }\n  }\n  else {\n    sqlite3_str_appendf(&errMsg,"index \'%q\'",pIdx->zName);\n  }\n  p4 = sqlite3StrAccumFinish(&errMsg);\n  iVar3 = 0x613;\n  if ((pIdx->field_0x37 & 3) != 2) {\n    iVar3 = 0x813;\n  }\n  sqlite3HaltConstraint(pParse,iVar3,onError,p4,-7,'\x02');\n  if (iVar2 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }\n  return;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "sqlite3UniqueConstraint(Parse *pParse,int onError,Index *pIdx)" identifier (parameter_list "(Parse *pParse,int onError,Index *pIdx)" ( (parameter_declaration "Parse *pParse" type_identifier (pointer_declarator "*pParse" * identifier)) , (parameter_declaration "int onError" primitive_type identifier) , (parameter_declaration "Index *pIdx" type_identifier (pointer_declarator "*pIdx" * identifier)) ))) (compound_statement "{\n  Table *pTVar1;\n  int iVar2;\n  char *p4;\n  int iVar3;\n  int in_GS_OFFSET;\n  char *local_50;\n  StrAccum errMsg;\n  \n  errMsg.db = pParse->db;\n  pTVar1 = pIdx->pTable;\n  iVar2 = *(int *)(in_GS_OFFSET + 0x14);\n  errMsg.zText = (char *)0x0;\n  errMsg.nAlloc = 0;\n  errMsg.mxAlloc = 200;\n  errMsg.nChar = 0;\n  errMsg.accError = '\0';\n  errMsg.printfFlags = '\0';\n  if (pIdx->aColExpr == (ExprList *)0x0) {\n    if (pIdx->nKeyCol != 0) {\n      iVar3 = 0;\n      local_50 = pTVar1->aCol[*pIdx->aiColumn].zName;\n      while( true ) {\n        iVar3 = iVar3 + 1;\n        sqlite3_str_appendall(&errMsg,pTVar1->zName);\n        sqlite3_str_append(&errMsg,".",1);\n        sqlite3_str_appendall(&errMsg,local_50);\n        if ((int)(uint)pIdx->nKeyCol <= iVar3) break;\n        local_50 = pTVar1->aCol[pIdx->aiColumn[iVar3]].zName;\n        sqlite3_str_append(&errMsg,", ",2);\n      }\n    }\n  }\n  else {\n    sqlite3_str_appendf(&errMsg,"index \'%q\'",pIdx->zName);\n  }\n  p4 = sqlite3StrAccumFinish(&errMsg);\n  iVar3 = 0x613;\n  if ((pIdx->field_0x37 & 3) != 2) {\n    iVar3 = 0x813;\n  }\n  sqlite3HaltConstraint(pParse,iVar3,onError,p4,-7,'\x02');\n  if (iVar2 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }\n  return;\n}" { (declaration "Table *pTVar1;" type_identifier (pointer_declarator "*pTVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "char *p4;" primitive_type (pointer_declarator "*p4" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int in_GS_OFFSET;" primitive_type identifier ;) (declaration "char *local_50;" primitive_type (pointer_declarator "*local_50" * identifier) ;) (declaration "StrAccum errMsg;" type_identifier identifier ;) (expression_statement "errMsg.db = pParse->db;" (assignment_expression "errMsg.db = pParse->db" (field_expression "errMsg.db" identifier . field_identifier) = (field_expression "pParse->db" identifier -> field_identifier)) ;) (expression_statement "pTVar1 = pIdx->pTable;" (assignment_expression "pTVar1 = pIdx->pTable" identifier = (field_expression "pIdx->pTable" identifier -> field_identifier)) ;) (expression_statement "iVar2 = *(int *)(in_GS_OFFSET + 0x14);" (assignment_expression "iVar2 = *(int *)(in_GS_OFFSET + 0x14)" identifier = (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) ;) (expression_statement "errMsg.zText = (char *)0x0;" (assignment_expression "errMsg.zText = (char *)0x0" (field_expression "errMsg.zText" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "errMsg.nAlloc = 0;" (assignment_expression "errMsg.nAlloc = 0" (field_expression "errMsg.nAlloc" identifier . field_identifier) = number_literal) ;) (expression_statement "errMsg.mxAlloc = 200;" (assignment_expression "errMsg.mxAlloc = 200" (field_expression "errMsg.mxAlloc" identifier . field_identifier) = number_literal) ;) (expression_statement "errMsg.nChar = 0;" (assignment_expression "errMsg.nChar = 0" (field_expression "errMsg.nChar" identifier . field_identifier) = number_literal) ;) (expression_statement "errMsg.accError = '\0';" (assignment_expression "errMsg.accError = '\0'" (field_expression "errMsg.accError" identifier . field_identifier) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "errMsg.printfFlags = '\0';" (assignment_expression "errMsg.printfFlags = '\0'" (field_expression "errMsg.printfFlags" identifier . field_identifier) = (char_literal "'\0'" ' escape_sequence ')) ;) (if_statement "if (pIdx->aColExpr == (ExprList *)0x0) {\n    if (pIdx->nKeyCol != 0) {\n      iVar3 = 0;\n      local_50 = pTVar1->aCol[*pIdx->aiColumn].zName;\n      while( true ) {\n        iVar3 = iVar3 + 1;\n        sqlite3_str_appendall(&errMsg,pTVar1->zName);\n        sqlite3_str_append(&errMsg,".",1);\n        sqlite3_str_appendall(&errMsg,local_50);\n        if ((int)(uint)pIdx->nKeyCol <= iVar3) break;\n        local_50 = pTVar1->aCol[pIdx->aiColumn[iVar3]].zName;\n        sqlite3_str_append(&errMsg,", ",2);\n      }\n    }\n  }\n  else {\n    sqlite3_str_appendf(&errMsg,"index \'%q\'",pIdx->zName);\n  }" if (parenthesized_expression "(pIdx->aColExpr == (ExprList *)0x0)" ( (binary_expression "pIdx->aColExpr == (ExprList *)0x0" (field_expression "pIdx->aColExpr" identifier -> field_identifier) == (cast_expression "(ExprList *)0x0" ( (type_descriptor "ExprList *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    if (pIdx->nKeyCol != 0) {\n      iVar3 = 0;\n      local_50 = pTVar1->aCol[*pIdx->aiColumn].zName;\n      while( true ) {\n        iVar3 = iVar3 + 1;\n        sqlite3_str_appendall(&errMsg,pTVar1->zName);\n        sqlite3_str_append(&errMsg,".",1);\n        sqlite3_str_appendall(&errMsg,local_50);\n        if ((int)(uint)pIdx->nKeyCol <= iVar3) break;\n        local_50 = pTVar1->aCol[pIdx->aiColumn[iVar3]].zName;\n        sqlite3_str_append(&errMsg,", ",2);\n      }\n    }\n  }" { (if_statement "if (pIdx->nKeyCol != 0) {\n      iVar3 = 0;\n      local_50 = pTVar1->aCol[*pIdx->aiColumn].zName;\n      while( true ) {\n        iVar3 = iVar3 + 1;\n        sqlite3_str_appendall(&errMsg,pTVar1->zName);\n        sqlite3_str_append(&errMsg,".",1);\n        sqlite3_str_appendall(&errMsg,local_50);\n        if ((int)(uint)pIdx->nKeyCol <= iVar3) break;\n        local_50 = pTVar1->aCol[pIdx->aiColumn[iVar3]].zName;\n        sqlite3_str_append(&errMsg,", ",2);\n      }\n    }" if (parenthesized_expression "(pIdx->nKeyCol != 0)" ( (binary_expression "pIdx->nKeyCol != 0" (field_expression "pIdx->nKeyCol" identifier -> field_identifier) != number_literal) )) (compound_statement "{\n      iVar3 = 0;\n      local_50 = pTVar1->aCol[*pIdx->aiColumn].zName;\n      while( true ) {\n        iVar3 = iVar3 + 1;\n        sqlite3_str_appendall(&errMsg,pTVar1->zName);\n        sqlite3_str_append(&errMsg,".",1);\n        sqlite3_str_appendall(&errMsg,local_50);\n        if ((int)(uint)pIdx->nKeyCol <= iVar3) break;\n        local_50 = pTVar1->aCol[pIdx->aiColumn[iVar3]].zName;\n        sqlite3_str_append(&errMsg,", ",2);\n      }\n    }" { (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (expression_statement "local_50 = pTVar1->aCol[*pIdx->aiColumn].zName;" (assignment_expression "local_50 = pTVar1->aCol[*pIdx->aiColumn].zName" identifier = (field_expression "pTVar1->aCol[*pIdx->aiColumn].zName" (subscript_expression "pTVar1->aCol[*pIdx->aiColumn]" (field_expression "pTVar1->aCol" identifier -> field_identifier) [ (pointer_expression "*pIdx->aiColumn" * (field_expression "pIdx->aiColumn" identifier -> field_identifier)) ]) . field_identifier)) ;) (while_statement "while( true ) {\n        iVar3 = iVar3 + 1;\n        sqlite3_str_appendall(&errMsg,pTVar1->zName);\n        sqlite3_str_append(&errMsg,".",1);\n        sqlite3_str_appendall(&errMsg,local_50);\n        if ((int)(uint)pIdx->nKeyCol <= iVar3) break;\n        local_50 = pTVar1->aCol[pIdx->aiColumn[iVar3]].zName;\n        sqlite3_str_append(&errMsg,", ",2);\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        iVar3 = iVar3 + 1;\n        sqlite3_str_appendall(&errMsg,pTVar1->zName);\n        sqlite3_str_append(&errMsg,".",1);\n        sqlite3_str_appendall(&errMsg,local_50);\n        if ((int)(uint)pIdx->nKeyCol <= iVar3) break;\n        local_50 = pTVar1->aCol[pIdx->aiColumn[iVar3]].zName;\n        sqlite3_str_append(&errMsg,", ",2);\n      }" { (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (expression_statement "sqlite3_str_appendall(&errMsg,pTVar1->zName);" (call_expression "sqlite3_str_appendall(&errMsg,pTVar1->zName)" identifier (argument_list "(&errMsg,pTVar1->zName)" ( (pointer_expression "&errMsg" & identifier) , (field_expression "pTVar1->zName" identifier -> field_identifier) ))) ;) (expression_statement "sqlite3_str_append(&errMsg,".",1);" (call_expression "sqlite3_str_append(&errMsg,".",1)" identifier (argument_list "(&errMsg,".",1)" ( (pointer_expression "&errMsg" & identifier) , (string_literal ""."" " string_content ") , number_literal ))) ;) (expression_statement "sqlite3_str_appendall(&errMsg,local_50);" (call_expression "sqlite3_str_appendall(&errMsg,local_50)" identifier (argument_list "(&errMsg,local_50)" ( (pointer_expression "&errMsg" & identifier) , identifier ))) ;) (if_statement "if ((int)(uint)pIdx->nKeyCol <= iVar3) break;" if (parenthesized_expression "((int)(uint)pIdx->nKeyCol <= iVar3)" ( (binary_expression "(int)(uint)pIdx->nKeyCol <= iVar3" (cast_expression "(int)(uint)pIdx->nKeyCol" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)pIdx->nKeyCol" ( (type_descriptor "uint" type_identifier) ) (field_expression "pIdx->nKeyCol" identifier -> field_identifier))) <= identifier) )) (break_statement "break;" break ;)) (expression_statement "local_50 = pTVar1->aCol[pIdx->aiColumn[iVar3]].zName;" (assignment_expression "local_50 = pTVar1->aCol[pIdx->aiColumn[iVar3]].zName" identifier = (field_expression "pTVar1->aCol[pIdx->aiColumn[iVar3]].zName" (subscript_expression "pTVar1->aCol[pIdx->aiColumn[iVar3]]" (field_expression "pTVar1->aCol" identifier -> field_identifier) [ (subscript_expression "pIdx->aiColumn[iVar3]" (field_expression "pIdx->aiColumn" identifier -> field_identifier) [ identifier ]) ]) . field_identifier)) ;) (expression_statement "sqlite3_str_append(&errMsg,", ",2);" (call_expression "sqlite3_str_append(&errMsg,", ",2)" identifier (argument_list "(&errMsg,", ",2)" ( (pointer_expression "&errMsg" & identifier) , (string_literal "", "" " string_content ") , number_literal ))) ;) })) })) }) (else_clause "else {\n    sqlite3_str_appendf(&errMsg,"index \'%q\'",pIdx->zName);\n  }" else (compound_statement "{\n    sqlite3_str_appendf(&errMsg,"index \'%q\'",pIdx->zName);\n  }" { (expression_statement "sqlite3_str_appendf(&errMsg,"index \'%q\'",pIdx->zName);" (call_expression "sqlite3_str_appendf(&errMsg,"index \'%q\'",pIdx->zName)" identifier (argument_list "(&errMsg,"index \'%q\'",pIdx->zName)" ( (pointer_expression "&errMsg" & identifier) , (string_literal ""index \'%q\'"" " string_content escape_sequence string_content escape_sequence ") , (field_expression "pIdx->zName" identifier -> field_identifier) ))) ;) }))) (expression_statement "p4 = sqlite3StrAccumFinish(&errMsg);" (assignment_expression "p4 = sqlite3StrAccumFinish(&errMsg)" identifier = (call_expression "sqlite3StrAccumFinish(&errMsg)" identifier (argument_list "(&errMsg)" ( (pointer_expression "&errMsg" & identifier) )))) ;) (expression_statement "iVar3 = 0x613;" (assignment_expression "iVar3 = 0x613" identifier = number_literal) ;) (if_statement "if ((pIdx->field_0x37 & 3) != 2) {\n    iVar3 = 0x813;\n  }" if (parenthesized_expression "((pIdx->field_0x37 & 3) != 2)" ( (binary_expression "(pIdx->field_0x37 & 3) != 2" (parenthesized_expression "(pIdx->field_0x37 & 3)" ( (binary_expression "pIdx->field_0x37 & 3" (field_expression "pIdx->field_0x37" identifier -> field_identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n    iVar3 = 0x813;\n  }" { (expression_statement "iVar3 = 0x813;" (assignment_expression "iVar3 = 0x813" identifier = number_literal) ;) })) (expression_statement "sqlite3HaltConstraint(pParse,iVar3,onError,p4,-7,'\x02');" (call_expression "sqlite3HaltConstraint(pParse,iVar3,onError,p4,-7,'\x02')" identifier (argument_list "(pParse,iVar3,onError,p4,-7,'\x02')" ( identifier , identifier , identifier , identifier , number_literal , (char_literal "'\x02'" ' escape_sequence ') ))) ;) (if_statement "if (iVar2 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }" if (parenthesized_expression "(iVar2 != *(int *)(in_GS_OFFSET + 0x14))" ( (binary_expression "iVar2 != *(int *)(in_GS_OFFSET + 0x14)" identifier != (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }" { comment (expression_statement "__stack_chk_fail_local();" (call_expression "__stack_chk_fail_local()" identifier (argument_list "()" ( ))) ;) })) (return_statement "return;" return ;) })))
(translation_unit "void __regparm3 FUN_00065970(undefined4 *param_1,undefined4 param_2,undefined4 *param_3)\n\n{\n  undefined4 *puVar1;\n  undefined4 uVar2;\n  int iVar3;\n  int in_GS_OFFSET;\n  undefined4 local_50;\n  undefined4 local_38;\n  undefined4 local_34;\n  undefined4 local_30;\n  undefined4 local_2c;\n  undefined4 local_28;\n  undefined2 local_24;\n  int local_20;\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x6597b;\n  local_38 = *param_1;\n  puVar1 = (undefined4 *)param_3[3];\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  local_34 = 0;\n  local_30 = 0;\n  local_2c = 200;\n  local_28 = 0;\n  local_24 = 0;\n  if (param_3[10] == 0) {\n    if (*(short *)((int)param_3 + 0x32) != 0) {\n      iVar3 = 0;\n      local_50 = *(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1]);\n      while( true ) {\n        iVar3 = iVar3 + 1;\n        FUN_0004ac40(&local_38,*puVar1);\n        FUN_0004abe0(&local_38,&DAT_000f7e8c,1);\n        FUN_0004ac40(&local_38,local_50);\n        if ((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3) break;\n        local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]);\n        FUN_0004abe0(&local_38,&DAT_000f5380,2);\n      }\n    }\n  }\n  else {\n    FUN_00056930(&local_38,"index \'%q\'",*param_3);\n  }\n  uVar2 = FUN_00026fe0();\n  FUN_000481e0(uVar2,0xfffffff9,2);\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return;\n  }\n                    \n  FUN_000f4bf0();\n}\n\n" (function_definition "void __regparm3 FUN_00065970(undefined4 *param_1,undefined4 param_2,undefined4 *param_3)\n\n{\n  undefined4 *puVar1;\n  undefined4 uVar2;\n  int iVar3;\n  int in_GS_OFFSET;\n  undefined4 local_50;\n  undefined4 local_38;\n  undefined4 local_34;\n  undefined4 local_30;\n  undefined4 local_2c;\n  undefined4 local_28;\n  undefined2 local_24;\n  int local_20;\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x6597b;\n  local_38 = *param_1;\n  puVar1 = (undefined4 *)param_3[3];\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  local_34 = 0;\n  local_30 = 0;\n  local_2c = 200;\n  local_28 = 0;\n  local_24 = 0;\n  if (param_3[10] == 0) {\n    if (*(short *)((int)param_3 + 0x32) != 0) {\n      iVar3 = 0;\n      local_50 = *(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1]);\n      while( true ) {\n        iVar3 = iVar3 + 1;\n        FUN_0004ac40(&local_38,*puVar1);\n        FUN_0004abe0(&local_38,&DAT_000f7e8c,1);\n        FUN_0004ac40(&local_38,local_50);\n        if ((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3) break;\n        local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]);\n        FUN_0004abe0(&local_38,&DAT_000f5380,2);\n      }\n    }\n  }\n  else {\n    FUN_00056930(&local_38,"index \'%q\'",*param_3);\n  }\n  uVar2 = FUN_00026fe0();\n  FUN_000481e0(uVar2,0xfffffff9,2);\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return;\n  }\n                    \n  FUN_000f4bf0();\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_00065970(undefined4 *param_1,undefined4 param_2,undefined4 *param_3)" identifier (parameter_list "(undefined4 *param_1,undefined4 param_2,undefined4 *param_3)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "undefined4 *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  undefined4 *puVar1;\n  undefined4 uVar2;\n  int iVar3;\n  int in_GS_OFFSET;\n  undefined4 local_50;\n  undefined4 local_38;\n  undefined4 local_34;\n  undefined4 local_30;\n  undefined4 local_2c;\n  undefined4 local_28;\n  undefined2 local_24;\n  int local_20;\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x6597b;\n  local_38 = *param_1;\n  puVar1 = (undefined4 *)param_3[3];\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  local_34 = 0;\n  local_30 = 0;\n  local_2c = 200;\n  local_28 = 0;\n  local_24 = 0;\n  if (param_3[10] == 0) {\n    if (*(short *)((int)param_3 + 0x32) != 0) {\n      iVar3 = 0;\n      local_50 = *(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1]);\n      while( true ) {\n        iVar3 = iVar3 + 1;\n        FUN_0004ac40(&local_38,*puVar1);\n        FUN_0004abe0(&local_38,&DAT_000f7e8c,1);\n        FUN_0004ac40(&local_38,local_50);\n        if ((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3) break;\n        local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]);\n        FUN_0004abe0(&local_38,&DAT_000f5380,2);\n      }\n    }\n  }\n  else {\n    FUN_00056930(&local_38,"index \'%q\'",*param_3);\n  }\n  uVar2 = FUN_00026fe0();\n  FUN_000481e0(uVar2,0xfffffff9,2);\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return;\n  }\n                    \n  FUN_000f4bf0();\n}" { (declaration "undefined4 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int in_GS_OFFSET;" primitive_type identifier ;) (declaration "undefined4 local_50;" type_identifier identifier ;) (declaration "undefined4 local_38;" type_identifier identifier ;) (declaration "undefined4 local_34;" type_identifier identifier ;) (declaration "undefined4 local_30;" type_identifier identifier ;) (declaration "undefined4 local_2c;" type_identifier identifier ;) (declaration "undefined4 local_28;" type_identifier identifier ;) (declaration "undefined2 local_24;" type_identifier identifier ;) (declaration "int local_20;" primitive_type identifier ;) (declaration "undefined4 uStack_14;" type_identifier identifier ;) (expression_statement "uStack_14 = 0x6597b;" (assignment_expression "uStack_14 = 0x6597b" identifier = number_literal) ;) (expression_statement "local_38 = *param_1;" (assignment_expression "local_38 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "puVar1 = (undefined4 *)param_3[3];" (assignment_expression "puVar1 = (undefined4 *)param_3[3]" identifier = (cast_expression "(undefined4 *)param_3[3]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_3[3]" identifier [ number_literal ]))) ;) (expression_statement "local_20 = *(int *)(in_GS_OFFSET + 0x14);" (assignment_expression "local_20 = *(int *)(in_GS_OFFSET + 0x14)" identifier = (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) ;) (expression_statement "local_34 = 0;" (assignment_expression "local_34 = 0" identifier = number_literal) ;) (expression_statement "local_30 = 0;" (assignment_expression "local_30 = 0" identifier = number_literal) ;) (expression_statement "local_2c = 200;" (assignment_expression "local_2c = 200" identifier = number_literal) ;) (expression_statement "local_28 = 0;" (assignment_expression "local_28 = 0" identifier = number_literal) ;) (expression_statement "local_24 = 0;" (assignment_expression "local_24 = 0" identifier = number_literal) ;) (if_statement "if (param_3[10] == 0) {\n    if (*(short *)((int)param_3 + 0x32) != 0) {\n      iVar3 = 0;\n      local_50 = *(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1]);\n      while( true ) {\n        iVar3 = iVar3 + 1;\n        FUN_0004ac40(&local_38,*puVar1);\n        FUN_0004abe0(&local_38,&DAT_000f7e8c,1);\n        FUN_0004ac40(&local_38,local_50);\n        if ((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3) break;\n        local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]);\n        FUN_0004abe0(&local_38,&DAT_000f5380,2);\n      }\n    }\n  }\n  else {\n    FUN_00056930(&local_38,"index \'%q\'",*param_3);\n  }" if (parenthesized_expression "(param_3[10] == 0)" ( (binary_expression "param_3[10] == 0" (subscript_expression "param_3[10]" identifier [ number_literal ]) == number_literal) )) (compound_statement "{\n    if (*(short *)((int)param_3 + 0x32) != 0) {\n      iVar3 = 0;\n      local_50 = *(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1]);\n      while( true ) {\n        iVar3 = iVar3 + 1;\n        FUN_0004ac40(&local_38,*puVar1);\n        FUN_0004abe0(&local_38,&DAT_000f7e8c,1);\n        FUN_0004ac40(&local_38,local_50);\n        if ((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3) break;\n        local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]);\n        FUN_0004abe0(&local_38,&DAT_000f5380,2);\n      }\n    }\n  }" { (if_statement "if (*(short *)((int)param_3 + 0x32) != 0) {\n      iVar3 = 0;\n      local_50 = *(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1]);\n      while( true ) {\n        iVar3 = iVar3 + 1;\n        FUN_0004ac40(&local_38,*puVar1);\n        FUN_0004abe0(&local_38,&DAT_000f7e8c,1);\n        FUN_0004ac40(&local_38,local_50);\n        if ((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3) break;\n        local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]);\n        FUN_0004abe0(&local_38,&DAT_000f5380,2);\n      }\n    }" if (parenthesized_expression "(*(short *)((int)param_3 + 0x32) != 0)" ( (binary_expression "*(short *)((int)param_3 + 0x32) != 0" (pointer_expression "*(short *)((int)param_3 + 0x32)" * (cast_expression "(short *)((int)param_3 + 0x32)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_3 + 0x32)" ( (binary_expression "(int)param_3 + 0x32" (cast_expression "(int)param_3" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) != number_literal) )) (compound_statement "{\n      iVar3 = 0;\n      local_50 = *(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1]);\n      while( true ) {\n        iVar3 = iVar3 + 1;\n        FUN_0004ac40(&local_38,*puVar1);\n        FUN_0004abe0(&local_38,&DAT_000f7e8c,1);\n        FUN_0004ac40(&local_38,local_50);\n        if ((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3) break;\n        local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]);\n        FUN_0004abe0(&local_38,&DAT_000f5380,2);\n      }\n    }" { (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (expression_statement "local_50 = *(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1]);" (assignment_expression "local_50 = *(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1])" identifier = (pointer_expression "*(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1])" * (cast_expression "(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1])" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(short *)param_3[1] * 0x10 + puVar1[1])" ( (binary_expression "*(short *)param_3[1] * 0x10 + puVar1[1]" (binary_expression "*(short *)param_3[1] * 0x10" (pointer_expression "*(short *)param_3[1]" * (cast_expression "(short *)param_3[1]" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_3[1]" identifier [ number_literal ]))) * number_literal) + (subscript_expression "puVar1[1]" identifier [ number_literal ])) ))))) ;) (while_statement "while( true ) {\n        iVar3 = iVar3 + 1;\n        FUN_0004ac40(&local_38,*puVar1);\n        FUN_0004abe0(&local_38,&DAT_000f7e8c,1);\n        FUN_0004ac40(&local_38,local_50);\n        if ((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3) break;\n        local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]);\n        FUN_0004abe0(&local_38,&DAT_000f5380,2);\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        iVar3 = iVar3 + 1;\n        FUN_0004ac40(&local_38,*puVar1);\n        FUN_0004abe0(&local_38,&DAT_000f7e8c,1);\n        FUN_0004ac40(&local_38,local_50);\n        if ((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3) break;\n        local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]);\n        FUN_0004abe0(&local_38,&DAT_000f5380,2);\n      }" { (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (expression_statement "FUN_0004ac40(&local_38,*puVar1);" (call_expression "FUN_0004ac40(&local_38,*puVar1)" identifier (argument_list "(&local_38,*puVar1)" ( (pointer_expression "&local_38" & identifier) , (pointer_expression "*puVar1" * identifier) ))) ;) (expression_statement "FUN_0004abe0(&local_38,&DAT_000f7e8c,1);" (call_expression "FUN_0004abe0(&local_38,&DAT_000f7e8c,1)" identifier (argument_list "(&local_38,&DAT_000f7e8c,1)" ( (pointer_expression "&local_38" & identifier) , (pointer_expression "&DAT_000f7e8c" & identifier) , number_literal ))) ;) (expression_statement "FUN_0004ac40(&local_38,local_50);" (call_expression "FUN_0004ac40(&local_38,local_50)" identifier (argument_list "(&local_38,local_50)" ( (pointer_expression "&local_38" & identifier) , identifier ))) ;) (if_statement "if ((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3) break;" if (parenthesized_expression "((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3)" ( (binary_expression "(int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3" (binary_expression "(int)(uint)*(ushort *)((int)param_3 + 0x32)" (cast_expression "(int)(uint)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uint)" ( identifier ))) * (cast_expression "(ushort *)((int)param_3 + 0x32)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_3 + 0x32)" ( (binary_expression "(int)param_3 + 0x32" (cast_expression "(int)param_3" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) <= identifier) )) (break_statement "break;" break ;)) (expression_statement "local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]);" (assignment_expression "local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1])" identifier = (pointer_expression "*(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1])" * (cast_expression "(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1])" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1])" ( (binary_expression "*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]" (binary_expression "*(short *)(param_3[1] + iVar3 * 2) * 0x10" (pointer_expression "*(short *)(param_3[1] + iVar3 * 2)" * (cast_expression "(short *)(param_3[1] + iVar3 * 2)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3[1] + iVar3 * 2)" ( (binary_expression "param_3[1] + iVar3 * 2" (subscript_expression "param_3[1]" identifier [ number_literal ]) + (binary_expression "iVar3 * 2" identifier * number_literal)) )))) * number_literal) + (subscript_expression "puVar1[1]" identifier [ number_literal ])) ))))) ;) (expression_statement "FUN_0004abe0(&local_38,&DAT_000f5380,2);" (call_expression "FUN_0004abe0(&local_38,&DAT_000f5380,2)" identifier (argument_list "(&local_38,&DAT_000f5380,2)" ( (pointer_expression "&local_38" & identifier) , (pointer_expression "&DAT_000f5380" & identifier) , number_literal ))) ;) })) })) }) (else_clause "else {\n    FUN_00056930(&local_38,"index \'%q\'",*param_3);\n  }" else (compound_statement "{\n    FUN_00056930(&local_38,"index \'%q\'",*param_3);\n  }" { (expression_statement "FUN_00056930(&local_38,"index \'%q\'",*param_3);" (call_expression "FUN_00056930(&local_38,"index \'%q\'",*param_3)" identifier (argument_list "(&local_38,"index \'%q\'",*param_3)" ( (pointer_expression "&local_38" & identifier) , (string_literal ""index \'%q\'"" " string_content escape_sequence string_content escape_sequence ") , (pointer_expression "*param_3" * identifier) ))) ;) }))) (expression_statement "uVar2 = FUN_00026fe0();" (assignment_expression "uVar2 = FUN_00026fe0()" identifier = (call_expression "FUN_00026fe0()" identifier (argument_list "()" ( )))) ;) (expression_statement "FUN_000481e0(uVar2,0xfffffff9,2);" (call_expression "FUN_000481e0(uVar2,0xfffffff9,2)" identifier (argument_list "(uVar2,0xfffffff9,2)" ( identifier , number_literal , number_literal ))) ;) (if_statement "if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return;\n  }" if (parenthesized_expression "(local_20 == *(int *)(in_GS_OFFSET + 0x14))" ( (binary_expression "local_20 == *(int *)(in_GS_OFFSET + 0x14)" identifier == (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "FUN_000f4bf0();" (call_expression "FUN_000f4bf0()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) * LIT) + (subscript_expression IDENT [ LIT ])) ))))) ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , (pointer_expression * IDENT) ))) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , (pointer_expression & IDENT) , LIT ))) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( IDENT ))) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) <= IDENT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) )))) * LIT) + (subscript_expression IDENT [ LIT ])) ))))) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , (pointer_expression & IDENT) , LIT ))) ;) })) })) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , (string_literal " string_content escape_sequence string_content escape_sequence ") , (pointer_expression * IDENT) ))) ;) }))) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT , LIT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (return_statement return ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })))
(function_definition "void __regparm3 FUN_00065970(undefined4 *param_1,undefined4 param_2,undefined4 *param_3)\n\n{\n  undefined4 *puVar1;\n  undefined4 uVar2;\n  int iVar3;\n  int in_GS_OFFSET;\n  undefined4 local_50;\n  undefined4 local_38;\n  undefined4 local_34;\n  undefined4 local_30;\n  undefined4 local_2c;\n  undefined4 local_28;\n  undefined2 local_24;\n  int local_20;\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x6597b;\n  local_38 = *param_1;\n  puVar1 = (undefined4 *)param_3[3];\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  local_34 = 0;\n  local_30 = 0;\n  local_2c = 200;\n  local_28 = 0;\n  local_24 = 0;\n  if (param_3[10] == 0) {\n    if (*(short *)((int)param_3 + 0x32) != 0) {\n      iVar3 = 0;\n      local_50 = *(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1]);\n      while( true ) {\n        iVar3 = iVar3 + 1;\n        FUN_0004ac40(&local_38,*puVar1);\n        FUN_0004abe0(&local_38,&DAT_000f7e8c,1);\n        FUN_0004ac40(&local_38,local_50);\n        if ((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3) break;\n        local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]);\n        FUN_0004abe0(&local_38,&DAT_000f5380,2);\n      }\n    }\n  }\n  else {\n    FUN_00056930(&local_38,"index \'%q\'",*param_3);\n  }\n  uVar2 = FUN_00026fe0();\n  FUN_000481e0(uVar2,0xfffffff9,2);\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return;\n  }\n                    \n  FUN_000f4bf0();\n}" (primitive_type "void") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_00065970(undefined4 *param_1,undefined4 param_2,undefined4 *param_3)" (identifier "FUN_00065970") (parameter_list "(undefined4 *param_1,undefined4 param_2,undefined4 *param_3)" (( "(") (parameter_declaration "undefined4 *param_1" (type_identifier "undefined4") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "undefined4 param_2" (type_identifier "undefined4") (identifier "param_2")) (, ",") (parameter_declaration "undefined4 *param_3" (type_identifier "undefined4") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) () ")"))) (compound_statement "{\n  undefined4 *puVar1;\n  undefined4 uVar2;\n  int iVar3;\n  int in_GS_OFFSET;\n  undefined4 local_50;\n  undefined4 local_38;\n  undefined4 local_34;\n  undefined4 local_30;\n  undefined4 local_2c;\n  undefined4 local_28;\n  undefined2 local_24;\n  int local_20;\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x6597b;\n  local_38 = *param_1;\n  puVar1 = (undefined4 *)param_3[3];\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  local_34 = 0;\n  local_30 = 0;\n  local_2c = 200;\n  local_28 = 0;\n  local_24 = 0;\n  if (param_3[10] == 0) {\n    if (*(short *)((int)param_3 + 0x32) != 0) {\n      iVar3 = 0;\n      local_50 = *(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1]);\n      while( true ) {\n        iVar3 = iVar3 + 1;\n        FUN_0004ac40(&local_38,*puVar1);\n        FUN_0004abe0(&local_38,&DAT_000f7e8c,1);\n        FUN_0004ac40(&local_38,local_50);\n        if ((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3) break;\n        local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]);\n        FUN_0004abe0(&local_38,&DAT_000f5380,2);\n      }\n    }\n  }\n  else {\n    FUN_00056930(&local_38,"index \'%q\'",*param_3);\n  }\n  uVar2 = FUN_00026fe0();\n  FUN_000481e0(uVar2,0xfffffff9,2);\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return;\n  }\n                    \n  FUN_000f4bf0();\n}" ({ "{") (declaration "undefined4 *puVar1;" (type_identifier "undefined4") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "undefined4 uVar2;" (type_identifier "undefined4") (identifier "uVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "int in_GS_OFFSET;" (primitive_type "int") (identifier "in_GS_OFFSET") (; ";")) (declaration "undefined4 local_50;" (type_identifier "undefined4") (identifier "local_50") (; ";")) (declaration "undefined4 local_38;" (type_identifier "undefined4") (identifier "local_38") (; ";")) (declaration "undefined4 local_34;" (type_identifier "undefined4") (identifier "local_34") (; ";")) (declaration "undefined4 local_30;" (type_identifier "undefined4") (identifier "local_30") (; ";")) (declaration "undefined4 local_2c;" (type_identifier "undefined4") (identifier "local_2c") (; ";")) (declaration "undefined4 local_28;" (type_identifier "undefined4") (identifier "local_28") (; ";")) (declaration "undefined2 local_24;" (type_identifier "undefined2") (identifier "local_24") (; ";")) (declaration "int local_20;" (primitive_type "int") (identifier "local_20") (; ";")) (declaration "undefined4 uStack_14;" (type_identifier "undefined4") (identifier "uStack_14") (; ";")) (expression_statement "uStack_14 = 0x6597b;" (assignment_expression "uStack_14 = 0x6597b" (identifier "uStack_14") (= "=") (number_literal "0x6597b")) (; ";")) (expression_statement "local_38 = *param_1;" (assignment_expression "local_38 = *param_1" (identifier "local_38") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "puVar1 = (undefined4 *)param_3[3];" (assignment_expression "puVar1 = (undefined4 *)param_3[3]" (identifier "puVar1") (= "=") (cast_expression "(undefined4 *)param_3[3]" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_3[3]" (identifier "param_3") ([ "[") (number_literal "3") (] "]")))) (; ";")) (expression_statement "local_20 = *(int *)(in_GS_OFFSET + 0x14);" (assignment_expression "local_20 = *(int *)(in_GS_OFFSET + 0x14)" (identifier "local_20") (= "=") (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" (* "*") (cast_expression "(int *)(in_GS_OFFSET + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_GS_OFFSET + 0x14)" (( "(") (binary_expression "in_GS_OFFSET + 0x14" (identifier "in_GS_OFFSET") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "local_34 = 0;" (assignment_expression "local_34 = 0" (identifier "local_34") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_30 = 0;" (assignment_expression "local_30 = 0" (identifier "local_30") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_2c = 200;" (assignment_expression "local_2c = 200" (identifier "local_2c") (= "=") (number_literal "200")) (; ";")) (expression_statement "local_28 = 0;" (assignment_expression "local_28 = 0" (identifier "local_28") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_24 = 0;" (assignment_expression "local_24 = 0" (identifier "local_24") (= "=") (number_literal "0")) (; ";")) (if_statement "if (param_3[10] == 0) {\n    if (*(short *)((int)param_3 + 0x32) != 0) {\n      iVar3 = 0;\n      local_50 = *(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1]);\n      while( true ) {\n        iVar3 = iVar3 + 1;\n        FUN_0004ac40(&local_38,*puVar1);\n        FUN_0004abe0(&local_38,&DAT_000f7e8c,1);\n        FUN_0004ac40(&local_38,local_50);\n        if ((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3) break;\n        local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]);\n        FUN_0004abe0(&local_38,&DAT_000f5380,2);\n      }\n    }\n  }\n  else {\n    FUN_00056930(&local_38,"index \'%q\'",*param_3);\n  }" (if "if") (parenthesized_expression "(param_3[10] == 0)" (( "(") (binary_expression "param_3[10] == 0" (subscript_expression "param_3[10]" (identifier "param_3") ([ "[") (number_literal "10") (] "]")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    if (*(short *)((int)param_3 + 0x32) != 0) {\n      iVar3 = 0;\n      local_50 = *(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1]);\n      while( true ) {\n        iVar3 = iVar3 + 1;\n        FUN_0004ac40(&local_38,*puVar1);\n        FUN_0004abe0(&local_38,&DAT_000f7e8c,1);\n        FUN_0004ac40(&local_38,local_50);\n        if ((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3) break;\n        local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]);\n        FUN_0004abe0(&local_38,&DAT_000f5380,2);\n      }\n    }\n  }" ({ "{") (if_statement "if (*(short *)((int)param_3 + 0x32) != 0) {\n      iVar3 = 0;\n      local_50 = *(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1]);\n      while( true ) {\n        iVar3 = iVar3 + 1;\n        FUN_0004ac40(&local_38,*puVar1);\n        FUN_0004abe0(&local_38,&DAT_000f7e8c,1);\n        FUN_0004ac40(&local_38,local_50);\n        if ((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3) break;\n        local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]);\n        FUN_0004abe0(&local_38,&DAT_000f5380,2);\n      }\n    }" (if "if") (parenthesized_expression "(*(short *)((int)param_3 + 0x32) != 0)" (( "(") (binary_expression "*(short *)((int)param_3 + 0x32) != 0" (pointer_expression "*(short *)((int)param_3 + 0x32)" (* "*") (cast_expression "(short *)((int)param_3 + 0x32)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_3 + 0x32)" (( "(") (binary_expression "(int)param_3 + 0x32" (cast_expression "(int)param_3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_3")) (+ "+") (number_literal "0x32")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      iVar3 = 0;\n      local_50 = *(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1]);\n      while( true ) {\n        iVar3 = iVar3 + 1;\n        FUN_0004ac40(&local_38,*puVar1);\n        FUN_0004abe0(&local_38,&DAT_000f7e8c,1);\n        FUN_0004ac40(&local_38,local_50);\n        if ((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3) break;\n        local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]);\n        FUN_0004abe0(&local_38,&DAT_000f5380,2);\n      }\n    }" ({ "{") (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" (identifier "iVar3") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_50 = *(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1]);" (assignment_expression "local_50 = *(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1])" (identifier "local_50") (= "=") (pointer_expression "*(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1])" (* "*") (cast_expression "(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1])" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(short *)param_3[1] * 0x10 + puVar1[1])" (( "(") (binary_expression "*(short *)param_3[1] * 0x10 + puVar1[1]" (binary_expression "*(short *)param_3[1] * 0x10" (pointer_expression "*(short *)param_3[1]" (* "*") (cast_expression "(short *)param_3[1]" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_3[1]" (identifier "param_3") ([ "[") (number_literal "1") (] "]")))) (* "*") (number_literal "0x10")) (+ "+") (subscript_expression "puVar1[1]" (identifier "puVar1") ([ "[") (number_literal "1") (] "]"))) () ")"))))) (; ";")) (while_statement "while( true ) {\n        iVar3 = iVar3 + 1;\n        FUN_0004ac40(&local_38,*puVar1);\n        FUN_0004abe0(&local_38,&DAT_000f7e8c,1);\n        FUN_0004ac40(&local_38,local_50);\n        if ((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3) break;\n        local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]);\n        FUN_0004abe0(&local_38,&DAT_000f5380,2);\n      }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n        iVar3 = iVar3 + 1;\n        FUN_0004ac40(&local_38,*puVar1);\n        FUN_0004abe0(&local_38,&DAT_000f7e8c,1);\n        FUN_0004ac40(&local_38,local_50);\n        if ((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3) break;\n        local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]);\n        FUN_0004abe0(&local_38,&DAT_000f5380,2);\n      }" ({ "{") (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" (identifier "iVar3") (= "=") (binary_expression "iVar3 + 1" (identifier "iVar3") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "FUN_0004ac40(&local_38,*puVar1);" (call_expression "FUN_0004ac40(&local_38,*puVar1)" (identifier "FUN_0004ac40") (argument_list "(&local_38,*puVar1)" (( "(") (pointer_expression "&local_38" (& "&") (identifier "local_38")) (, ",") (pointer_expression "*puVar1" (* "*") (identifier "puVar1")) () ")"))) (; ";")) (expression_statement "FUN_0004abe0(&local_38,&DAT_000f7e8c,1);" (call_expression "FUN_0004abe0(&local_38,&DAT_000f7e8c,1)" (identifier "FUN_0004abe0") (argument_list "(&local_38,&DAT_000f7e8c,1)" (( "(") (pointer_expression "&local_38" (& "&") (identifier "local_38")) (, ",") (pointer_expression "&DAT_000f7e8c" (& "&") (identifier "DAT_000f7e8c")) (, ",") (number_literal "1") () ")"))) (; ";")) (expression_statement "FUN_0004ac40(&local_38,local_50);" (call_expression "FUN_0004ac40(&local_38,local_50)" (identifier "FUN_0004ac40") (argument_list "(&local_38,local_50)" (( "(") (pointer_expression "&local_38" (& "&") (identifier "local_38")) (, ",") (identifier "local_50") () ")"))) (; ";")) (if_statement "if ((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3) break;" (if "if") (parenthesized_expression "((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3)" (( "(") (binary_expression "(int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3" (binary_expression "(int)(uint)*(ushort *)((int)param_3 + 0x32)" (cast_expression "(int)(uint)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")"))) (* "*") (cast_expression "(ushort *)((int)param_3 + 0x32)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_3 + 0x32)" (( "(") (binary_expression "(int)param_3 + 0x32" (cast_expression "(int)param_3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_3")) (+ "+") (number_literal "0x32")) () ")")))) (<= "<=") (identifier "iVar3")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]);" (assignment_expression "local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1])" (identifier "local_50") (= "=") (pointer_expression "*(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1])" (* "*") (cast_expression "(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1])" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1])" (( "(") (binary_expression "*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]" (binary_expression "*(short *)(param_3[1] + iVar3 * 2) * 0x10" (pointer_expression "*(short *)(param_3[1] + iVar3 * 2)" (* "*") (cast_expression "(short *)(param_3[1] + iVar3 * 2)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3[1] + iVar3 * 2)" (( "(") (binary_expression "param_3[1] + iVar3 * 2" (subscript_expression "param_3[1]" (identifier "param_3") ([ "[") (number_literal "1") (] "]")) (+ "+") (binary_expression "iVar3 * 2" (identifier "iVar3") (* "*") (number_literal "2"))) () ")")))) (* "*") (number_literal "0x10")) (+ "+") (subscript_expression "puVar1[1]" (identifier "puVar1") ([ "[") (number_literal "1") (] "]"))) () ")"))))) (; ";")) (expression_statement "FUN_0004abe0(&local_38,&DAT_000f5380,2);" (call_expression "FUN_0004abe0(&local_38,&DAT_000f5380,2)" (identifier "FUN_0004abe0") (argument_list "(&local_38,&DAT_000f5380,2)" (( "(") (pointer_expression "&local_38" (& "&") (identifier "local_38")) (, ",") (pointer_expression "&DAT_000f5380" (& "&") (identifier "DAT_000f5380")) (, ",") (number_literal "2") () ")"))) (; ";")) (} "}"))) (} "}"))) (} "}")) (else_clause "else {\n    FUN_00056930(&local_38,"index \'%q\'",*param_3);\n  }" (else "else") (compound_statement "{\n    FUN_00056930(&local_38,"index \'%q\'",*param_3);\n  }" ({ "{") (expression_statement "FUN_00056930(&local_38,"index \'%q\'",*param_3);" (call_expression "FUN_00056930(&local_38,"index \'%q\'",*param_3)" (identifier "FUN_00056930") (argument_list "(&local_38,"index \'%q\'",*param_3)" (( "(") (pointer_expression "&local_38" (& "&") (identifier "local_38")) (, ",") (string_literal ""index \'%q\'"" (" """) (string_content "index ") (escape_sequence "\'") (string_content "%q") (escape_sequence "\'") (" """)) (, ",") (pointer_expression "*param_3" (* "*") (identifier "param_3")) () ")"))) (; ";")) (} "}")))) (expression_statement "uVar2 = FUN_00026fe0();" (assignment_expression "uVar2 = FUN_00026fe0()" (identifier "uVar2") (= "=") (call_expression "FUN_00026fe0()" (identifier "FUN_00026fe0") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "FUN_000481e0(uVar2,0xfffffff9,2);" (call_expression "FUN_000481e0(uVar2,0xfffffff9,2)" (identifier "FUN_000481e0") (argument_list "(uVar2,0xfffffff9,2)" (( "(") (identifier "uVar2") (, ",") (number_literal "0xfffffff9") (, ",") (number_literal "2") () ")"))) (; ";")) (if_statement "if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return;\n  }" (if "if") (parenthesized_expression "(local_20 == *(int *)(in_GS_OFFSET + 0x14))" (( "(") (binary_expression "local_20 == *(int *)(in_GS_OFFSET + 0x14)" (identifier "local_20") (== "==") (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" (* "*") (cast_expression "(int *)(in_GS_OFFSET + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_GS_OFFSET + 0x14)" (( "(") (binary_expression "in_GS_OFFSET + 0x14" (identifier "in_GS_OFFSET") (+ "+") (number_literal "0x14")) () ")"))))) () ")")) (compound_statement "{\n    return;\n  }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "FUN_000f4bf0();" (call_expression "FUN_000f4bf0()" (identifier "FUN_000f4bf0") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void __regparm3 function_1(type_1 *pParse,int onError,type_2 *pIdx)

{
  type_3 *pTVar1;
  int var_8;
  char *p4;
  int var_2;
  int var_1;
  char *local_50;
  type_4 errMsg;
  
  errMsg.db = pParse->db;
  pTVar1 = pIdx->pTable;
  var_8 = *(int *)(var_1 + 0x14);
  errMsg.zText = (char *)0x0;
  errMsg.nAlloc = 0;
  errMsg.mxAlloc = 200;
  errMsg.nChar = 0;
  errMsg.accError = '\0';
  errMsg.printfFlags = '\0';
  if (pIdx->aColExpr == (type_5 *)0x0) {
    if (pIdx->nKeyCol != 0) {
      var_2 = 0;
      local_50 = pTVar1->aCol[*pIdx->aiColumn].zName;
      while( true ) {
        var_2 = var_2 + 1;
        var_3(&errMsg,pTVar1->zName);
        var_4(&errMsg,".",1);
        var_3(&errMsg,local_50);
        if ((int)(type_6)pIdx->nKeyCol <= var_2) break;
        local_50 = pTVar1->aCol[pIdx->aiColumn[var_2]].zName;
        var_4(&errMsg,", ",2);
      }
    }
  }
  else {
    var_5(&errMsg,"index \'%q\'",pIdx->zName);
  }
  p4 = var_6(&errMsg);
  var_2 = 0x613;
  if ((pIdx->field_0x37 & 3) != 2) {
    var_2 = 0x813;
  }
  var_7(pParse,var_2,onError,p4,-7,'\x02');
  if (var_8 != *(int *)(var_1 + 0x14)) {
                    /* WARNING: Subroutine does not return */
    var_9();
  }
  return;
}


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

/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void __regparm3 MASKED(undefined4 *param_1,undefined4 param_2,undefined4 *param_3)

{
  undefined4 *puVar1;
  undefined4 uVar2;
  int iVar3;
  int in_GS_OFFSET;
  undefined4 local_50;
  undefined4 local_38;
  undefined4 local_34;
  undefined4 local_30;
  undefined4 local_2c;
  undefined4 local_28;
  undefined2 local_24;
  int local_20;
  undefined4 uStack_14;
  
  uStack_14 = 0x6597b;
  local_38 = *param_1;
  puVar1 = (undefined4 *)param_3[3];
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  local_34 = 0;
  local_30 = 0;
  local_2c = 200;
  local_28 = 0;
  local_24 = 0;
  if (param_3[10] == 0) {
    if (*(short *)((int)param_3 + 0x32) != 0) {
      iVar3 = 0;
      local_50 = *(undefined4 *)(*(short *)param_3[1] * 0x10 + puVar1[1]);
      while( true ) {
        iVar3 = iVar3 + 1;
        FUN_0004ac40(&local_38,*puVar1);
        FUN_0004abe0(&local_38,&DAT_000f7e8c,1);
        FUN_0004ac40(&local_38,local_50);
        if ((int)(uint)*(ushort *)((int)param_3 + 0x32) <= iVar3) break;
        local_50 = *(undefined4 *)(*(short *)(param_3[1] + iVar3 * 2) * 0x10 + puVar1[1]);
        FUN_0004abe0(&local_38,&DAT_000f5380,2);
      }
    }
  }
  else {
    FUN_00056930(&local_38,"index \'%q\'",*param_3);
  }
  uVar2 = FUN_00026fe0();
  FUN_000481e0(uVar2,0xfffffff9,2);
  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_000f4bf0();
}

