/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401ff5a0 FUN_1401ff5a0 * Pseudocode, not original source. */ undefined8 FUN_1401ff5a0(longlong *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4) { undefined8 *puVar1; longlong *plVar2; longlong *plVar3; char cVar4; int iVar5; undefined8 uVar6; longlong *plVar7; longlong lVar8; ulonglong uVar9; longlong *plVar10; longlong *plVar11; longlong *local_res8; undefined8 local_d8; longlong local_d0; longlong *local_c8; undefined8 local_c0; longlong *local_b8; longlong *local_b0; undefined4 local_a8; undefined4 local_a4; longlong *local_a0; longlong *local_98; undefined8 local_90; undefined1 local_88 [80]; local_90 = 0xfffffffffffffffe; local_b0 = (longlong *)(**(code **)(*param_1 + 0x38))(); plVar11 = (longlong *)0x0; local_c0 = 0; local_c8 = (longlong *)0x0; local_d0 = 0; local_b8 = (longlong *)0x0; local_d8 = 0; local_a4 = 0; cVar4 = FUN_14016bba0(param_2,&local_d8); if (cVar4 == '\0') { if (local_b8 != (longlong *)0x0) { plVar11 = local_b8 + 1; *plVar11 = *plVar11 + -1; if (*plVar11 == 0) { FUN_140178750(&local_b8,local_b8); } } local_res8 = &local_d0; FUN_14016d0e0(&local_d0); if ((local_c8 != (longlong *)0x0) && (local_c0 < 0)) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } } else { if ((int)local_d8 != 1) { if ((int)local_d8 == 2) { uVar6 = (**(code **)(*(longlong *)(*(longlong *)(param_1[2] + 0x670) + 0x88) + 0x18))(); plVar7 = (longlong *)FUN_1401828a0(&local_a0,uVar6); plVar3 = local_b0; plVar2 = local_b8; plVar10 = (longlong *)*plVar7; if (plVar10 != (longlong *)0x0) { plVar10[1] = plVar10[1] + 1; plVar11 = plVar10; } if (local_b8 != (longlong *)0x0) { plVar10 = local_b8 + 1; *plVar10 = *plVar10 + -1; if (*plVar10 == 0) { puVar1 = (undefined8 *)*local_b8; *puVar1 = Proud::CFastArray::vftable; if (puVar1[2] != 0) { if ((longlong *)puVar1[1] == (longlong *)0x0) { FUN_14016d970(puVar1[2]); } else { (**(code **)(*(longlong *)puVar1[1] + 0x18))(); } } (**(code **)(*plVar3 + 0x18))(plVar3,puVar1); (**(code **)(*local_b0 + 0x18))(local_b0,plVar2); } } plVar10 = local_98; local_b0 = (longlong *)plVar7[1]; local_b8 = plVar11; if (local_a0 != (longlong *)0x0) { plVar11 = local_a0 + 1; *plVar11 = *plVar11 + -1; if (*plVar11 == 0) { puVar1 = (undefined8 *)*local_a0; *puVar1 = Proud::CFastArray::vftable; if (puVar1[2] != 0) { if ((longlong *)puVar1[1] == (longlong *)0x0) { FUN_14016d970(puVar1[2]); } else { (**(code **)(*(longlong *)puVar1[1] + 0x18))(); } } (**(code **)(*plVar10 + 0x18))(plVar10,puVar1); (**(code **)(*local_98 + 0x18))(local_98,local_a0); } } if (local_b8 == (longlong *)0x0) { lVar8 = 0; } else { lVar8 = *local_b8; } cVar4 = FUN_1401c2fa0(lVar8,param_2); if (cVar4 == '\0') { if (local_b8 != (longlong *)0x0) { plVar11 = local_b8 + 1; *plVar11 = *plVar11 + -1; if (*plVar11 == 0) { FUN_140178750(&local_b8,local_b8); } } local_res8 = &local_d0; FUN_14016d0e0(&local_d0); if (local_c8 == (longlong *)0x0) { return 0; } if (-1 < local_c0) { return 0; } /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } cVar4 = FUN_14016b370(param_2,&local_res8,4); if (cVar4 == '\0') { local_a4 = 0; if (local_b8 != (longlong *)0x0) { plVar11 = local_b8 + 1; *plVar11 = *plVar11 + -1; if (*plVar11 == 0) { FUN_140178750(&local_b8,local_b8); } } local_res8 = &local_d0; FUN_14016d0e0(&local_d0); if (local_c8 == (longlong *)0x0) { return 0; } if (-1 < local_c0) { return 0; } /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } local_a4 = local_res8._0_4_; cVar4 = FUN_14016b370(param_2,&local_res8,4); if (cVar4 == '\0') { if (local_b8 != (longlong *)0x0) { plVar11 = local_b8 + 1; *plVar11 = *plVar11 + -1; if (*plVar11 == 0) { FUN_140178750(&local_b8,local_b8); } } local_res8 = &local_d0; FUN_14016d0e0(&local_d0); if (local_c8 == (longlong *)0x0) { return 0; } if (-1 < local_c0) { return 0; } /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } local_a8 = local_res8._0_4_; } LAB_1401ff9b1: FUN_1401a7d90(param_3,0); FUN_1401feb80(param_1[1],&local_d8); uVar6 = FUN_1401feaf0(param_1[1]); iVar5 = FUN_1401bfd60(uVar6,param_3,*(undefined4 *)(param_1[2] + 0x56c), *(undefined4 *)(*(longlong *)(param_1[2] + 0x670) + 0x6a4),param_4); if (iVar5 < 0) { *(undefined1 *)(param_1 + 3) = 1; } if (local_b8 != (longlong *)0x0) { plVar11 = local_b8 + 1; *plVar11 = *plVar11 + -1; if (*plVar11 == 0) { FUN_140178750(&local_b8,local_b8); } } local_res8 = &local_d0; FUN_14016d0e0(&local_d0); if ((local_c8 != (longlong *)0x0) && (local_c0 < 0)) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } return 1; } cVar4 = FUN_14016b370(param_2,&local_res8,4); if (cVar4 == '\0') { local_d8 = local_d8 & 0xffffffff; if (local_b8 != (longlong *)0x0) { plVar11 = local_b8 + 1; *plVar11 = *plVar11 + -1; if (*plVar11 == 0) { FUN_140178750(&local_b8,local_b8); } } local_res8 = &local_d0; FUN_14016d0e0(&local_d0); if (local_c8 == (longlong *)0x0) { return 0; } if (-1 < local_c0) { return 0; } /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } local_d8 = CONCAT44(local_res8._0_4_,(int)local_d8); if (local_c8 != (longlong *)0x0) { FUN_14016d300(local_88,PTR_u_Cannot_use_internal_buffer_becau_140344030); /* WARNING: Subroutine does not return */ _CxxThrowException(local_88,(ThrowInfo *)&DAT_1403417f8); } if (local_d0 == 0) { local_d0 = FUN_14016d120(); *(undefined8 *)(local_d0 + 0x28) = 1; } cVar4 = FUN_14016ba10(param_2,&local_res8); if (((cVar4 != '\0') && (iVar5 = (int)local_res8, -1 < iVar5)) && (iVar5 <= DAT_140344d70)) { if (local_c8 == (longlong *)0x0) { if (iVar5 < 1) { if (local_d0 == 0) goto LAB_1401ffa50; uVar9 = 0; } else { if (local_d0 == 0) { /* WARNING: Subroutine does not return */ FUN_14016d1e0(); } uVar9 = (ulonglong)local_res8 & 0xffffffff; } FUN_14004f0e0(local_d0,uVar9); } else { if (local_c0._4_4_ < iVar5) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } local_c0 = CONCAT44(local_c0._4_4_,iVar5); } plVar10 = local_c8; if (local_c8 == (longlong *)0x0) { if (local_d0 == 0) { LAB_1401ffa50: /* WARNING: Subroutine does not return */ FUN_14016d1e0(); } plVar10 = plVar11; if (*(int *)(local_d0 + 0x18) != 0) { plVar10 = *(longlong **)(local_d0 + 0x10); } } cVar4 = FUN_14016b370(param_2,plVar10,(ulonglong)local_res8 & 0xffffffff); if (cVar4 != '\0') goto LAB_1401ff9b1; } if (local_b8 != (longlong *)0x0) { plVar11 = local_b8 + 1; *plVar11 = *plVar11 + -1; if (*plVar11 == 0) { FUN_140178750(&local_b8,local_b8); } } local_res8 = &local_d0; FUN_14016d0e0(&local_d0); if ((local_c8 != (longlong *)0x0) && (local_c0 < 0)) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } } return 0; }