/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401a22b0 FUN_1401a22b0 * Pseudocode, not original source. */ undefined8 FUN_1401a22b0(longlong param_1,undefined8 *param_2,uint param_3) { undefined8 *puVar1; undefined8 *puVar2; bool bVar3; undefined4 uVar4; undefined2 uVar5; int iVar6; char cVar7; DWORD DVar8; longlong lVar9; undefined8 *puVar10; int iVar11; double dVar12; double dVar13; int local_res8 [2]; longlong local_res20; longlong local_a8; undefined1 local_a0; undefined8 local_98; longlong local_90; undefined8 local_88; undefined4 local_80; undefined8 local_78; undefined **local_70; undefined4 local_68; undefined2 local_64; undefined4 local_60; local_98 = 0xfffffffffffffffe; if (*(longlong *)(param_1 + 0x28) == 0) { SetLastError(0); dVar12 = (double)FUN_1401a1eb0(param_1); local_res20 = param_1 + 0x50; puVar1 = (undefined8 *)(param_1 + 0x38); iVar11 = 0; do { local_a8 = param_1 + 0x50; FUN_14016db50(local_a8); local_a0 = 1; local_res8[0] = *(int *)(param_1 + 0x48) * 3 + 3; puVar2 = (undefined8 *)*puVar1; local_70 = Proud::AddrPort::vftable; local_60 = 0; local_78 = 0; local_68 = DAT_140344450; local_64 = DAT_140344454; for (; puVar2 != (undefined8 *)0x0; puVar2 = (undefined8 *)puVar2[1]) { cVar7 = FUN_14019c560(puVar2,0,&local_78); if (cVar7 != '\0') { *(undefined4 *)(param_2 + 2) = 1; puVar10 = puVar2 + 0x48; LAB_1401a2619: FUN_14019bbb0(puVar10,0,0); *param_2 = puVar2[0x5d]; *(undefined4 *)((longlong)param_2 + 0xc) = local_78._4_4_; *(undefined4 *)(param_2 + 1) = local_60; if (puVar2[2] != 0) { FUN_14019c130(puVar2[2],puVar2); } if (puVar2[2] != 0) { FUN_14019c130(puVar1,puVar2); } if (*(longlong *)(param_1 + 0x40) == 0) { *puVar1 = puVar2; } else { *(undefined8 **)(*(longlong *)(param_1 + 0x40) + 8) = puVar2; *puVar2 = *(undefined8 *)(param_1 + 0x40); } *(undefined8 **)(param_1 + 0x40) = puVar2; puVar2[2] = puVar1; *(int *)(param_1 + 0x48) = *(int *)(param_1 + 0x48) + 1; lVar9 = local_res20; goto LAB_1401a26ca; } cVar7 = FUN_14019c2f0(puVar2,0,&local_78); if (cVar7 != '\0') { *(undefined4 *)(param_2 + 2) = 2; *(undefined4 *)(param_2 + 4) = *(undefined4 *)((longlong)puVar2 + 0x304); FUN_14016f840(param_2 + 5,puVar2 + 0x5e); puVar10 = puVar2 + 0x30; goto LAB_1401a2619; } cVar7 = FUN_14019c3c0(puVar2,0,&local_78); if (cVar7 != '\0') { *(undefined4 *)(param_2 + 2) = 3; puVar10 = puVar2 + 0x18; goto LAB_1401a2619; } cVar7 = FUN_14019c490(puVar2,0,&local_78); if (cVar7 != '\0') { *(undefined4 *)(param_2 + 2) = 4; puVar10 = puVar2 + 0x68; goto LAB_1401a2619; } } if (*(longlong *)(param_1 + 0xa0) != 0) { FUN_1401a2180(param_1 + 0x88,&local_90); if (local_90 == 0) { *param_2 = 0; } else { *param_2 = *(undefined8 *)(local_90 + 0x2e8); } *(undefined4 *)(param_2 + 2) = local_80; param_2[3] = local_88; param_2[1] = 0; lVar9 = param_1 + 0x50; LAB_1401a26ca: FUN_14016dbe0(lVar9); return 1; } FUN_14016dbe0(param_1 + 0x50); local_a0 = 0; if ((param_3 == 0) || ((param_3 != 0xffffffff && (dVar13 = (double)FUN_1401a1eb0(param_1), (double)param_3 < (dVar13 - dVar12) * 1000.0)))) { return 0; } bVar3 = local_res8[0] <= iVar11; iVar6 = 0; if (!bVar3) { iVar6 = iVar11 + 1; } iVar11 = iVar6; Sleep((uint)bVar3); } while( true ); } local_res8[0] = 0; local_a8 = 0; local_res20 = 0; SetLastError(0); uVar5 = DAT_140344454; uVar4 = DAT_140344450; *param_2 = 0; param_2[1] = 0; *(undefined4 *)(param_2 + 2) = 5; param_2[3] = 0; *(undefined4 *)(param_2 + 4) = 0; *(undefined4 *)(param_2 + 6) = uVar4; *(undefined2 *)((longlong)param_2 + 0x34) = uVar5; lVar9 = FUN_14016f040(); (**(code **)(lVar9 + 0x18)) (*(undefined8 *)(param_1 + 0x28),local_res8,&local_a8,&local_res20,param_3); if (local_res20 == 0) { DVar8 = GetLastError(); *(DWORD *)((longlong)param_2 + 0xc) = DVar8; return 0; } if (local_a8 == 0) { *param_2 = 0; } else { *param_2 = *(undefined8 *)(local_a8 + 0x2e8); } if (local_res20 < 0) { *(int *)(param_2 + 1) = local_res8[0]; param_2[3] = local_res20; *(undefined8 *)((longlong)param_2 + 0xc) = 0; *(undefined4 *)(param_2 + 6) = DAT_140344450; *(undefined2 *)((longlong)param_2 + 0x34) = DAT_140344454; *(undefined4 *)(param_2 + 4) = 0; return 1; } if (local_a8 != 0) { lVar9 = local_a8 + 0x180; if (local_res20 == lVar9) { *(undefined4 *)(param_2 + 2) = 2; *(undefined4 *)(param_2 + 4) = *(undefined4 *)(local_a8 + 0x304); FUN_14016f840(param_2 + 5,local_a8 + 0x2f0); FUN_14019bbb0(lVar9,0,0); goto LAB_1401a2461; } if (local_res20 == local_a8 + 0x240) { *(undefined4 *)(param_2 + 2) = 1; FUN_14019bbb0(local_a8 + 0x240,0,0); goto LAB_1401a2461; } if (local_res20 == local_a8 + 0xc0) { *(undefined4 *)(param_2 + 2) = 3; FUN_14019bbb0(local_a8 + 0xc0,0,0); goto LAB_1401a2461; } if (local_res20 == local_a8 + 0x340) { *(undefined4 *)(param_2 + 2) = 4; FUN_14019bbb0(local_a8 + 0x340,0,0); goto LAB_1401a2461; } } *(undefined4 *)(param_2 + 2) = 0; param_2[3] = local_res20; LAB_1401a2461: *(int *)(param_2 + 1) = local_res8[0]; *(undefined4 *)((longlong)param_2 + 0xc) = 0; GetLastError(); return 1; }