/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401c63f0 FUN_1401c63f0 * Pseudocode, not original source. */ longlong FUN_1401c63f0(longlong param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4) { longlong *plVar1; undefined8 *puVar2; int iVar3; void *pvVar4; ulonglong *puVar5; longlong *plVar6; undefined4 uVar7; int iVar8; longlong lVar9; longlong lVar10; longlong lVar11; ulonglong uVar12; ulonglong uVar13; int iVar14; ulonglong uVar15; longlong lVar16; ulonglong uVar17; int iVar18; longlong *local_res18; undefined8 uVar19; uVar19 = 0xfffffffffffffffe; uVar7 = FUN_140171510(); FUN_14016da70(param_1,uVar7,1,param_4,uVar19); iVar18 = 0; *(undefined8 *)(param_1 + 0x38) = 0; *(undefined8 *)(param_1 + 0x40) = 0; *(undefined4 *)(param_1 + 0x48) = 0; puVar2 = (undefined8 *)(param_1 + 0x50); *puVar2 = Proud::CFastArray,0>::vftable; *(undefined8 *)(param_1 + 0x58) = 0; *(undefined8 *)(param_1 + 0x60) = 0; *(undefined8 *)(param_1 + 0x68) = 0; *(undefined8 *)(param_1 + 0x70) = 0; *(undefined1 *)(param_1 + 0x80) = 1; iVar8 = FUN_14016eed0(); if (0 < iVar8) { do { lVar9 = 0; local_res18 = operator_new(0x28); if (local_res18 != (longlong *)0x0) { lVar9 = FUN_1401996b0(local_res18,&LAB_1401c6200,param_1); } if (lVar9 == 0) { local_res18 = (longlong *)0x0; } else { local_res18 = (longlong *)FUN_14016d940(0x10); local_res18[1] = 1; *local_res18 = lVar9; } plVar1 = local_res18; iVar3 = *(int *)(param_1 + 0x68); if (iVar3 < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } iVar14 = *(int *)(param_1 + 0x68); FUN_1401a8910(puVar2,iVar14 + 1); iVar14 = iVar14 - iVar3; if ((0 < iVar14) && (iVar14 = iVar14 + -1, -1 < iVar14)) { lVar9 = (longlong)(iVar14 + iVar3 + 1) << 3; lVar16 = (longlong)(iVar14 + iVar3) << 3; do { lVar10 = FUN_14016ab80(puVar2); lVar11 = FUN_14016ab80(puVar2); FUN_1401a4b40(lVar9 + lVar11,lVar16 + lVar10); lVar16 = lVar16 + -8; lVar9 = lVar9 + -8; iVar14 = iVar14 + -1; } while (-1 < iVar14); } lVar9 = FUN_14016ab80(puVar2); FUN_1401a4b40(lVar9 + (longlong)iVar3 * 8,&local_res18); plVar6 = local_res18; if (plVar1 != (longlong *)0x0) { plVar1 = plVar1 + 1; *plVar1 = *plVar1 + -1; if (*plVar1 == 0) { pvVar4 = (void *)*local_res18; if (pvVar4 != (void *)0x0) { FUN_1401997c0(pvVar4); operator_delete(pvVar4); } FUN_14016d970(plVar6); } } iVar18 = iVar18 + 1; } while (iVar18 < iVar8); } uVar17 = 0; uVar13 = uVar17; uVar15 = uVar17; if (0 < iVar8) { do { if (((longlong)uVar13 < 0) || (*(int *)(param_1 + 0x68) <= (int)uVar15)) { /* WARNING: Subroutine does not return */ FUN_14016d6e0(); } puVar5 = *(ulonglong **)(*(longlong *)(param_1 + 0x60) + uVar13 * 8); uVar12 = uVar17; if (puVar5 != (ulonglong *)0x0) { uVar12 = *puVar5; } FUN_1401998a0(uVar12); uVar15 = (ulonglong)((int)uVar15 + 1); uVar13 = uVar13 + 1; } while ((longlong)uVar13 < (longlong)iVar8); } return param_1; }