/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401b6a80 FUN_1401b6a80 * Pseudocode, not original source. */ /* WARNING: Removing unreachable block (ram,0x0001401b6fe9) */ /* WARNING: Removing unreachable block (ram,0x0001401b6ff0) */ /* WARNING: Removing unreachable block (ram,0x0001401b6fff) */ void FUN_1401b6a80(longlong param_1,undefined8 param_2,longlong *param_3) { undefined4 uVar1; longlong lVar2; longlong lVar3; undefined8 uVar4; undefined8 *puVar5; undefined8 *puVar6; int iVar7; uint uVar8; longlong *plVar9; undefined8 *puVar10; int iVar11; size_t _Size; ulonglong uVar12; int iVar13; int iVar14; longlong local_res20; undefined8 local_a8; undefined1 local_98 [96]; puVar6 = (undefined8 *)0x0; plVar9 = (longlong *)(param_1 + 0x30); puVar5 = puVar6; do { if (((longlong)puVar5 < 0) || (5 < (longlong)puVar5)) { /* WARNING: Subroutine does not return */ FUN_14016d6e0(); } lVar2 = *plVar9; if (lVar2 != 0) { FUN_1401b6440(param_3); *(undefined4 *)(param_3 + 0xd5) = *(undefined4 *)(param_1 + 0x178); local_a8 = (int *)CONCAT44(local_a8._4_4_,0x10); *(undefined2 *)((longlong)param_3 + 0x6ac) = *(undefined2 *)(param_1 + 0x17c); param_3[0xce] = *(longlong *)(param_1 + 400); *(undefined2 *)(param_3 + 0xcc) = 0xabce; *(undefined2 *)((longlong)param_3 + 0x662) = *(undefined2 *)(param_1 + 0x180); uVar1 = *(undefined4 *)(lVar2 + 0x30); param_3[0xcd] = 0; *(undefined4 *)((longlong)param_3 + 0x664) = uVar1; lVar3 = param_3[1]; if (lVar3 < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } FUN_1401b5c60(param_3,lVar3 + 1,0xffffffffffffffff); if (param_3[1] <= lVar3) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } if ((ulonglong)param_3[2] < 0x65) { plVar9 = param_3 + (lVar3 + 2) * 2; } else { plVar9 = (longlong *)(lVar3 * 0x10 + *param_3); } *plVar9 = (longlong)local_a8; plVar9[1] = (longlong)(param_3 + 0xcc); puVar5 = puVar6; if (*(int *)(lVar2 + 0x30) != 0) { puVar5 = *(undefined8 **)(lVar2 + 0x28); } lVar3 = param_3[1]; local_a8 = (int *)CONCAT44(local_a8._4_4_,*(int *)(lVar2 + 0x30)); if (lVar3 < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } FUN_1401b5c60(param_3,lVar3 + 1,0xffffffffffffffff); if (param_3[1] <= lVar3) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } if ((ulonglong)param_3[2] < 0x65) { plVar9 = param_3 + (lVar3 + 2) * 2; } else { plVar9 = (longlong *)(lVar3 * 0x10 + *param_3); } *plVar9 = (longlong)local_a8; plVar9[1] = (longlong)puVar5; *(undefined4 *)(param_3 + 0xd6) = *(undefined4 *)(lVar2 + 0x48); iVar14 = (int)param_3[0xd2]; if (-1 < iVar14) { lVar3 = param_3[0xd2]; FUN_1401c2dc0(param_3 + 0xcf,(int)lVar3 + 1); iVar13 = (int)lVar3 - iVar14; if (0 < iVar13) { puVar5 = puVar6; if ((int)param_3[0xd2] != 0) { puVar5 = (undefined8 *)param_3[0xd1]; } memmove(puVar5 + (longlong)iVar14 + 1,puVar5 + iVar14,(longlong)iVar13 << 3); } if ((int)param_3[0xd2] != 0) { puVar6 = (undefined8 *)param_3[0xd1]; } puVar6[iVar14] = lVar2; if (*(longlong *)(lVar2 + 0x10) == 0) { return; } FUN_1401b5560(*(longlong *)(lVar2 + 0x10),lVar2); return; } /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } puVar5 = (undefined8 *)((longlong)puVar5 + 1); plVar9 = plVar9 + 7; } while ((longlong)puVar5 < 6); iVar14 = -1; if (*(int *)(param_1 + 0x1b0) == 0) { *(int *)(param_1 + 0x1d4) = *(int *)(param_1 + 0x1d4) + 1; local_a8 = (int *)(param_1 + 0x28); *(undefined8 *)(param_1 + 0x1c0) = 0; *(undefined8 *)(param_1 + 0x1c8) = 0; *(undefined4 *)(param_1 + 0x1d0) = 0; local_res20 = 0; puVar5 = puVar6; do { if ((local_res20 < 0) || (5 < local_res20)) { /* WARNING: Subroutine does not return */ FUN_14016d6e0(); } iVar13 = *local_a8; while (0 < iVar13) { lVar2 = *(longlong *)(local_a8 + -4); if ((int)puVar5 == 0) { iVar14 = *(int *)(param_1 + 0x1b0); if (iVar14 < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } iVar13 = *(int *)(param_1 + 0x1b0); FUN_1401c2dc0(param_1 + 0x198,iVar13 + 1); iVar13 = iVar13 - iVar14; if (0 < iVar13) { puVar10 = puVar6; if (*(int *)(param_1 + 0x1b0) != 0) { puVar10 = *(undefined8 **)(param_1 + 0x1a8); } memmove(puVar10 + (longlong)iVar14 + 1,puVar10 + iVar14,(longlong)iVar13 << 3); } puVar10 = puVar6; if (*(int *)(param_1 + 0x1b0) != 0) { puVar10 = *(undefined8 **)(param_1 + 0x1a8); } puVar10[iVar14] = lVar2; *(int *)(param_1 + 0x1c0) = *(int *)(param_1 + 0x1c0) + *(int *)(lVar2 + 0x30); iVar14 = *(int *)(lVar2 + 0x48); } else { if ((DAT_140344d48 <= *(int *)(lVar2 + 0x30) + *(int *)(param_1 + 0x1c0)) || (iVar14 != *(int *)(lVar2 + 0x48))) goto LAB_1401b6ccd; iVar13 = *(int *)(param_1 + 0x1b0); if (iVar13 < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } iVar11 = *(int *)(param_1 + 0x1b0); FUN_1401c2dc0(param_1 + 0x198,iVar11 + 1); iVar11 = iVar11 - iVar13; if (0 < iVar11) { puVar10 = puVar6; if (*(int *)(param_1 + 0x1b0) != 0) { puVar10 = *(undefined8 **)(param_1 + 0x1a8); } memmove(puVar10 + (longlong)iVar13 + 1,puVar10 + iVar13,(longlong)iVar11 << 3); } puVar10 = puVar6; if (*(int *)(param_1 + 0x1b0) != 0) { puVar10 = *(undefined8 **)(param_1 + 0x1a8); } puVar10[iVar13] = lVar2; *(int *)(param_1 + 0x1c0) = *(int *)(param_1 + 0x1c0) + *(int *)(lVar2 + 0x30); } if (*(longlong *)(lVar2 + 0x10) != 0) { FUN_1401b5560(*(longlong *)(lVar2 + 0x10),lVar2); } puVar5 = (undefined8 *)(ulonglong)((int)puVar5 + 1); iVar13 = *local_a8; } local_res20 = local_res20 + 1; local_a8 = local_a8 + 0xe; } while (local_res20 < 6); LAB_1401b6ccd: } if (*(int *)(param_1 + 0x1c0) < 1) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } FUN_1401b6440(param_3); *(undefined4 *)(param_3 + 0xd5) = *(undefined4 *)(param_1 + 0x178); local_a8 = (int *)CONCAT44(local_a8._4_4_,0x10); *(undefined2 *)((longlong)param_3 + 0x6ac) = *(undefined2 *)(param_1 + 0x17c); iVar13 = *(int *)(param_1 + 0x1c0) - *(int *)(param_1 + 0x1c8); if (DAT_140344d48 < iVar13) { iVar13 = DAT_140344d48; } param_3[0xce] = *(longlong *)(param_1 + 400); *(undefined2 *)(param_3 + 0xcc) = 0xabcd; *(undefined2 *)((longlong)param_3 + 0x662) = *(undefined2 *)(param_1 + 0x180); *(undefined4 *)((longlong)param_3 + 0x664) = *(undefined4 *)(param_1 + 0x1c0); *(undefined4 *)(param_3 + 0xcd) = *(undefined4 *)(param_1 + 0x1d4); *(undefined4 *)((longlong)param_3 + 0x66c) = *(undefined4 *)(param_1 + 0x1c4); lVar2 = param_3[1]; if (-1 < lVar2) { FUN_1401b5c60(param_3,lVar2 + 1,0xffffffffffffffff); if (param_3[1] <= lVar2) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } if ((ulonglong)param_3[2] < 0x65) { plVar9 = param_3 + (lVar2 + 2) * 2; } else { plVar9 = (longlong *)(lVar2 * 0x10 + *param_3); } *plVar9 = (longlong)local_a8; plVar9[1] = (longlong)(param_3 + 0xcc); *(int *)(param_3 + 0xd6) = iVar14; iVar14 = *(int *)(param_1 + 0x1c8); iVar11 = iVar14; while( true ) { if (iVar14 + iVar13 <= iVar11) { *(int *)(param_1 + 0x1c4) = *(int *)(param_1 + 0x1c4) + 1; if (*(int *)(param_1 + 0x1c8) == *(int *)(param_1 + 0x1c0)) { iVar14 = *(int *)(param_1 + 0x1b0); puVar5 = puVar6; if (*(int *)(param_1 + 0x1b0) != 0) { puVar5 = *(undefined8 **)(param_1 + 0x1a8); } if (iVar14 < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } if (iVar14 != 0) { lVar2 = param_3[0xd2]; FUN_1401c2dc0(param_3 + 0xcf,(int)lVar2 + iVar14); puVar10 = puVar6; if ((int)param_3[0xd2] != 0) { puVar10 = (undefined8 *)param_3[0xd1]; } _Size = (longlong)iVar14 << 3; if (_Size < 0x21) { puVar10 = puVar10 + (int)lVar2; for (uVar12 = (longlong)iVar14 & 0x1fffffffffffffff; uVar12 != 0; uVar12 = uVar12 - 1) { uVar4 = *puVar5; puVar5 = puVar5 + 1; *puVar10 = uVar4; puVar10 = puVar10 + 1; } } else { memcpy(puVar10 + (int)lVar2,puVar5,_Size); } } FUN_1401c2dc0(param_1 + 0x198,0); } lVar2 = param_3[1]; puVar5 = puVar6; puVar10 = puVar6; if (0 < lVar2) { do { if (((longlong)puVar6 < 0) || (lVar2 <= (longlong)puVar6)) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } if ((ulonglong)param_3[2] < 0x65) { plVar9 = param_3 + ((longlong)puVar6 + 2) * 2; } else { plVar9 = (longlong *)((longlong)puVar6 * 0x10 + *param_3); } puVar10 = (undefined8 *)(ulonglong)(uint)((int)puVar10 + (int)*plVar9); uVar8 = (int)puVar5 + 1; puVar6 = (undefined8 *)(longlong)(int)uVar8; puVar5 = (undefined8 *)(ulonglong)uVar8; } while ((longlong)puVar6 < lVar2); } FUN_1401e25f0(param_1 + 0x1d8,puVar10); *(undefined8 *)(param_1 + 0x200) = param_2; *(double *)(param_1 + 0x1f0) = (double)(int)puVar10 + *(double *)(param_1 + 0x1f0); return; } iVar11 = *(int *)(param_1 + 0x1d0); if ((iVar11 < 0) || (*(int *)(param_1 + 0x1b0) <= iVar11)) { /* WARNING: Subroutine does not return */ FUN_14016d6e0(); } lVar2 = *(longlong *)(*(longlong *)(param_1 + 0x1a8) + (longlong)iVar11 * 8); iVar11 = *(int *)(lVar2 + 0x30) - *(int *)(param_1 + 0x1cc); iVar7 = (iVar14 - *(int *)(param_1 + 0x1c8)) + iVar13; if (iVar7 < iVar11) { iVar11 = iVar7; } if (iVar11 < 1) break; puVar5 = puVar6; if (*(int *)(lVar2 + 0x30) != 0) { puVar5 = *(undefined8 **)(lVar2 + 0x28); } iVar7 = *(int *)(param_1 + 0x1cc); lVar3 = param_3[1]; local_a8._4_4_ = (undefined4)((ulonglong)local_a8 >> 0x20); local_a8 = (int *)CONCAT44(local_a8._4_4_,iVar11); if (lVar3 < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } FUN_1401b5c60(param_3,lVar3 + 1,0xffffffffffffffff); if (param_3[1] <= lVar3) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } if ((ulonglong)param_3[2] < 0x65) { plVar9 = param_3 + (lVar3 + 2) * 2; } else { plVar9 = (longlong *)(lVar3 * 0x10 + *param_3); } *plVar9 = (longlong)local_a8; plVar9[1] = (longlong)iVar7 + (longlong)puVar5; *(int *)(param_1 + 0x1cc) = *(int *)(param_1 + 0x1cc) + iVar11; *(int *)(param_1 + 0x1c8) = *(int *)(param_1 + 0x1c8) + iVar11; if (*(int *)(param_1 + 0x1cc) == *(int *)(lVar2 + 0x30)) { *(int *)(param_1 + 0x1d0) = *(int *)(param_1 + 0x1d0) + 1; *(undefined4 *)(param_1 + 0x1cc) = 0; } iVar11 = *(int *)(param_1 + 0x1c8); } FUN_1401b62c0(param_1); FUN_14016d300(local_98,L"Unexpected at PacketQueue Pop!"); /* WARNING: Subroutine does not return */ _CxxThrowException(local_98,(ThrowInfo *)&DAT_1403417f8); } /* WARNING: Subroutine does not return */ FUN_14016d6b0(); }