int *__cdecl LogoRenderFull(int a1)
{
int *p_n26; // ecx
int *v2; // esi
int *p_n2; // eax
int *p_n2_1; // ebx
int *Pool; // edi
char *v7; // edx
char v8; // al
int v9; // ebx
char *v10; // eax
_BYTE *v11; // edi
int *v12; // eax
unsigned __int8 v13; // [esp+Eh] [ebp-1Ah]
char v14; // [esp+Fh] [ebp-19h]
int v15; // [esp+10h] [ebp-18h]
int v16; // [esp+14h] [ebp-14h]
int v17; // [esp+14h] [ebp-14h]
char *Scanline; // [esp+18h] [ebp-10h]
int v19; // [esp+1Ch] [ebp-Ch]
int n2; // [esp+20h] [ebp-8h]
int *p_n26_1; // [esp+24h] [ebp-4h]
p_n26_1 = p_n26;
v2 = 0;
p_n2 = (int *)ImageRenderOutput(p_n26, a1);
p_n2_1 = p_n2;
if ( !p_n2 )
return 0;
n2 = *p_n2;
v19 = *(_DWORD *)(28 * *p_n2 + a1 + 804);
Scanline = ImageRenderGetScanline(*p_n2, a1);
if ( !Scanline )
return 0;
Pool = (int *)PeiAllocatePool((void *)0x1C);
if ( !Pool )
return 0;
Pool[4] = -1;
Pool[5] = -1;
*Pool = v19;
Pool[1] = (int)Scanline;
Pool[2] = v19 - 1;
Pool[3] = v19 - 1;
Pool[6] = 0;
v16 = 0;
if ( p_n2_1[2] + p_n2_1[1] <= 0 )
{
LABEL_10:
v9 = 0;
v17 = *(_DWORD *)(28 * (n2 + 29) + a1);
if ( v17 <= 0 )
{
LABEL_13:
v11 = LogoRenderScanline(v19, (int)Scanline, p_n26_1[1], a1);
if ( v11 )
{
v12 = (int *)PeiAllocatePool((void *)0xC);
if ( v12 )
{
v2 = v12;
*v12 = n2;
v12[1] = v19;
v12[2] = (int)v11;
}
}
}
else
{
while ( 1 )
{
v10 = ImageRenderWritePalette(Pool);
if ( !v10 )
break;
++v9;
*v10 = 2;
if ( v9 >= v17 )
goto LABEL_13;
}
}
}
else
{
LABEL_6:
v14 = ImageRenderWriteScanline(p_n2_1);
v13 = 0x80;
v15 = 0;
while ( 1 )
{
v7 = ImageRenderWritePalette(Pool);
if ( !v7 )
break;
v8 = ((v13 & (unsigned __int8)v14) != 0) + 2;
v13 >>= 1;
*v7 = v8;
if ( ++v15 >= 8 )
{
if ( ++v16 < p_n2_1[2] + p_n2_1[1] )
goto LABEL_6;
goto LABEL_10;
}
}
}
return v2;
}