/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401b9a70 FUN_1401b9a70 * Pseudocode, not original source. */ void FUN_1401b9a70(undefined8 *param_1) { undefined8 *puVar1; int iVar2; int iVar3; longlong lVar4; longlong lVar5; undefined8 uVar6; longlong *plVar7; uint uVar8; undefined8 *puVar9; int iVar10; uint uVar11; uint uVar12; longlong lVar13; longlong lVar14; longlong *plVar15; longlong lVar16; int iVar17; longlong lVar18; longlong lVar19; ulonglong uVar20; bool bVar21; bool bVar22; undefined8 *puVar23; longlong lVar24; undefined *puVar25; undefined1 uVar26; undefined1 local_a0 [104]; puVar1 = param_1 + 1; lVar18 = 0; if (param_1[5] != 0) { lVar18 = param_1[3]; } do { lVar19 = 0; if (lVar18 == 0) { return; } if (lVar18 == 0) { /* WARNING: Subroutine does not return */ FUN_14004dc60(0x80004005); } lVar4 = *(longlong *)(lVar18 + 0x10); lVar16 = lVar18; puVar23 = puVar1; if (*(longlong *)(lVar4 + 0x20) != 0) { lVar19 = *(longlong *)(lVar4 + 0x10); } while ((uVar20 = 0, lVar19 != 0 || (lVar4 != *(longlong *)(lVar18 + 0x10)))) { if (lVar19 == 0) { /* WARNING: Subroutine does not return */ FUN_14004dc60(0x80004005); } lVar5 = *(longlong *)(lVar19 + 8); puVar25 = &DAT_14034dfb8; lVar14 = lVar19; lVar24 = lVar4; FUN_14016db50(&DAT_14034dfb8); uVar26 = 1; *(undefined4 *)(lVar5 + 0x50) = 0; *(undefined8 *)(lVar5 + 0x58) = 0; iVar10 = *(int *)(lVar5 + 0x18); if (iVar10 != 0) { iVar2 = *(int *)(lVar5 + 0x1c); if (iVar2 < 0) { iVar3 = *(int *)(lVar5 + 0x24); if (iVar3 == 0) { uVar11 = (int)(iVar10 + (iVar10 >> 0x1f & 7U)) >> 3; uVar12 = 0x400; if ((int)uVar11 < 0x400) { uVar12 = uVar11; } uVar20 = 4; if (4 < (int)uVar12) { uVar20 = (ulonglong)uVar12; } LAB_1401b9bbe: iVar10 = *(int *)(lVar5 + 0x20); iVar17 = (int)uVar20; bVar22 = SBORROW4(iVar10,iVar17); iVar3 = iVar10 - iVar17; bVar21 = iVar10 == iVar17; } else { if (iVar3 == 1) { uVar11 = (int)(iVar10 + (iVar10 >> 0x1f & 7U)) >> 3; uVar12 = 0x10; if (0x10 < (int)uVar11) { uVar12 = uVar11; } uVar20 = (ulonglong)uVar12; if (uVar12 < 0x41) { uVar20 = 0x40; } goto LAB_1401b9bbe; } if (iVar3 != 2) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } iVar10 = *(int *)(lVar5 + 0x20); bVar22 = false; bVar21 = iVar10 == 0; iVar3 = iVar10; } iVar17 = (int)uVar20; if (!bVar21 && bVar22 == iVar3 < 0) { iVar17 = iVar10; } plVar15 = *(longlong **)(lVar5 + 8); if (iVar2 == 0) { if (plVar15 == (longlong *)0x0) { lVar13 = FUN_14016d940((longlong)iVar17); } else { lVar13 = (**(code **)(*plVar15 + 8))(plVar15,(longlong)iVar17); } } else { uVar6 = *(undefined8 *)(lVar5 + 0x10); if (plVar15 == (longlong *)0x0) { lVar13 = FUN_14016d9a0(uVar6,(longlong)iVar17,iVar2,uVar6,lVar16,puVar23,lVar14,lVar24 ,puVar25,1); } else { lVar13 = (**(code **)(*plVar15 + 0x10))(plVar15,uVar6); } if (lVar13 == 0) { FUN_14016d300(local_a0,L"Memory allocation failure!"); /* WARNING: Subroutine does not return */ _CxxThrowException(local_a0,(ThrowInfo *)&DAT_1403417f8); } } *(longlong *)(lVar5 + 0x10) = lVar13; *(int *)(lVar5 + 0x1c) = iVar17; } *(undefined4 *)(lVar5 + 0x18) = 0; } uVar12 = 0; iVar10 = *(int *)(lVar5 + 0x40); if (iVar10 != 0) { iVar2 = *(int *)(lVar5 + 0x44); if (iVar2 < 0) { iVar3 = *(int *)(lVar5 + 0x4c); if (iVar3 == 0) { uVar12 = (int)(iVar10 + (iVar10 >> 0x1f & 7U)) >> 3; uVar11 = 0x400; if ((int)uVar12 < 0x400) { uVar11 = uVar12; } uVar12 = 4; if (4 < (int)uVar11) { uVar12 = uVar11; } LAB_1401b9c92: uVar11 = *(uint *)(lVar5 + 0x48); bVar22 = SBORROW4(uVar11,uVar12); uVar8 = uVar11 - uVar12; bVar21 = uVar11 == uVar12; } else { if (iVar3 == 1) { uVar11 = (int)(iVar10 + (iVar10 >> 0x1f & 7U)) >> 3; uVar12 = 0x10; if (0x10 < (int)uVar11) { uVar12 = uVar11; } if (uVar12 < 0x41) { uVar12 = 0x40; } goto LAB_1401b9c92; } if (iVar3 != 2) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } uVar11 = *(uint *)(lVar5 + 0x48); bVar22 = false; bVar21 = uVar11 == 0; uVar8 = uVar11; } if (!bVar21 && bVar22 == (int)uVar8 < 0) { uVar12 = uVar11; } plVar15 = *(longlong **)(lVar5 + 0x30); if (iVar2 == 0) { if (plVar15 == (longlong *)0x0) { lVar14 = FUN_14016d940((longlong)(int)uVar12); } else { lVar14 = (**(code **)(*plVar15 + 8))(plVar15,(longlong)(int)uVar12); } } else { uVar6 = *(undefined8 *)(lVar5 + 0x38); if (plVar15 == (longlong *)0x0) { lVar14 = FUN_14016d9a0(uVar6,(longlong)(int)uVar12,iVar2,uVar6,lVar16,puVar23,lVar14, lVar24,puVar25,uVar26); } else { lVar14 = (**(code **)(*plVar15 + 0x10))(plVar15,uVar6); } if (lVar14 == 0) { FUN_14016d300(local_a0,L"Memory allocation failure!"); /* WARNING: Subroutine does not return */ _CxxThrowException(local_a0,(ThrowInfo *)&DAT_1403417f8); } } *(longlong *)(lVar5 + 0x38) = lVar14; *(uint *)(lVar5 + 0x44) = uVar12; } *(undefined4 *)(lVar5 + 0x40) = 0; } puVar9 = DAT_14034dfb0; if ((*(short *)(lVar5 + -8) != 0x1de6) || (*(longlong *)(lVar5 + 0x60) != 0)) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } *(undefined8 *)(lVar5 + 0x60) = *DAT_14034dfb0; *puVar9 = (short *)(lVar5 + -8); FUN_14016dbe0(&DAT_14034dfb8); if (lVar4 != *(longlong *)(lVar18 + 0x10)) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } if (lVar19 == 0) { /* WARNING: Subroutine does not return */ FUN_14004dc60(0x80004005); } lVar5 = *(longlong *)(lVar19 + 0x10); FUN_140174c00(*(longlong *)(lVar18 + 0x10),lVar19); lVar19 = lVar5; } lVar19 = *(longlong *)(lVar18 + 0x10); plVar15 = (longlong *)(**(code **)(*(longlong *)*param_1 + 0x18))(); if (*(longlong *)(lVar19 + 0x20) != 0) { uVar20 = *(ulonglong *)(lVar19 + 0x10); } for (; uVar12 = 0, uVar20 != 0; uVar20 = *(ulonglong *)(uVar20 + 0x10)) { lVar4 = *(longlong *)(uVar20 + 8); FUN_14016db50(&DAT_14034dfb8); *(undefined4 *)(lVar4 + 0x50) = 0; *(undefined8 *)(lVar4 + 0x58) = 0; iVar10 = *(int *)(lVar4 + 0x18); if (iVar10 != 0) { if (*(int *)(lVar4 + 0x1c) < 0) { iVar2 = *(int *)(lVar4 + 0x24); if (iVar2 == 0) { uVar12 = (int)(iVar10 + (iVar10 >> 0x1f & 7U)) >> 3; uVar11 = 0x400; if ((int)uVar12 < 0x400) { uVar11 = uVar12; } uVar12 = 4; if (4 < (int)uVar11) { uVar12 = uVar11; } LAB_1401b9e42: uVar11 = *(uint *)(lVar4 + 0x20); bVar22 = SBORROW4(uVar11,uVar12); uVar8 = uVar11 - uVar12; bVar21 = uVar11 == uVar12; } else { if (iVar2 == 1) { uVar11 = (int)(iVar10 + (iVar10 >> 0x1f & 7U)) >> 3; uVar12 = 0x10; if (0x10 < (int)uVar11) { uVar12 = uVar11; } if (uVar12 < 0x41) { uVar12 = 0x40; } goto LAB_1401b9e42; } if (iVar2 != 2) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } uVar11 = *(uint *)(lVar4 + 0x20); bVar22 = false; bVar21 = uVar11 == 0; uVar8 = uVar11; } if (!bVar21 && bVar22 == (int)uVar8 < 0) { uVar12 = uVar11; } plVar7 = *(longlong **)(lVar4 + 8); if (*(int *)(lVar4 + 0x1c) == 0) { if (plVar7 == (longlong *)0x0) { lVar16 = FUN_14016d940((longlong)(int)uVar12); } else { lVar16 = (**(code **)(*plVar7 + 8))(plVar7,(longlong)(int)uVar12); } } else { if (plVar7 == (longlong *)0x0) { lVar16 = FUN_14016d9a0(*(undefined8 *)(lVar4 + 0x10),(longlong)(int)uVar12); } else { lVar16 = (**(code **)(*plVar7 + 0x10))(plVar7,*(undefined8 *)(lVar4 + 0x10)); } if (lVar16 == 0) { FUN_14016d300(local_a0,L"Memory allocation failure!"); /* WARNING: Subroutine does not return */ _CxxThrowException(local_a0,(ThrowInfo *)&DAT_1403417f8); } } *(longlong *)(lVar4 + 0x10) = lVar16; *(uint *)(lVar4 + 0x1c) = uVar12; } *(undefined4 *)(lVar4 + 0x18) = 0; } uVar12 = 0; iVar10 = *(int *)(lVar4 + 0x40); if (iVar10 != 0) { if (*(int *)(lVar4 + 0x44) < 0) { iVar2 = *(int *)(lVar4 + 0x4c); if (iVar2 == 0) { uVar12 = (int)(iVar10 + (iVar10 >> 0x1f & 7U)) >> 3; uVar11 = 0x400; if ((int)uVar12 < 0x400) { uVar11 = uVar12; } uVar12 = 4; if (4 < (int)uVar11) { uVar12 = uVar11; } LAB_1401b9f16: uVar11 = *(uint *)(lVar4 + 0x48); bVar22 = SBORROW4(uVar11,uVar12); uVar8 = uVar11 - uVar12; bVar21 = uVar11 == uVar12; } else { if (iVar2 == 1) { uVar11 = (int)(iVar10 + (iVar10 >> 0x1f & 7U)) >> 3; uVar12 = 0x10; if (0x10 < (int)uVar11) { uVar12 = uVar11; } if (uVar12 < 0x41) { uVar12 = 0x40; } goto LAB_1401b9f16; } if (iVar2 != 2) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } uVar11 = *(uint *)(lVar4 + 0x48); bVar22 = false; bVar21 = uVar11 == 0; uVar8 = uVar11; } if (!bVar21 && bVar22 == (int)uVar8 < 0) { uVar12 = uVar11; } plVar7 = *(longlong **)(lVar4 + 0x30); if (*(int *)(lVar4 + 0x44) == 0) { if (plVar7 == (longlong *)0x0) { lVar16 = FUN_14016d940((longlong)(int)uVar12); } else { lVar16 = (**(code **)(*plVar7 + 8))(plVar7,(longlong)(int)uVar12); } } else { if (plVar7 == (longlong *)0x0) { lVar16 = FUN_14016d9a0(*(undefined8 *)(lVar4 + 0x38),(longlong)(int)uVar12); } else { lVar16 = (**(code **)(*plVar7 + 0x10))(plVar7,*(undefined8 *)(lVar4 + 0x38)); } if (lVar16 == 0) { FUN_14016d300(local_a0,L"Memory allocation failure!"); /* WARNING: Subroutine does not return */ _CxxThrowException(local_a0,(ThrowInfo *)&DAT_1403417f8); } } *(longlong *)(lVar4 + 0x38) = lVar16; *(uint *)(lVar4 + 0x44) = uVar12; } *(undefined4 *)(lVar4 + 0x40) = 0; } puVar9 = DAT_14034dfb0; if ((*(short *)(lVar4 + -8) != 0x1de6) || (*(longlong *)(lVar4 + 0x60) != 0)) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } *(undefined8 *)(lVar4 + 0x60) = *DAT_14034dfb0; *puVar9 = (short *)(lVar4 + -8); FUN_14016dbe0(&DAT_14034dfb8); } FUN_1401b7550(lVar19); (**(code **)(*plVar15 + 0x18))(plVar15,lVar19); if (puVar23 != puVar1) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } if (lVar18 == 0) { /* WARNING: Subroutine does not return */ FUN_14004dc60(0x80004005); } lVar19 = *(longlong *)(lVar18 + 0x18); FUN_140175900(puVar1,lVar18,0); lVar18 = lVar19; } while( true ); }