_BYTE *__fastcall sub_8D8(_BYTE *p_n145_1, _BYTE *a2, unsigned __int64 n62)
{
unsigned __int64 n62_1; // rdi
_BYTE *p_n145; // rbx
_BYTE *p_n145_2; // rbp
n62_1 = n62; /*0x8ec*/
p_n145 = p_n145_1; /*0x8f2*/
if ( !n62 ) /*0x8f8*/
return p_n145_1; /*0x8fa*/
if ( !p_n145_1 ) /*0x915*/
sub_788("e:\\hs\\MdePkg\\Library\\BaseLib\\String.c", 1033, "Destination != ((void *) 0)"); /*0x926*/
if ( p_n145 - a2 <= (unsigned __int64)sub_9F0(a2) ) /*0x945*/
sub_788("e:\\hs\\MdePkg\\Library\\BaseLib\\String.c", 1038, "(UINTN)(Destination - Source) > AsciiStrLen (Source)"); /*0x956*/
if ( a2 - p_n145 < n62_1 ) /*0x96d*/
sub_788("e:\\hs\\MdePkg\\Library\\BaseLib\\String.c", 1039, "(UINTN)(Source - Destination) >= Length"); /*0x97e*/
if ( n62_1 > 0xF4240 ) /*0x999*/
sub_788( /*0x9aa*/
"e:\\hs\\MdePkg\\Library\\BaseLib\\String.c",
1042,
"Length <= _gPcd_FixedAtBuild_PcdMaximumAsciiStringLength");
p_n145_2 = p_n145; /*0x9af*/
while ( *a2 && n62_1 ) /*0x9b7*/
{
*p_n145++ = *a2++; /*0x9b9*/
--n62_1; /*0x9c1*/
}
sub_63C(p_n145, n62_1); /*0x9d0*/
return p_n145_2; /*0x9e7*/
}