/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401d1b90 FUN_1401d1b90 * Pseudocode, not original source. */ void FUN_1401d1b90(longlong param_1,undefined8 *param_2,int param_3,undefined4 *param_4) { undefined8 *_Dst; longlong lVar1; longlong *plVar2; ulonglong uVar3; size_t _Size; ulonglong uVar4; undefined4 local_60; undefined4 local_5c; undefined *local_58; undefined4 local_50; undefined4 local_4c; undefined **local_48; longlong *local_40; undefined8 *local_38; undefined8 local_30; undefined8 local_28; if (*(longlong *)(param_1 + 0x58) != 0) { local_48 = Proud::CFastArray::vftable; local_40 = (longlong *)0x0; local_38 = (undefined8 *)0x0; local_30 = 0; local_28 = 0; FUN_14015e670(&local_48,param_3); _Dst = local_38; if ((int)local_30 == 0) { _Dst = (undefined8 *)0x0; } _Size = (longlong)param_3 << 2; if (_Size < 0x21) { uVar3 = (ulonglong)((uint)_Size & 7); for (uVar4 = ((longlong)param_3 & 0x3fffffffffffffffU) >> 1; uVar4 != 0; uVar4 = uVar4 - 1) { *_Dst = *param_2; _Dst = _Dst + 1; param_2 = param_2 + 1; } if (uVar3 != 0) { lVar1 = (longlong)_Dst - (longlong)param_2; do { *(undefined1 *)(lVar1 + (longlong)param_2) = *(undefined1 *)param_2; param_2 = (undefined8 *)((longlong)param_2 + 1); uVar3 = uVar3 - 1; } while (uVar3 != 0); } } else { memcpy(_Dst,param_2,_Size); } FUN_14016d8c0(); local_58 = PTR_DAT_1403440a0; local_60 = *param_4; local_5c = param_4[1]; FUN_14004c050(&local_58,*(undefined8 *)(param_4 + 2)); local_50 = param_4[4]; local_4c = param_4[5]; plVar2 = (longlong *)(*(longlong *)(param_1 + 0x58) + 0x68); (**(code **)(*plVar2 + 0x40))(plVar2,1,&DAT_14034c4b0,&local_48,&local_60); FUN_14004eb70(&local_58); local_48 = Proud::CFastArray::vftable; if (local_38 != (undefined8 *)0x0) { if (local_40 == (longlong *)0x0) { FUN_14016d970(local_38); } else { (**(code **)(*local_40 + 0x18))(); } } } return; }