777 lines
29 KiB
C
777 lines
29 KiB
C
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
|
|
* Ghidra 12.1.2 decompiler output for 0x1400b4400 FUN_1400b4400
|
|
* Pseudocode, not original source. */
|
|
|
|
/* WARNING: Function: __chkstk replaced with injection: alloca_probe */
|
|
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
|
|
/* WARNING: Removing unreachable block (ram,0x0001400b4b40) */
|
|
/* WARNING: Removing unreachable block (ram,0x0001400b4b4c) */
|
|
/* WARNING: Removing unreachable block (ram,0x0001400b4b44) */
|
|
/* WARNING: Removing unreachable block (ram,0x0001400b4b52) */
|
|
/* WARNING: Removing unreachable block (ram,0x0001400b49d7) */
|
|
/* WARNING: Removing unreachable block (ram,0x0001400b49de) */
|
|
/* WARNING: Removing unreachable block (ram,0x0001400b49f6) */
|
|
/* WARNING: Removing unreachable block (ram,0x0001400b4a02) */
|
|
/* WARNING: Removing unreachable block (ram,0x0001400b49fa) */
|
|
/* WARNING: Removing unreachable block (ram,0x0001400b4a08) */
|
|
/* WARNING: Removing unreachable block (ram,0x0001400b4a24) */
|
|
/* WARNING: Removing unreachable block (ram,0x0001400b4920) */
|
|
/* WARNING: Removing unreachable block (ram,0x0001400b4927) */
|
|
/* WARNING: Removing unreachable block (ram,0x0001400b4940) */
|
|
/* WARNING: Removing unreachable block (ram,0x0001400b494c) */
|
|
/* WARNING: Removing unreachable block (ram,0x0001400b4944) */
|
|
/* WARNING: Removing unreachable block (ram,0x0001400b4952) */
|
|
/* WARNING: Removing unreachable block (ram,0x0001400b496e) */
|
|
|
|
ulonglong FUN_1400b4400(longlong *param_1,TypeDescriptor *param_2,TypeDescriptor *param_3,
|
|
TypeDescriptor *param_4,uint param_5)
|
|
|
|
{
|
|
undefined *puVar1;
|
|
undefined8 uVar2;
|
|
undefined4 uVar3;
|
|
uint uVar4;
|
|
int iVar5;
|
|
uint uVar6;
|
|
uint uVar7;
|
|
TypeDescriptor *pTVar8;
|
|
void *pvVar9;
|
|
void *pvVar10;
|
|
TypeDescriptor *pTVar11;
|
|
TypeDescriptor *extraout_RAX;
|
|
uint *puVar12;
|
|
longlong *plVar13;
|
|
int *piVar14;
|
|
longlong lVar15;
|
|
TypeDescriptor *pTVar16;
|
|
undefined8 *puVar17;
|
|
TypeDescriptor *pTVar18;
|
|
undefined8 uVar19;
|
|
undefined1 *puVar20;
|
|
undefined4 *puVar21;
|
|
uint *puVar22;
|
|
int iVar23;
|
|
TypeDescriptor *pTVar24;
|
|
uint uVar25;
|
|
ulonglong uVar26;
|
|
TypeDescriptor *pTVar27;
|
|
uint uVar28;
|
|
TypeDescriptor *pTVar29;
|
|
SIZE_T SVar30;
|
|
undefined4 *puVar31;
|
|
longlong *plVar32;
|
|
TypeDescriptor *pTVar33;
|
|
TypeDescriptor *pTVar34;
|
|
undefined1 auStackY_2c38 [32];
|
|
undefined8 local_2c08;
|
|
undefined1 local_2c00 [16];
|
|
TypeDescriptor *local_2bf0;
|
|
ulonglong local_2be8;
|
|
undefined8 local_2be0;
|
|
TypeDescriptor *local_2bd8;
|
|
uint uStack_2bd0;
|
|
undefined4 uStack_2bcc;
|
|
undefined4 local_2bc8;
|
|
undefined4 local_2bc4;
|
|
TypeDescriptor local_2bc0;
|
|
uint local_2bb0;
|
|
int local_2bac;
|
|
TypeDescriptor *local_2ba0;
|
|
TypeDescriptor local_2b98;
|
|
undefined1 local_2b88;
|
|
undefined4 local_2b84;
|
|
undefined1 local_2b80;
|
|
undefined1 local_2b7f;
|
|
void *local_2b78;
|
|
undefined8 local_2b70;
|
|
longlong *local_2b68;
|
|
undefined **local_2b60;
|
|
longlong *local_2b58;
|
|
TypeDescriptor *local_2b50;
|
|
uint local_2b48;
|
|
undefined8 local_2b44;
|
|
undefined4 local_2b3c;
|
|
TypeDescriptor *local_2b38;
|
|
int *local_2b30;
|
|
undefined4 local_2b28;
|
|
undefined4 uStack_2b24;
|
|
int *local_2b20;
|
|
char local_2b18;
|
|
TypeDescriptor *local_2b10;
|
|
longlong *local_2b08;
|
|
TypeDescriptor *local_2b00;
|
|
void *local_2af0;
|
|
undefined8 local_2ae0;
|
|
exception local_2ad8 [72];
|
|
exception local_2a90 [72];
|
|
exception local_2a48 [80];
|
|
undefined4 local_29f8 [2];
|
|
TypeDescriptor local_29f0;
|
|
undefined4 local_29e0;
|
|
int local_29dc;
|
|
undefined1 local_29d0 [136];
|
|
TypeDescriptor local_2948;
|
|
ulonglong local_2938;
|
|
undefined8 local_2930;
|
|
undefined8 auStack_2928 [100];
|
|
TypeDescriptor local_2608 [200];
|
|
TypeDescriptor *local_1988;
|
|
undefined4 local_1980;
|
|
int local_197c;
|
|
undefined1 local_1978 [3200];
|
|
undefined1 *local_cf8;
|
|
undefined4 local_cf0;
|
|
int local_cec;
|
|
TypeDescriptor local_ce8 [200];
|
|
TypeDescriptor *local_68;
|
|
undefined4 local_60;
|
|
undefined4 local_5c;
|
|
ulonglong local_58;
|
|
|
|
local_2ae0 = 0xfffffffffffffffe;
|
|
local_58 = DAT_1401ac5a0 ^ (ulonglong)auStackY_2c38;
|
|
pTVar16 = (TypeDescriptor *)0x0;
|
|
local_2b78 = (void *)0x0;
|
|
pTVar18 = param_2;
|
|
pTVar29 = param_3;
|
|
pTVar33 = param_4;
|
|
local_2ba0 = param_2;
|
|
local_2b68 = param_1;
|
|
local_2b38 = param_3;
|
|
local_2b10 = param_2;
|
|
local_2b08 = param_1;
|
|
local_2b20 = (int *)(**(code **)(*param_1 + 0x58))();
|
|
FUN_14006b350(local_2b20);
|
|
puVar1 = PTR_u_Cannot_send_messages_unless_conn_1401ad1e0;
|
|
local_2b18 = '\x01';
|
|
plVar32 = (longlong *)param_1[699];
|
|
uVar28 = 0;
|
|
if (((plVar32 != (longlong *)0x0) && (*plVar32 != 0)) && ((int)param_1[0x2af] != 0)) {
|
|
local_2948.pVFTable = (void *)0x0;
|
|
local_2930 = 0;
|
|
local_2948.spare = (void *)0x0;
|
|
local_2938 = 100;
|
|
if (0 < (int)param_5) {
|
|
uVar26 = (ulonglong)param_5;
|
|
do {
|
|
uVar4 = *(uint *)¶m_4->pVFTable;
|
|
pTVar18 = (TypeDescriptor *)(ulonglong)uVar4;
|
|
if (uVar4 != 0) {
|
|
pTVar29 = &local_2948;
|
|
FUN_1400b3500(param_1,uVar4,(longlong *)pTVar29,pTVar33);
|
|
}
|
|
param_4 = (TypeDescriptor *)((longlong)¶m_4->pVFTable + 4);
|
|
uVar26 = uVar26 - 1;
|
|
} while (uVar26 != 0);
|
|
}
|
|
FUN_1400a2b80((longlong *)&local_2948);
|
|
local_2b58 = (longlong *)0x0;
|
|
local_2b3c = 0;
|
|
local_2b50 = (TypeDescriptor *)0x0;
|
|
local_2b48 = 0;
|
|
local_2b44 = 0;
|
|
local_2b60 = Proud::CNetClientImpl::BypassDestList_C::vftable;
|
|
local_2b70 = (TypeDescriptor *)((ulonglong)local_2b70._4_4_ << 0x20);
|
|
pTVar11 = pTVar16;
|
|
pTVar24 = pTVar16;
|
|
pTVar34 = pTVar16;
|
|
while( true ) {
|
|
iVar5 = (int)pTVar11;
|
|
local_2c08 = (uint *)CONCAT44(local_2c08._4_4_,iVar5);
|
|
lVar15 = (longlong)iVar5;
|
|
iVar23 = (int)pTVar24;
|
|
if ((longlong)local_2948.spare <= lVar15) break;
|
|
if (iVar5 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
if (local_2938 < 0x65) {
|
|
puVar17 = auStack_2928 + lVar15;
|
|
}
|
|
else {
|
|
puVar17 = (undefined8 *)((longlong)local_2948.pVFTable + lVar15 * 8);
|
|
}
|
|
pTVar11 = (TypeDescriptor *)*puVar17;
|
|
pTVar8 = (TypeDescriptor *)(param_1 + 0xc);
|
|
if (param_1 == (longlong *)0x0) {
|
|
pTVar8 = pTVar16;
|
|
}
|
|
if ((pTVar11 == pTVar8) && (*(char *)((longlong)¶m_3[2].spare + 5) != '\0')) {
|
|
FUN_1400bca00((undefined4 *)local_2c00);
|
|
pTVar18 = (TypeDescriptor *)local_2c00;
|
|
FUN_1400de810((longlong)local_2ba0,(int *)pTVar18,(SIZE_T)pTVar29,pTVar33);
|
|
pvVar9 = (void *)param_1[0x2a8];
|
|
if ((longlong *)local_2b68[0x2a6] == (longlong *)0x0) {
|
|
pTVar8 = (TypeDescriptor *)FUN_14006cbf0(0x38);
|
|
}
|
|
else {
|
|
pTVar18 = (TypeDescriptor *)0x38;
|
|
pTVar8 = (TypeDescriptor *)(**(code **)(*(longlong *)local_2b68[0x2a6] + 8))();
|
|
}
|
|
local_2b00 = pTVar8;
|
|
if (pTVar8 != (TypeDescriptor *)0x0) {
|
|
pTVar18 = (TypeDescriptor *)local_2c00;
|
|
local_2bd8 = pTVar8;
|
|
FUN_1400bca30((undefined4 *)(pTVar8 + 1),(undefined4 *)pTVar18);
|
|
}
|
|
param_1 = local_2b68;
|
|
pTVar8->spare = pvVar9;
|
|
pTVar8->pVFTable = (void *)0x0;
|
|
local_2b68[0x2a9] = local_2b68[0x2a9] + 1;
|
|
if ((longlong *)local_2b68[0x2a8] == (longlong *)0x0) {
|
|
local_2b68[0x2a7] = (longlong)pTVar8;
|
|
}
|
|
else {
|
|
*(longlong *)local_2b68[0x2a8] = (longlong)pTVar8;
|
|
}
|
|
local_2b68[0x2a8] = (longlong)pTVar8;
|
|
local_2bd8 = (TypeDescriptor *)(local_2c00 + 8);
|
|
FUN_1400d1800((longlong *)(local_2c00 + 8));
|
|
if ((local_2bf0 != (TypeDescriptor *)0x0) && ((longlong)local_2be8 < 0)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
}
|
|
param_2 = local_2ba0;
|
|
if (pTVar11 == (TypeDescriptor *)(param_1 + 0x2aa)) {
|
|
local_2b98.pVFTable._0_4_ = *(undefined4 *)¶m_3[2].pVFTable;
|
|
local_2b98.spare = param_3[1].spare;
|
|
local_2b88 = *(undefined1 *)((longlong)¶m_3[2].spare + 5);
|
|
local_2b84 = *(undefined4 *)¶m_3[3].pVFTable;
|
|
local_2b80 = *(undefined1 *)((longlong)¶m_3[4].pVFTable + 1);
|
|
local_2b7f = *(undefined1 *)¶m_3[4].pVFTable;
|
|
local_2bd8 = local_ce8;
|
|
local_5c = 200;
|
|
local_60 = 0;
|
|
local_68 = local_ce8;
|
|
FUN_1400a20e0((longlong *)(local_2ba0 + 200),&local_68,pTVar29,pTVar33);
|
|
pTVar33 = local_ce8;
|
|
pTVar29 = (TypeDescriptor *)(ulonglong)*(uint *)¶m_3->pVFTable;
|
|
pTVar18 = (TypeDescriptor *)0x1;
|
|
FUN_1400a24b0((longlong)param_1,1,*(uint *)¶m_3->pVFTable,(SIZE_T *)pTVar33,
|
|
(SIZE_T *)&local_2b98);
|
|
}
|
|
else if (pTVar11 != (TypeDescriptor *)0x0) {
|
|
pTVar33 = &Proud::CRemotePeer_C::RTTI_Type_Descriptor;
|
|
pTVar29 = &Proud::ISendDest_C::RTTI_Type_Descriptor;
|
|
pTVar18 = (TypeDescriptor *)0x0;
|
|
pvVar9 = (void *)__RTDynamicCast(pTVar11);
|
|
param_2 = local_2ba0;
|
|
local_2b78 = pvVar9;
|
|
if (pvVar9 != (void *)0x0) {
|
|
if ((((*(char *)((longlong)pvVar9 + 0x608) != '\0') ||
|
|
(*(int *)¶m_3[1].pVFTable <= (int)local_2b70)) ||
|
|
(*(double *)((longlong)pvVar9 + 0x50) <= 0.0)) ||
|
|
((*(double *)((longlong)pvVar9 + 0x60) <= 0.0 ||
|
|
((*(double *)((longlong)pvVar9 + 0x60) + (double)param_1[0x9f]) /
|
|
*(double *)((longlong)pvVar9 + 0x50) < (double)param_3[3].spare)))) {
|
|
if (*(int *)¶m_3->pVFTable == 1) {
|
|
FUN_1400f5f50((undefined8 *)(*(longlong *)((longlong)pvVar9 + 0x640) + 8),
|
|
(longlong *)CONCAT71((int7)((ulonglong)pTVar18 >> 8),1),
|
|
(longlong *)pTVar29,pTVar33);
|
|
uVar3 = FUN_1400f48b0((longlong)pvVar9 + 0x638);
|
|
local_2af0 = (void *)CONCAT44(local_2af0._4_4_,uVar3);
|
|
if (iVar23 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
pTVar18 = (TypeDescriptor *)(ulonglong)(iVar23 + 1U);
|
|
FUN_1400a1b60((longlong)&local_2b60,iVar23 + 1U,pTVar29,(longlong)pTVar33);
|
|
pTVar11 = local_2b50;
|
|
if (local_2b48 == 0) {
|
|
pTVar11 = pTVar16;
|
|
}
|
|
pTVar11[iVar23].pVFTable = pvVar9;
|
|
pvVar10 = local_2af0;
|
|
LAB_1400b4a55:
|
|
pTVar24 = (TypeDescriptor *)(ulonglong)local_2b48;
|
|
pTVar11[iVar23].spare = pvVar10;
|
|
pTVar34 = local_2b50;
|
|
}
|
|
else if (*(char *)((longlong)¶m_3[2].spare + 6) != '\0') {
|
|
local_2b28 = 0;
|
|
if (iVar23 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
pTVar18 = (TypeDescriptor *)(ulonglong)(iVar23 + 1U);
|
|
FUN_1400a1b60((longlong)&local_2b60,iVar23 + 1U,pTVar29,(longlong)pTVar33);
|
|
pTVar11 = local_2b50;
|
|
if (local_2b48 == 0) {
|
|
pTVar11 = pTVar16;
|
|
}
|
|
pTVar11[iVar23].pVFTable = pvVar9;
|
|
pvVar10 = (void *)CONCAT44(uStack_2b24,local_2b28);
|
|
goto LAB_1400b4a55;
|
|
}
|
|
if (*(char *)((longlong)¶m_3[2].spare + 4) != '\0') {
|
|
*(undefined1 *)((longlong)pvVar9 + 0x21) = 1;
|
|
}
|
|
}
|
|
else {
|
|
local_2b70 = (TypeDescriptor *)CONCAT44(local_2b70._4_4_,(int)local_2b70 + 1);
|
|
if (*(char *)((longlong)¶m_3[4].pVFTable + 1) == '\0') {
|
|
*(int *)((longlong)pvVar9 + 0x40) = *(int *)((longlong)pvVar9 + 0x40) + 1;
|
|
}
|
|
pTVar18 = local_2ba0;
|
|
if (*(int *)¶m_3->pVFTable == 1) {
|
|
FUN_1400f4910((longlong)pvVar9 + 0x638,(longlong)local_2ba0,pTVar29,pTVar33);
|
|
}
|
|
else {
|
|
local_2b98.pVFTable._0_4_ = *(undefined4 *)¶m_3[2].pVFTable;
|
|
local_2b98.spare = param_3[1].spare;
|
|
local_2b88 = *(undefined1 *)((longlong)¶m_3[2].spare + 5);
|
|
local_2b84 = *(undefined4 *)¶m_3[3].pVFTable;
|
|
local_2b80 = *(undefined1 *)((longlong)¶m_3[4].pVFTable + 1);
|
|
local_2b7f = *(undefined1 *)¶m_3[4].pVFTable;
|
|
pTVar29 = &local_2b98;
|
|
FUN_1400eff60((longlong *)((longlong)pvVar9 + 0x668),(longlong)local_2ba0,
|
|
&pTVar29->pVFTable);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
pTVar11 = (TypeDescriptor *)(ulonglong)((int)local_2c08 + 1);
|
|
}
|
|
if (iVar23 < 1) goto LAB_1400b530b;
|
|
if (*(int *)¶m_3->pVFTable != 0) {
|
|
local_5c = 200;
|
|
local_60 = 0;
|
|
local_68 = local_ce8;
|
|
FUN_1400bca00(local_29f8);
|
|
FUN_1400bc680((longlong)local_29f8,(longlong)local_29d0,0x80,pTVar33);
|
|
puVar31 = local_29f8;
|
|
FUN_1400db480((longlong)param_2,(longlong)local_ce8,(SIZE_T)puVar31,pTVar33);
|
|
local_2c00._8_8_ = (longlong *)0x0;
|
|
local_2bf0 = (TypeDescriptor *)0x0;
|
|
local_2be8 = 0;
|
|
local_2be0 = 0;
|
|
local_2c00._0_8_ = Proud::BypassDestList::vftable;
|
|
puVar20 = local_2c00;
|
|
FUN_1400a3400((longlong)&local_2b60,(longlong)puVar20,puVar31,(longlong)pTVar33);
|
|
local_cec = 200;
|
|
local_cf0 = 0;
|
|
local_cf8 = local_1978;
|
|
FUN_1400bca00(&local_2bc8);
|
|
FUN_1400bc4d0((longlong)&local_2bc8,puVar20,(SIZE_T)puVar31,pTVar33);
|
|
FUN_140054a10((longlong)&local_2bc8,CONCAT71((int7)((ulonglong)puVar20 >> 8),0x14),
|
|
(SIZE_T)puVar31,pTVar33);
|
|
FUN_1400be0f0((longlong)&local_2bc8,(longlong)local_2c00,(SIZE_T)puVar31,pTVar33);
|
|
puVar21 = &local_2bc8;
|
|
FUN_1400bc450((longlong *)&local_2b30,(longlong)puVar21);
|
|
iVar5 = FUN_1400de5d0((longlong)local_ce8,puVar21,puVar31,pTVar33);
|
|
lVar15 = (longlong)iVar5;
|
|
FUN_1400bddd0((longlong)&local_2bc8,lVar15,(SIZE_T)puVar31,pTVar33);
|
|
local_197c = 200;
|
|
local_1980 = 0;
|
|
local_1988 = local_2608;
|
|
if (local_2bc0.pVFTable == (void *)0x0) {
|
|
uStack_2bd0 = local_2bb0;
|
|
if (local_2bc0.spare == (TypeDescriptor *)0x0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_1400d1900(0,lVar15,puVar31,pTVar33);
|
|
}
|
|
}
|
|
else {
|
|
uStack_2bd0 = *(uint *)((longlong)local_2bc0.pVFTable + 0x18);
|
|
}
|
|
local_2608[0].pVFTable = local_2bc0.spare;
|
|
if (local_2bc0.spare == (TypeDescriptor *)0x0) {
|
|
if (local_2bc0.pVFTable == (void *)0x0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_1400d1900(0,(ulonglong)uStack_2bd0,puVar31,pTVar33);
|
|
}
|
|
local_2608[0].pVFTable = pTVar16;
|
|
if (*(int *)((longlong)local_2bc0.pVFTable + 0x18) != 0) {
|
|
local_2608[0].pVFTable = *(void **)((longlong)local_2bc0.pVFTable + 0x10);
|
|
}
|
|
}
|
|
local_1980 = 1;
|
|
local_2608[0].spare = (void *)CONCAT44(uStack_2bcc,uStack_2bd0);
|
|
local_2bd8 = local_2608[0].pVFTable;
|
|
FUN_14007cb60((longlong)local_1978,(longlong)local_2608,puVar31,pTVar33);
|
|
if (local_1988 == (TypeDescriptor *)0x0) {
|
|
FUN_14006ba50(local_2ad8,(wchar_t *)PTR_u_ArrayWithExternalBuffer_is_unini_1401ad9a0,puVar31
|
|
,pTVar33);
|
|
/* WARNING: Subroutine does not return */
|
|
_CxxThrowException(local_2ad8,(ThrowInfo *)&DAT_1401a93e8);
|
|
}
|
|
if (local_197c < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
FUN_14007cb60((longlong)local_1978,(longlong)local_ce8,puVar31,pTVar33);
|
|
local_2b98.pVFTable._0_4_ = *(undefined4 *)¶m_3[2].pVFTable;
|
|
local_2b98.spare = param_3[1].spare;
|
|
local_2b88 = *(undefined1 *)((longlong)¶m_3[2].spare + 5);
|
|
local_2b84 = *(undefined4 *)¶m_3[3].pVFTable;
|
|
local_2b7f = *(undefined1 *)¶m_3[4].pVFTable;
|
|
local_2b80 = 1;
|
|
local_2bd8 = local_2608;
|
|
local_197c = 200;
|
|
local_1980 = 0;
|
|
local_1988 = local_2608;
|
|
FUN_1400a20e0((longlong *)&local_cf8,&local_1988,puVar31,pTVar33);
|
|
pTVar18 = local_2608;
|
|
pTVar33 = (TypeDescriptor *)0x0;
|
|
plVar32 = (longlong *)0x1;
|
|
FUN_1400a24b0((longlong)param_1,0,1,(SIZE_T *)pTVar18,(SIZE_T *)&local_2b98);
|
|
FUN_1400bc470((longlong *)&local_2b30);
|
|
local_2bd8 = &local_2bc0;
|
|
FUN_1400d1800((longlong *)&local_2bc0);
|
|
if (local_2bc0.spare != (TypeDescriptor *)0x0) {
|
|
if (local_2bac < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
local_2bb0 = 0;
|
|
}
|
|
FUN_14007ca50((longlong)local_1978,pTVar33,plVar32,pTVar18);
|
|
local_2c00._0_8_ = Proud::CFastArray<Proud::BypassDest,0>::vftable;
|
|
if (local_2bf0 != (TypeDescriptor *)0x0) {
|
|
plVar32 = (longlong *)local_2c00._8_8_;
|
|
if ((longlong *)local_2c00._8_8_ == (longlong *)0x0) {
|
|
FUN_14006cc60(local_2bf0);
|
|
}
|
|
else {
|
|
pTVar33 = local_2bf0;
|
|
(**(code **)(*(longlong *)local_2c00._8_8_ + 0x18))(local_2c00._8_8_);
|
|
}
|
|
}
|
|
local_2bd8 = &local_29f0;
|
|
FUN_1400d1800((longlong *)&local_29f0);
|
|
if (local_29f0.spare != (void *)0x0) {
|
|
if (local_29dc < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
local_29e0 = 0;
|
|
}
|
|
pTVar11 = (TypeDescriptor *)FUN_14007ca50((longlong)local_ce8,pTVar33,plVar32,pTVar18);
|
|
goto LAB_1400b530b;
|
|
}
|
|
local_2c00._8_8_ = (longlong *)0x0;
|
|
local_2bf0 = (TypeDescriptor *)0x0;
|
|
local_2be8 = 0;
|
|
local_2be0 = 0;
|
|
local_2c00._0_8_ = Proud::HostIDArray::vftable;
|
|
local_2c08 = (uint *)((ulonglong)local_2c08._4_4_ << 0x20);
|
|
local_2b78 = (void *)0x0;
|
|
pTVar11 = pTVar16;
|
|
pTVar8 = pTVar34;
|
|
pTVar27 = pTVar16;
|
|
pTVar24 = pTVar16;
|
|
if (0 < iVar23) {
|
|
do {
|
|
local_2b70 = pTVar8;
|
|
if (((longlong)local_2b78 < 0) || (iVar23 <= (int)pTVar11)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be30(local_2b78,pTVar8,pTVar29,pTVar33);
|
|
}
|
|
local_2af0 = pTVar8->spare;
|
|
local_2b38 = (TypeDescriptor *)((longlong)pTVar8->pVFTable + 0x56c);
|
|
iVar5 = (int)pTVar27;
|
|
if (iVar5 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
FUN_14007b600((longlong)local_2c00,iVar5 + 1,(longlong)pTVar29);
|
|
pTVar24 = local_2bf0;
|
|
uVar28 = (uint)local_2be8;
|
|
pTVar27 = (TypeDescriptor *)(local_2be8 & 0xffffffff);
|
|
pTVar18 = local_2bf0;
|
|
if ((uint)local_2be8 == 0) {
|
|
pTVar18 = pTVar16;
|
|
}
|
|
pTVar29 = (TypeDescriptor *)0x4;
|
|
FUN_140006500((undefined8 *)((longlong)&pTVar18->pVFTable + (longlong)iVar5 * 4),
|
|
&local_2b38->pVFTable,4);
|
|
uVar4 = (int)local_2c08 + 1;
|
|
local_2c08 = (uint *)CONCAT44(local_2c08._4_4_,uVar4);
|
|
local_2b78 = (void *)((longlong)local_2b78 + 1);
|
|
pTVar18 = local_2b70 + 1;
|
|
pTVar11 = (TypeDescriptor *)(ulonglong)uVar4;
|
|
pTVar8 = pTVar18;
|
|
local_2b70 = pTVar18;
|
|
} while ((int)uVar4 < iVar23);
|
|
}
|
|
uVar2 = local_2c00._8_8_;
|
|
FUN_1400bca00(&local_2bc8);
|
|
FUN_1400bc4d0((longlong)&local_2bc8,pTVar18,(SIZE_T)pTVar29,pTVar33);
|
|
FUN_140054a10((longlong)&local_2bc8,CONCAT71((int7)((ulonglong)pTVar18 >> 8),0x15),
|
|
(SIZE_T)pTVar29,pTVar33);
|
|
FUN_140054a10((longlong)&local_2bc8,(ulonglong)*(byte *)¶m_3[2].pVFTable,(SIZE_T)pTVar29,
|
|
pTVar33);
|
|
FUN_1400bddd0((longlong)&local_2bc8,(longlong)param_3[1].spare,(SIZE_T)pTVar29,pTVar33);
|
|
FUN_1400bddd0((longlong)&local_2bc8,(longlong)(int)uVar28,(SIZE_T)pTVar29,pTVar33);
|
|
pTVar18 = pTVar24;
|
|
if (uVar28 == 0) {
|
|
pTVar18 = pTVar16;
|
|
}
|
|
SVar30 = (SIZE_T)(uVar28 * 4);
|
|
if (uVar28 * 4 != 0) {
|
|
local_2bc4 = 0;
|
|
if (local_2bc0.pVFTable == (void *)0x0) {
|
|
if (local_2bc0.spare == (TypeDescriptor *)0x0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_1400d1900(0,pTVar18,SVar30,pTVar33);
|
|
}
|
|
LAB_1400b4c5e:
|
|
FUN_1400145e0((longlong *)&local_2bc0.spare,&pTVar18->pVFTable,SVar30,pTVar33);
|
|
}
|
|
else {
|
|
if (local_2bc0.spare != (TypeDescriptor *)0x0) goto LAB_1400b4c5e;
|
|
if (local_2bc0.pVFTable == (void *)0x0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_1400d1900(0,pTVar18,SVar30,pTVar33);
|
|
}
|
|
FUN_1400147b0((longlong)local_2bc0.pVFTable,&pTVar18->pVFTable,SVar30);
|
|
}
|
|
FUN_140014820((longlong)&local_2bc8,pTVar18,SVar30,pTVar33);
|
|
}
|
|
puVar21 = &local_2bc8;
|
|
FUN_1400bc450((longlong *)&local_2b30,(longlong)puVar21);
|
|
pTVar18 = local_2ba0;
|
|
iVar5 = FUN_1400de5d0((longlong)local_2ba0,puVar21,SVar30,pTVar33);
|
|
lVar15 = (longlong)iVar5;
|
|
FUN_1400bddd0((longlong)&local_2bc8,lVar15,SVar30,pTVar33);
|
|
local_cec = 200;
|
|
local_cf0 = 0;
|
|
local_cf8 = local_1978;
|
|
local_197c = 200;
|
|
local_1980 = 0;
|
|
local_1988 = local_2608;
|
|
if (local_2bc0.pVFTable == (void *)0x0) {
|
|
uStack_2bd0 = local_2bb0;
|
|
if (local_2bc0.spare == (TypeDescriptor *)0x0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_1400d1900(0,lVar15,SVar30,pTVar33);
|
|
}
|
|
}
|
|
else {
|
|
uStack_2bd0 = *(uint *)((longlong)local_2bc0.pVFTable + 0x18);
|
|
}
|
|
local_2608[0].pVFTable = local_2bc0.spare;
|
|
if (local_2bc0.spare == (TypeDescriptor *)0x0) {
|
|
if (local_2bc0.pVFTable == (void *)0x0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_1400d1900(0,(ulonglong)uStack_2bd0,SVar30,pTVar33);
|
|
}
|
|
local_2608[0].pVFTable = pTVar16;
|
|
if (*(int *)((longlong)local_2bc0.pVFTable + 0x18) != 0) {
|
|
local_2608[0].pVFTable = *(void **)((longlong)local_2bc0.pVFTable + 0x10);
|
|
}
|
|
}
|
|
local_1980 = 1;
|
|
local_2608[0].spare = (void *)CONCAT44(uStack_2bcc,uStack_2bd0);
|
|
local_2bd8 = local_2608[0].pVFTable;
|
|
FUN_14007cb60((longlong)local_1978,(longlong)local_2608,SVar30,pTVar33);
|
|
if (local_1988 == (TypeDescriptor *)0x0) {
|
|
FUN_14006ba50(local_2a90,(wchar_t *)PTR_u_ArrayWithExternalBuffer_is_unini_1401ad9a0,SVar30,
|
|
pTVar33);
|
|
/* WARNING: Subroutine does not return */
|
|
_CxxThrowException(local_2a90,(ThrowInfo *)&DAT_1401a93e8);
|
|
}
|
|
if (local_197c < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
FUN_14007cb60((longlong)local_1978,(longlong)pTVar18,SVar30,pTVar33);
|
|
local_2b98.pVFTable._0_4_ = *(undefined4 *)¶m_3[2].pVFTable;
|
|
local_2b98.spare = param_3[1].spare;
|
|
local_2b88 = *(undefined1 *)((longlong)¶m_3[2].spare + 5);
|
|
local_2b84 = *(undefined4 *)¶m_3[3].pVFTable;
|
|
local_2b7f = *(undefined1 *)¶m_3[4].pVFTable;
|
|
local_2b80 = 1;
|
|
local_2bd8 = local_2608;
|
|
local_197c = 200;
|
|
local_1980 = 0;
|
|
local_1988 = local_2608;
|
|
FUN_1400a20e0((longlong *)&local_cf8,&local_1988,SVar30,pTVar33);
|
|
plVar32 = local_2b68;
|
|
local_2bd8 = local_2608;
|
|
FUN_1400a1420((longlong)local_2b68);
|
|
if ((undefined8 *)plVar32[0x2ae] != (undefined8 *)0x0) {
|
|
pTVar16 = *(TypeDescriptor **)plVar32[0x2ae];
|
|
}
|
|
pTVar18 = &local_2b98;
|
|
pTVar33 = local_2608;
|
|
uVar19 = 0;
|
|
FUN_1400e8ed0((longlong *)pTVar16,0,(longlong)pTVar33,&pTVar18->pVFTable);
|
|
FUN_14007ca50((longlong)local_2608,uVar19,pTVar33,pTVar18);
|
|
if (local_cf8 == (undefined1 *)0x0) {
|
|
FUN_14006ba50(local_2a48,(wchar_t *)PTR_u_ArrayWithExternalBuffer_is_unini_1401ad9a0,pTVar33,
|
|
pTVar18);
|
|
/* WARNING: Subroutine does not return */
|
|
_CxxThrowException(local_2a48,(ThrowInfo *)&DAT_1401a93e8);
|
|
}
|
|
if (local_cec < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
local_cf0 = 0;
|
|
FUN_1400bc470((longlong *)&local_2b30);
|
|
local_2bd8 = &local_2bc0;
|
|
pTVar11 = (TypeDescriptor *)FUN_1400d1800((longlong *)&local_2bc0);
|
|
if (local_2bc0.spare != (TypeDescriptor *)0x0) {
|
|
if (local_2bac < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
local_2bb0 = 0;
|
|
}
|
|
if (pTVar24 != (TypeDescriptor *)0x0) {
|
|
if ((longlong *)uVar2 == (longlong *)0x0) {
|
|
pTVar11 = (TypeDescriptor *)FUN_14006cc60(pTVar24);
|
|
}
|
|
else {
|
|
pTVar11 = (TypeDescriptor *)(**(code **)(*(longlong *)uVar2 + 0x18))(uVar2,pTVar24);
|
|
}
|
|
}
|
|
LAB_1400b530b:
|
|
if (pTVar34 != (TypeDescriptor *)0x0) {
|
|
if (local_2b58 == (longlong *)0x0) {
|
|
pTVar11 = (TypeDescriptor *)FUN_14006cc60(pTVar34);
|
|
}
|
|
else {
|
|
pTVar11 = (TypeDescriptor *)(**(code **)(*local_2b58 + 0x18))(local_2b58,pTVar34);
|
|
}
|
|
}
|
|
if (100 < local_2938) {
|
|
operator_delete__(local_2948.pVFTable);
|
|
pTVar11 = extraout_RAX;
|
|
}
|
|
if (local_2b18 != '\0') {
|
|
pTVar11 = (TypeDescriptor *)FUN_14006b3e0((longlong)local_2b20);
|
|
}
|
|
return CONCAT71((int7)((ulonglong)pTVar11 >> 8),1);
|
|
}
|
|
FUN_14006cb70(plVar32,pTVar18,pTVar29,pTVar33);
|
|
local_2c08 = (uint *)PTR_DAT_1401ac010;
|
|
uVar4 = FUN_14006c9f0((short *)puVar1);
|
|
if ((local_2c08 != (uint *)0x0) &&
|
|
(pTVar16 = (TypeDescriptor *)0x0, local_2c08 != (uint *)PTR_DAT_1401ac010)) {
|
|
pTVar16 = (TypeDescriptor *)(ulonglong)local_2c08[-2];
|
|
}
|
|
uVar6 = uVar4;
|
|
if ((((int)uVar4 <= (int)pTVar16) && (uVar6 = uVar28, local_2c08 != (uint *)0x0)) &&
|
|
(local_2c08 != (uint *)PTR_DAT_1401ac010)) {
|
|
uVar6 = local_2c08[-2];
|
|
}
|
|
uVar25 = 1;
|
|
if (1 < (int)uVar6) {
|
|
uVar25 = uVar6;
|
|
}
|
|
uVar7 = 0;
|
|
uVar6 = uVar7;
|
|
if ((local_2c08 != (uint *)0x0) && (local_2c08 != (uint *)PTR_DAT_1401ac010)) {
|
|
uVar6 = local_2c08[-2];
|
|
}
|
|
if ((int)uVar6 < (int)uVar25) {
|
|
if (local_2c08 == (uint *)0x0) {
|
|
local_2c08 = (uint *)PTR_DAT_1401ac010;
|
|
}
|
|
if ((int)uVar25 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
if (uVar25 == 0) {
|
|
FUN_1400031e0(&local_2c08,PTR_DAT_1401ac010,pTVar16,pTVar33);
|
|
}
|
|
else {
|
|
uVar6 = uVar7;
|
|
if ((local_2c08 != (uint *)0x0) && (local_2c08 != (uint *)PTR_DAT_1401ac010)) {
|
|
uVar6 = local_2c08[-2];
|
|
}
|
|
if (uVar25 != uVar6) {
|
|
puVar12 = (uint *)FUN_14006cbf0((longlong)(int)uVar25 * 2 + 10);
|
|
if (puVar12 != (uint *)0x0) {
|
|
*puVar12 = 0;
|
|
puVar12[1] = 1;
|
|
}
|
|
*puVar12 = uVar25;
|
|
uVar6 = uVar7;
|
|
if ((local_2c08 != (uint *)0x0) && (local_2c08 != (uint *)PTR_DAT_1401ac010)) {
|
|
uVar6 = local_2c08[-2];
|
|
}
|
|
puVar22 = (uint *)PTR_DAT_1401ac010;
|
|
if ((int)uVar25 < (int)uVar6) {
|
|
LAB_1400b5465:
|
|
if (local_2c08 != (uint *)0x0) {
|
|
puVar22 = local_2c08;
|
|
}
|
|
}
|
|
else {
|
|
uVar25 = uVar28;
|
|
if (local_2c08 != (uint *)0x0) {
|
|
if (local_2c08 != (uint *)PTR_DAT_1401ac010) {
|
|
uVar25 = local_2c08[-2];
|
|
}
|
|
goto LAB_1400b5465;
|
|
}
|
|
}
|
|
uVar26 = (ulonglong)uVar25;
|
|
FUN_14006ca20(puVar12 + 2,puVar22,uVar25);
|
|
FUN_1400031e0(&local_2c08,puVar22,uVar26,pTVar33);
|
|
local_2c08 = puVar12 + 2;
|
|
}
|
|
}
|
|
}
|
|
FUN_140002e40(&local_2c08);
|
|
puVar12 = local_2c08;
|
|
if (local_2c08 == (uint *)0x0) {
|
|
puVar12 = (uint *)PTR_DAT_1401ac010;
|
|
}
|
|
FUN_14006ca20(puVar12,puVar1,uVar4);
|
|
puVar12 = local_2c08;
|
|
if (local_2c08 == (uint *)0x0) {
|
|
puVar12 = (uint *)PTR_DAT_1401ac010;
|
|
}
|
|
uVar4 = FUN_14006c9f0((short *)puVar12);
|
|
uVar28 = 0;
|
|
if (0 < (int)uVar4) {
|
|
uVar28 = uVar4;
|
|
}
|
|
uVar4 = uVar7;
|
|
if ((local_2c08 != (uint *)0x0) && (local_2c08 != (uint *)PTR_DAT_1401ac010)) {
|
|
uVar4 = local_2c08[-2];
|
|
}
|
|
if (((int)uVar4 <= (int)uVar28) && (uVar28 = uVar7, local_2c08 != (uint *)0x0)) {
|
|
if (local_2c08 == (uint *)PTR_DAT_1401ac010) goto LAB_1400b551a;
|
|
uVar28 = local_2c08[-2];
|
|
}
|
|
if (((local_2c08 != (uint *)PTR_DAT_1401ac010) && (local_2c08 != (uint *)0x0)) &&
|
|
(local_2c08 + -2 != (uint *)0x0)) {
|
|
local_2c08[-2] = uVar28;
|
|
*(undefined2 *)((longlong)local_2c08 + (longlong)(int)uVar28 * 2) = 0;
|
|
}
|
|
LAB_1400b551a:
|
|
local_2c00._8_8_ = (void *)0x0;
|
|
local_2bf0 = (TypeDescriptor *)0x0;
|
|
local_2be8 = 0;
|
|
local_2be0 = 0;
|
|
local_2c00._0_8_ = Proud::ByteArray::vftable;
|
|
plVar32 = &local_2c08;
|
|
plVar13 = FUN_140078c10((longlong *)&local_2bd8,0x12,0,plVar32,(longlong)local_2c00);
|
|
lVar15 = *param_1;
|
|
(**(code **)(lVar15 + 0x80))(param_1);
|
|
puVar17 = (undefined8 *)local_2c00;
|
|
FUN_140078360(puVar17);
|
|
puVar12 = local_2c08;
|
|
if (((local_2c08 != (uint *)0x0) && (local_2c08 != (uint *)PTR_DAT_1401ac010)) &&
|
|
(puVar22 = local_2c08 + -2, puVar22 != (uint *)0x0)) {
|
|
piVar14 = (int *)FUN_14006cb70(puVar17,plVar13,lVar15,plVar32);
|
|
local_2b30 = piVar14;
|
|
FUN_14006b350(piVar14);
|
|
local_2b28 = CONCAT31(local_2b28._1_3_,1);
|
|
puVar12 = puVar12 + -1;
|
|
*puVar12 = *puVar12 - 1;
|
|
if (*puVar12 == 0) {
|
|
FUN_14006cc60(puVar22);
|
|
}
|
|
FUN_14006b3e0((longlong)piVar14);
|
|
}
|
|
uVar26 = FUN_14006b3e0((longlong)local_2b20);
|
|
return uVar26 & 0xffffffffffffff00;
|
|
}
|
|
|