/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x14018a590 FUN_14018a590 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ undefined8 FUN_14018a590(longlong param_1,longlong *param_2,undefined ***param_3) { int *piVar1; void *pvVar2; bool bVar3; bool bVar4; undefined ***pppuVar5; int iVar6; char cVar7; int iVar8; uint uVar9; uint uVar10; uint uVar11; undefined4 uVar12; uint *puVar13; undefined8 uVar14; longlong *plVar15; undefined4 *puVar16; undefined4 *puVar17; undefined4 *puVar18; uint uVar19; undefined *puVar20; undefined4 *puVar21; ulonglong uVar22; longlong lVar23; uint *puVar24; uint uVar25; longlong lVar26; double dVar27; undefined1 auStack_488 [32]; undefined ***local_468; uint *local_458; undefined ***local_450; undefined4 *local_448; char *local_440; undefined4 *local_438; undefined **local_430; longlong *local_428; longlong local_420; ulonglong local_418; undefined8 local_410; undefined *local_408; undefined **local_400; undefined8 local_3f8; undefined4 *local_3f0; undefined8 local_3e8; undefined8 local_3e0; undefined **local_3d8; longlong *local_3d0; undefined4 *local_3c8; ulonglong local_3c0; undefined4 local_3b8; undefined4 local_3b4; undefined **local_3b0; undefined8 local_3a8; undefined4 *local_3a0; undefined8 local_398; undefined8 local_390; undefined **local_388; longlong local_380; undefined4 *local_378; undefined8 local_370; undefined4 local_368; undefined4 local_364; void *local_360; char *local_358; undefined **local_350; undefined8 local_348; undefined8 local_340; undefined8 local_338; undefined8 local_330; undefined8 local_328; undefined1 local_320; undefined8 local_318; undefined1 local_310; undefined8 local_308; undefined1 local_300; undefined8 local_2f8; undefined1 local_2f0; undefined8 local_2e8; longlong local_2e0; undefined1 local_2d8; exception local_2d0 [24]; exception local_2b8 [24]; undefined1 local_2a0 [72]; undefined1 local_258 [72]; undefined1 local_210 [72]; undefined1 local_1c8 [72]; undefined1 local_180 [24]; undefined1 *local_168; undefined1 local_160 [136]; undefined1 *local_d8; undefined1 local_d0 [136]; ulonglong local_48; local_2e8 = 0xfffffffffffffffe; local_48 = DAT_1403463c0 ^ (ulonglong)auStack_488; local_2e0 = param_1 + 0xb8; local_450 = param_3; FUN_14016db50(local_2e0); local_2d8 = 1; if ((*(longlong **)(param_1 + 0x6a0) != (longlong *)0x0) && (**(longlong **)(param_1 + 0x6a0) != 0)) goto LAB_14018b3c1; iVar8 = *(int *)((longlong)param_2 + 0x54); if (iVar8 == 0) { iVar8 = FUN_14016eed0(); *(int *)((longlong)param_2 + 0x54) = iVar8; } if (iVar8 < 0) { FUN_14016d300(local_210,L"Invalid thread count"); /* WARNING: Subroutine does not return */ _CxxThrowException(local_210,(ThrowInfo *)&DAT_1403417f8); } bVar4 = false; bVar3 = false; puVar17 = (undefined4 *)0x0; uVar11 = 0; puVar18 = puVar17; puVar16 = puVar17; if (0 < (int)param_2[6]) { do { if (((longlong)puVar18 < 0) || ((int)param_2[6] <= (int)puVar16)) { /* WARNING: Subroutine does not return */ FUN_14016d6e0(); } if (*(int *)(param_2[5] + (longlong)puVar18 * 4) == 0) { bVar3 = true; } else { bVar4 = true; } uVar19 = (int)puVar16 + 1; puVar16 = (undefined4 *)(ulonglong)uVar19; puVar18 = (undefined4 *)((longlong)puVar18 + 1); } while ((int)uVar19 < (int)param_2[6]); if ((bVar3) && (bVar4)) { FUN_14016d300(local_258, L"Cannot assign non-zero UDP port number with zero UDP port number! All non-zero or all zero must be guaranteed!" ); /* WARNING: Subroutine does not return */ _CxxThrowException(local_258,(ThrowInfo *)&DAT_1403417f8); } } iVar8 = *(int *)((longlong)param_2 + 0x5c); if (((iVar8 != 0x80) && (iVar8 != 0xc0)) && (iVar8 != 0x100)) { FUN_14016d300(local_1c8,L"Invalid key length!"); /* WARNING: Subroutine does not return */ _CxxThrowException(local_1c8,(ThrowInfo *)&DAT_1403417f8); } local_3d8 = Proud::CFastArray::vftable; if (DAT_140344e08 != 5) { FUN_14019a8d0(); } local_3d0 = (longlong *)param_2[4]; local_3b4 = *(undefined4 *)((longlong)param_2 + 0x3c); local_3c8 = (undefined4 *)0x0; local_3c0 = 0; local_3b8 = 0; iVar8 = (int)param_2[6]; lVar26 = (longlong)iVar8; if (iVar8 < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } FUN_14015e670(&local_3d8,iVar8); puVar18 = local_3c8; iVar6 = (int)local_3c0; puVar16 = local_3c8; if ((int)local_3c0 == 0) { puVar16 = puVar17; } puVar21 = puVar17; if ((int)param_2[6] != 0) { puVar21 = (undefined4 *)param_2[5]; } if (0 < iVar8) { lVar23 = (longlong)puVar21 - (longlong)puVar16; do { *puVar16 = *(undefined4 *)(lVar23 + (longlong)puVar16); puVar16 = puVar16 + 1; lVar26 = lVar26 + -1; } while (lVar26 != 0); } puVar16 = local_3c8; if ((int)local_3c0 == 0) { puVar16 = puVar17; } FUN_140185270(puVar16,local_3c0 & 0xffffffff,0); puVar16 = puVar17; puVar21 = puVar17; if (0 < iVar6 + -1) { do { if (((longlong)puVar16 < 0) || (iVar6 <= (int)puVar21)) { /* WARNING: Subroutine does not return */ FUN_14016d6e0(); } if ((longlong)puVar16 + 1 < 0) { LAB_14018a80c: /* WARNING: Subroutine does not return */ FUN_14016d6e0(); } uVar19 = (int)puVar21 + 1; puVar21 = (undefined4 *)(ulonglong)uVar19; if (iVar6 <= (int)uVar19) goto LAB_14018a80c; if ((puVar18[(longlong)puVar16] == puVar18[(longlong)puVar16 + 1]) && (puVar18[(longlong)puVar16] != 0)) { FUN_14016d300(local_2a0,L"Cannot add duplicated UDP port number!"); /* WARNING: Subroutine does not return */ _CxxThrowException(local_2a0,(ThrowInfo *)&DAT_1403417f8); } puVar16 = (undefined4 *)((longlong)puVar16 + 1); } while ((int)uVar19 < iVar6 + -1); } local_430 = Proud::CFastArray,0>::vftable; local_428 = (longlong *)0x0; local_420 = 0; local_418 = 0; local_410 = 0; FUN_140171180(&local_430); if ((1 < (int)local_418) && (((puVar20 = (undefined *)param_2[1], puVar20 == (undefined *)0x0 || (puVar20 == PTR_DAT_1403440a0)) || (*(int *)(puVar20 + -8) == 0)))) { FUN_14016d8c0(); local_458 = (uint *)PTR_DAT_1403440a0; uVar19 = FUN_14016d740( L"Server has multiple network devices, however, no device is specified for listening. Is it your intention?" ); puVar16 = puVar17; if ((local_458 != (uint *)0x0) && (puVar16 = (undefined4 *)0x0, local_458 != (uint *)PTR_DAT_1403440a0)) { puVar16 = (undefined4 *)(ulonglong)local_458[-2]; } uVar9 = uVar19; if ((((int)uVar19 <= (int)puVar16) && (uVar9 = uVar11, local_458 != (uint *)0x0)) && (local_458 != (uint *)PTR_DAT_1403440a0)) { uVar9 = local_458[-2]; } uVar25 = 1; if (1 < (int)uVar9) { uVar25 = uVar9; } uVar10 = 0; uVar9 = uVar10; if ((local_458 != (uint *)0x0) && (local_458 != (uint *)PTR_DAT_1403440a0)) { uVar9 = local_458[-2]; } if ((int)uVar9 < (int)uVar25) { if (local_458 == (uint *)0x0) { local_458 = (uint *)PTR_DAT_1403440a0; } if ((int)uVar25 < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } if (uVar25 == 0) { FUN_14004eb70(&local_458); } else { uVar9 = uVar10; if ((local_458 != (uint *)0x0) && (local_458 != (uint *)PTR_DAT_1403440a0)) { uVar9 = local_458[-2]; } if (uVar25 != uVar9) { puVar13 = (uint *)FUN_14016d940((longlong)(int)uVar25 * 2 + 10); if (puVar13 != (uint *)0x0) { *puVar13 = 0; puVar13[1] = 1; } *puVar13 = uVar25; uVar9 = uVar10; if ((local_458 != (uint *)0x0) && (local_458 != (uint *)PTR_DAT_1403440a0)) { uVar9 = local_458[-2]; } puVar24 = (uint *)PTR_DAT_1403440a0; if ((int)uVar25 < (int)uVar9) { LAB_14018a971: if (local_458 != (uint *)0x0) { puVar24 = local_458; } } else { uVar25 = uVar11; if (local_458 != (uint *)0x0) { if (local_458 != (uint *)PTR_DAT_1403440a0) { uVar25 = local_458[-2]; } goto LAB_14018a971; } } FUN_14016d770(puVar13 + 2,puVar24,uVar25); FUN_14004eb70(&local_458); local_458 = puVar13 + 2; } } } FUN_14004e850(&local_458); puVar13 = local_458; if (local_458 == (uint *)0x0) { puVar13 = (uint *)PTR_DAT_1403440a0; } FUN_14016d770(puVar13, L"Server has multiple network devices, however, no device is specified for listening. Is it your intention?" ,uVar19); puVar13 = local_458; if (local_458 == (uint *)0x0) { puVar13 = (uint *)PTR_DAT_1403440a0; } uVar19 = FUN_14016d740(puVar13); uVar11 = 0; if (0 < (int)uVar19) { uVar11 = uVar19; } uVar19 = uVar10; if ((local_458 != (uint *)0x0) && (local_458 != (uint *)PTR_DAT_1403440a0)) { uVar19 = local_458[-2]; } if (((int)uVar11 < (int)uVar19) || (uVar11 = uVar10, local_458 == (uint *)0x0)) { LAB_14018aa14: if (((local_458 != (uint *)PTR_DAT_1403440a0) && (local_458 != (uint *)0x0)) && (local_458 + -2 != (uint *)0x0)) { local_458[-2] = uVar11; *(undefined2 *)((longlong)local_458 + (longlong)(int)uVar11 * 2) = 0; } } else if (local_458 != (uint *)PTR_DAT_1403440a0) { uVar11 = local_458[-2]; goto LAB_14018aa14; } local_348 = 0; local_340 = 0; local_338 = 0; local_330 = 0; local_350 = Proud::ByteArray::vftable; local_468 = &local_350; uVar14 = FUN_140198f80(&local_360,1,0,&local_458); FUN_140186b80(param_1 + -0xa8,uVar14); FUN_14019a9e0(&local_350); puVar13 = local_458; if (((local_458 != (uint *)0x0) && (local_458 != (uint *)PTR_DAT_1403440a0)) && (puVar24 = local_458 + -2, puVar24 != (uint *)0x0)) { uVar14 = FUN_14016d8c0(); local_2f8 = uVar14; FUN_14016db50(uVar14); local_2f0 = 1; puVar13 = puVar13 + -1; *puVar13 = *puVar13 - 1; if (*puVar13 == 0) { FUN_14016d970(puVar24); } FUN_14016dbe0(uVar14); local_2f0 = 0; } local_458 = (uint *)PTR_DAT_1403440a0; FUN_14016d8c0(); local_438 = (undefined4 *)PTR_DAT_1403440a0; plVar15 = (longlong *)FUN_14016f6b0(&local_408); puVar20 = (undefined *)*plVar15; if ((undefined *)*plVar15 == (undefined *)0x0) { puVar20 = PTR_DAT_1403440a0; } FUN_14004c020(&local_438,L"No NIC binding though multiple NIC detected##Process=%s",puVar20); if (((local_408 != (undefined *)0x0) && (local_408 != PTR_DAT_1403440a0)) && (local_408 + -8 != (undefined *)0x0)) { uVar14 = FUN_14016d8c0(); local_318 = uVar14; FUN_14016db50(uVar14); local_310 = 1; piVar1 = (int *)(local_408 + -4); *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_14016d970(local_408 + -8); } FUN_14016dbe0(uVar14); local_310 = 0; } local_408 = PTR_DAT_1403440a0; FUN_14016d8c0(); puVar16 = local_438; local_448 = (undefined4 *)PTR_DAT_1403440a0; if (PTR_DAT_1403440a0 == (undefined *)0x0) { local_448 = puVar17; } if (local_438 != (undefined4 *)PTR_DAT_1403440a0) { uVar14 = FUN_14016d8c0(); local_308 = uVar14; FUN_14016db50(uVar14); local_300 = 1; FUN_14004eb70(&local_448); local_448 = puVar16; if (((puVar16 != (undefined4 *)PTR_DAT_1403440a0) && (puVar16 != (undefined4 *)0x0)) && (puVar16 != (undefined4 *)0x8)) { puVar16[-1] = puVar16[-1] + 1; } FUN_14016dbe0(uVar14); local_300 = 0; } FUN_1401be230(&local_448); if (((puVar16 != (undefined4 *)0x0) && (puVar16 != (undefined4 *)PTR_DAT_1403440a0)) && (puVar16 + -2 != (undefined4 *)0x0)) { uVar14 = FUN_14016d8c0(); local_328 = uVar14; FUN_14016db50(uVar14); local_320 = 1; piVar1 = puVar16 + -1; *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_14016d970(puVar16 + -2); } FUN_14016dbe0(uVar14); local_320 = 0; } local_438 = (undefined4 *)PTR_DAT_1403440a0; } dVar27 = (double)param_2[0x16]; if ((double)param_2[0x16] <= 0.0) { dVar27 = DAT_140344dd0; } *(double *)(param_1 + 0x778) = dVar27; *(undefined1 *)(param_1 + 0x1a4) = *(undefined1 *)((longlong)param_2 + 0x65); *(undefined1 *)(param_1 + 0x1a5) = *(undefined1 *)((longlong)param_2 + 100); *(undefined1 *)(param_1 + 0x1a6) = *(undefined1 *)((longlong)param_2 + 0x67); *(char *)(param_1 + 0x198) = (char)param_2[0xf]; *(char *)(param_1 + 0x1c0) = (char)param_2[0xd]; iVar8 = *(int *)((longlong)param_2 + 0x5c); *(int *)(param_1 + 0x19c) = iVar8; if (((iVar8 != 0x80) && (iVar8 != 0xc0)) && (iVar8 != 0x100)) { local_358 = "CStartServerParameter::m_encryptedMessageKeyLength Incorrect key length, only 128,192,256"; std::exception::exception(local_2d0,&local_358); /* WARNING: Subroutine does not return */ _CxxThrowException(local_2d0,(ThrowInfo *)&DAT_1403416b0); } iVar8 = (int)param_2[0xc]; *(int *)(param_1 + 0x1a0) = iVar8; if ((((iVar8 != 0) && (iVar8 != 0x200)) && (iVar8 != 0x400)) && (iVar8 != 0x800)) { local_440 = "CStartServerParameter::m_fastEncryptedMessageKeyLength Incorrect key lengt, MaxSize is 2048, MinSize is 8" ; std::exception::exception(local_2b8,&local_440); /* WARNING: Subroutine does not return */ _CxxThrowException(local_2b8,(ThrowInfo *)&DAT_1403416b0); } *(int *)(param_1 + 0x1a8) = (int)param_2[0x10]; *(undefined1 *)(param_1 + 0x1ac) = *(undefined1 *)((longlong)param_2 + 0x84); *(undefined1 *)(param_1 + 0x1ad) = *(undefined1 *)((longlong)param_2 + 0x85); FUN_1401c15d0(param_1 + 0xba0,param_1 + 0xba8); local_3a8 = 0; local_3a0 = (undefined4 *)0x0; local_398 = 0; local_390 = 0; local_3b0 = Proud::ByteArray::vftable; FUN_1401c14a0(&local_3b0,*(undefined4 *)(param_1 + 0x19c)); puVar16 = local_3a0; if ((int)local_398 == 0) { puVar16 = puVar17; } FUN_1401af310(param_1 + 0x798,puVar16,*(uint *)(param_1 + 0x19c) >> 3,0x10); local_3f8 = 0; local_3f0 = (undefined4 *)0x0; local_3e8 = 0; local_3e0 = 0; local_400 = Proud::ByteArray::vftable; FUN_1401c14a0(&local_400,*(undefined4 *)(param_1 + 0x1a0)); puVar16 = local_3f0; if ((int)local_3e8 == 0) { puVar16 = puVar17; } FUN_1401c0b90(param_1 + 0xb68,puVar16,*(uint *)(param_1 + 0x1a0) >> 3); *(undefined4 *)(param_1 + 0xb98) = 0; local_440 = operator_new(0xa8); puVar16 = puVar17; if (local_440 != (char *)0x0) { puVar16 = (undefined4 *)(param_1 + -0x40); if (param_1 == 0xa8) { puVar16 = puVar17; } puVar16 = (undefined4 *)FUN_1401a2fe0(local_440,puVar16,1); } *(undefined4 **)(param_1 + 0x6e0) = puVar16; local_440 = operator_new(0xa8); puVar16 = puVar17; if (local_440 != (char *)0x0) { puVar16 = (undefined4 *)(param_1 + -0x40); if (param_1 == 0xa8) { puVar16 = puVar17; } puVar16 = (undefined4 *)FUN_1401a2fe0(local_440,puVar16,1); } *(undefined4 **)(param_1 + 0x6e8) = puVar16; FUN_1401a1e20(param_1 + 0x6b8); uVar14 = FUN_1401a1eb0(param_1 + 0x6b8); *(undefined8 *)(param_1 + 0x158) = uVar14; *(undefined8 *)(param_1 + 0x118) = 0; puVar16 = (undefined4 *)FUN_140199840(local_180); *(undefined4 *)(param_1 + 0x1c4) = *puVar16; *(undefined4 *)(param_1 + 0x1c8) = puVar16[1]; *(undefined4 *)(param_1 + 0x1cc) = puVar16[2]; *(undefined4 *)(param_1 + 0x1d0) = puVar16[3]; *(int *)(param_1 + 0x179c) = (int)param_2[8]; *(undefined4 *)(param_1 + 0x340) = *(undefined4 *)((longlong)param_2 + 0x44); *(int *)(param_1 + 0x344) = (int)param_2[9]; *(undefined4 *)(param_1 + 0x348) = *(undefined4 *)((longlong)param_2 + 0x4c); *(int *)(param_1 + 0x34c) = (int)param_2[10]; puVar20 = (undefined *)*param_2; if ((undefined *)*param_2 == (undefined *)0x0) { puVar20 = PTR_DAT_1403440a0; } local_168 = local_160; FUN_14016ac90(&local_168,puVar20,3); FUN_14016bfb0(param_1 + 0x168,local_168); if (local_168 != local_160) { free(local_168); } puVar20 = (undefined *)param_2[1]; if ((undefined *)param_2[1] == (undefined *)0x0) { puVar20 = PTR_DAT_1403440a0; } local_d8 = local_d0; FUN_14016ac90(&local_d8,puVar20,3); FUN_14016bfb0(param_1 + 0x170,local_d8); if (local_d8 != local_d0) { free(local_d8); } *(undefined4 *)(param_1 + 0x1b0) = *(undefined4 *)((longlong)param_2 + 0x6c); *(longlong *)(param_1 + 0x1b8) = param_2[0xe]; local_388 = Proud::CFastArray::vftable; if (DAT_140344e08 != 5) { FUN_14019a8d0(); } local_380 = param_2[4]; local_364 = *(undefined4 *)((longlong)param_2 + 0x3c); local_378 = (undefined4 *)0x0; local_370 = 0; local_368 = 0; iVar8 = (int)param_2[6]; lVar26 = (longlong)iVar8; if (iVar8 < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } FUN_14015e670(&local_388,iVar8); pppuVar5 = local_450; puVar16 = local_378; if ((int)local_370 == 0) { puVar16 = puVar17; } puVar21 = puVar17; if ((int)param_2[6] != 0) { puVar21 = (undefined4 *)param_2[5]; } if (0 < iVar8) { lVar23 = (longlong)puVar21 - (longlong)puVar16; do { *puVar16 = *(undefined4 *)(lVar23 + (longlong)puVar16); puVar16 = puVar16 + 1; lVar26 = lVar26 + -1; } while (lVar26 != 0); } local_468 = local_450; cVar7 = FUN_140188240(param_1 + -0xa8,(int)param_2[8],&local_388,param_2 + 0x11); if ((cVar7 != '\0') && (cVar7 = FUN_1401878c0(param_1 + -0xa8,(int)param_2[2],pppuVar5), cVar7 != '\0')) { puVar16 = puVar17; if (*(int *)((longlong)param_2 + 0x7c) == 0) { local_450 = operator_new(0x10); if (local_450 != (void *)0x0) { puVar16 = (undefined4 *)FUN_1401bfde0(local_450); } } else { local_450 = operator_new(0x90); if (local_450 != (void *)0x0) { puVar16 = (undefined4 *)FUN_1401c0420(local_450,DAT_140344dd8); } } *(undefined4 **)(param_1 + 0x3d0) = puVar16; *(undefined4 *)(param_1 + 0x175c) = 0; FUN_14004c050(param_1 + 0x1760,&DAT_1402a4aa0); *(undefined8 *)(param_1 + 0x1768) = 0; *(undefined4 *)(param_1 + 0x1798) = 0; uVar11 = *(uint *)(param_2 + 0xb); iVar8 = FUN_14016eed0(); if (iVar8 <= (int)uVar11) { uVar11 = FUN_14016eed0(); } puVar16 = puVar17; if (0 < (int)uVar11) { puVar16 = (undefined4 *)(ulonglong)uVar11; } *(int *)(param_2 + 0xb) = (int)puVar16; if ((int)puVar16 == 0) { uVar12 = FUN_14016eed0(); *(undefined4 *)(param_2 + 0xb) = uVar12; } local_360 = operator_new(0x280); if (local_360 != (void *)0x0) { puVar17 = (undefined4 *)FUN_1401a8bc0(local_360,param_1 + -0xa8); } *(undefined4 **)(param_1 + 0x338) = puVar17; FUN_1401acc80(puVar17,*(undefined4 *)((longlong)param_2 + 0x54),(int)param_2[0xb]); Sleep(100); FUN_14019a9e0(&local_400); FUN_14019a9e0(&local_3b0); local_430 = Proud::CFastArray,0>::vftable; if (0 < (int)local_418) { uVar22 = local_418 & 0xffffffff; lVar26 = local_420; do { FUN_14004f5a0(lVar26); lVar26 = lVar26 + 8; uVar22 = uVar22 - 1; } while (uVar22 != 0); } if (local_420 != 0) { if (local_428 == (longlong *)0x0) { FUN_14016d970(); } else { (**(code **)(*local_428 + 0x18))(local_428,local_420); } } if (puVar18 != (undefined4 *)0x0) { if (local_3d0 == (longlong *)0x0) { FUN_14016d970(puVar18); } else { (**(code **)(*local_3d0 + 0x18))(local_3d0,puVar18); } } FUN_14016dbe0(param_1 + 0xb8); return 1; } FUN_1401a1e70(param_1 + 0x6b8); pvVar2 = *(void **)(param_1 + 0x6e0); if (pvVar2 != (void *)0x0) { FUN_1401a31c0(pvVar2); operator_delete(pvVar2); } *(undefined8 *)(param_1 + 0x6e0) = 0; pvVar2 = *(void **)(param_1 + 0x6e8); if (pvVar2 != (void *)0x0) { FUN_1401a31c0(pvVar2); operator_delete(pvVar2); } *(undefined8 *)(param_1 + 0x6e8) = 0; *(undefined4 *)(param_1 + 0x1c4) = 0; *(undefined4 *)(param_1 + 0x1c8) = 0; *(undefined4 *)(param_1 + 0x1cc) = 0; *(undefined4 *)(param_1 + 0x1d0) = 0; FUN_14019a9e0(&local_400); FUN_14019a9e0(&local_3b0); local_430 = Proud::CFastArray,0>::vftable; if (0 < (int)local_418) { uVar22 = local_418 & 0xffffffff; lVar26 = local_420; do { FUN_14004f5a0(lVar26); lVar26 = lVar26 + 8; uVar22 = uVar22 - 1; } while (uVar22 != 0); } if (local_420 != 0) { if (local_428 == (longlong *)0x0) { FUN_14016d970(); } else { (**(code **)(*local_428 + 0x18))(local_428,local_420); } } if (puVar18 != (undefined4 *)0x0) { if (local_3d0 == (longlong *)0x0) { FUN_14016d970(puVar18); } else { (**(code **)(*local_3d0 + 0x18))(local_3d0,puVar18); } } LAB_14018b3c1: FUN_14016dbe0(param_1 + 0xb8); return 0; }