// 0xffe6427c sub_FFE6427C
void *__cdecl sub_FFE6427C(void *buf, unsigned int count, char value)
{
  memset(buf, value, count); /*0xffe64289*/
  return buf; /*0xffe6428f*/
}

// 0xffe642bc sub_FFE642BC
char *__cdecl sub_FFE642BC(char *dst, char *src, unsigned int count_1)
{
  unsigned int count; // edx
  char *dst_1; // edi
  char *src_1; // esi

  count = count_1; /*0xffe642c6*/
  if ( src < dst && &src[count_1 - 1] >= dst ) /*0xffe642d4*/
  {
    src_1 = &src[count_1 - 1]; /*0xffe642e8*/
    dst_1 = &dst[count_1 - 1]; /*0xffe642ea*/
  }
  else
  {
    count = count_1 & 3; /*0xffe642d8*/
    qmemcpy(dst, src, 4 * (count_1 >> 2)); /*0xffe642e1*/
    src_1 = &src[4 * (count_1 >> 2)]; /*0xffe642e1*/
    dst_1 = &dst[4 * (count_1 >> 2)]; /*0xffe642e1*/
  }
  qmemcpy(dst_1, src_1, count); /*0xffe642f1*/
  return dst; /*0xffe642f8*/
}

// 0xffe642fc sub_FFE642FC
int __cdecl sub_FFE642FC(int a1, int a2, int a3, int a4)
{
  do /*0xffe64315*/
  {
    *(_DWORD *)(a1 + 8 * a2 - 8) = a3; /*0xffe6430d*/
    *(_DWORD *)(a1 + 8 * a2-- - 4) = a4; /*0xffe64311*/
  }
  while ( a2 ); /*0xffe64315*/
  return a1; /*0xffe64319*/
}

// 0xffe6431c sub_FFE6431C
void *__cdecl sub_FFE6431C(void *buf, unsigned int count, int value)
{
  memset32(buf, value, count); /*0xffe64329*/
  return buf; /*0xffe6432f*/
}

// 0xffe6433c _ModuleEntryPoint
EFI_STATUS ModuleEntryPoint(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
  int v2; // eax
  int v3; // esi

  if ( *(char *)(sub_FFE663FA() + 1024068) >= 0 ) /*0xffe6434a*/
  {
    sub_FFE66406(); /*0xffe6434c*/
    sub_FFE662C6(); /*0xffe64351*/
  }
  sub_FFE65B3E(-1, SystemTable, "CmosManagerPeiEntry Entry\n"); /*0xffe646c7*/
  v2 = sub_FFE64BF8(SystemTable); /*0xffe646d1*/
  v3 = v2; /*0xffe646d6*/
  if ( v2 && (*(unsigned __int8 (__cdecl **)(int, int))(v2 + 170))(v2, 8) ) /*0xffe646e3*/
  {
    if ( (*(unsigned __int8 (__cdecl **)(int, int))(v3 + 170))(v3, 2) ) /*0xffe646f6*/
      return 0; /*0xffe64704*/
    if ( (*(unsigned __int8 (__cdecl **)(int, int))(v3 + 170))(v3, 0x80000) /*0xffe64729*/
      && (*(unsigned __int8 (__cdecl **)(int, int))(v3 + 170))(v3, 0x20000) )
    {
      if ( (*(unsigned __int8 (__cdecl **)(int, int))(v3 + 170))(v3, 16) /*0xffe6474a*/
        && (*(unsigned __int8 (__cdecl **)(int, int))(v3 + 170))(v3, 0x10000) )
      {
        goto LABEL_21; /*0xffe64754*/
      }
      (*(void (__cdecl **)(int, _DWORD))(v3 + 182))(v3, 0); /*0xffe64775*/
    }
    if ( (*(unsigned __int8 (__cdecl **)(int, int))(v3 + 174))(v3, 4224) ) /*0xffe64783*/
    {
      if ( !(*(unsigned __int8 (__cdecl **)(int, int))(v3 + 170))(v3, 128) /*0xffe647b8*/
        && !(*(unsigned __int8 (__cdecl **)(int, int))(v3 + 170))(v3, 4096) )
      {
        if ( (*(unsigned __int8 (__cdecl **)(int, int))(v3 + 170))(v3, 0x80000) ) /*0xffe647d3*/
          (*(int (__cdecl **)(int, int))(v3 + 170))(v3, 0x40000); /*0xffe647e5*/
      }
    }
    else
    {
      (*(void (__cdecl **)(int))(v3 + 32))(v3); /*0xffe64830*/
      if ( (*(unsigned __int8 (__cdecl **)(int, int))(v3 + 170))(v3, 1) ) /*0xffe64836*/
      {
        (*(void (__cdecl **)(EFI_SYSTEM_TABLE *, void *))(LODWORD(SystemTable->Hdr.Signature) + 36))( /*0xffe64862*/
          SystemTable,
          &unk_FFE66C40);
        return 0; /*0xffe64867*/
      }
    }
LABEL_21:
    JUMPOUT(0xFFE64550); /*0xffe64550*/
  }
  return -2147483645; /*0xffe64859*/
}

// 0xffe6486c sub_FFE6486C
int __cdecl sub_FFE6486C(int a1)
{
  int v1; // edi

  v1 = 0; /*0xffe64872*/
  if ( a1 && (*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 8) ) /*0xffe6487b*/
    return a1; /*0xffe64887*/
  return v1; /*0xffe6488b*/
}

// 0xffe6488e sub_FFE6488E
bool __cdecl sub_FFE6488E(int a1, int a2)
{
  return (a2 & *(_DWORD *)(a1 + 158)) == a2; /*0xffe648a3*/
}

// 0xffe648a4 sub_FFE648A4
bool __cdecl sub_FFE648A4(int a1, int a2)
{
  return (a2 & *(_DWORD *)(a1 + 158)) != 0; /*0xffe648b5*/
}

// 0xffe648b6 sub_FFE648B6
int __fastcall sub_FFE648B6(int a1, int n8, int a3)
{
  __int16 n8_1; // bx
  int result; // eax
  int v6; // ecx

  n8_1 = n8; /*0xffe648bb*/
  if ( a3 == 1 ) /*0xffe648c4*/
  {
    *(_DWORD *)(a1 + 158) |= n8; /*0xffe648c6*/
    result = (*(int (__cdecl **)(int, int))(a1 + 170))(a1, 0x80000); /*0xffe648d2*/
    if ( (_BYTE)result ) /*0xffe648dc*/
    {
      if ( (n8_1 & 0x1000) != 0 ) /*0xffe648e4*/
        result = (*(int (__cdecl **)(int, int, int))(a1 + 8))(a1, 4658, 1); /*0xffe648ed*/
      if ( (n8_1 & 0x80u) != 0 ) /*0xffe648f5*/
        result = (*(int (__cdecl **)(int, int, int))(a1 + 8))(a1, 4659, 1); /*0xffe648fe*/
      if ( (n8_1 & 0x4000) != 0 ) /*0xffe6490a*/
        result = (*(int (__cdecl **)(int, int, int))(a1 + 8))(a1, 4660, 1); /*0xffe64913*/
      if ( (n8_1 & 0x10) != 0 ) /*0xffe6491c*/
        result = (*(int (__cdecl **)(int, int, int))(a1 + 8))(a1, 4661, 1); /*0xffe64925*/
    }
  }
  else
  {
    result = ~n8; /*0xffe6492f*/
    *(_DWORD *)(a1 + 158) &= ~n8; /*0xffe64931*/
  }
  if ( (n8_1 & 0x1080) != 0 ) /*0xffe6493d*/
    result = sub_FFE6548C((_DWORD *)a1, n8_1, a3); /*0xffe64947*/
  v6 = *(_DWORD *)(a1 + 178); /*0xffe6494d*/
  if ( v6 ) /*0xffe64955*/
  {
    result = *(_DWORD *)(a1 + 158); /*0xffe64957*/
    *(_DWORD *)(v6 + 24) = result; /*0xffe6495d*/
  }
  return result; /*0xffe64960*/
}

// 0xffe64964 sub_FFE64964
int __cdecl sub_FFE64964(int a1, int n8)
{
  return sub_FFE648B6(a1, n8, 1); /*0xffe64974*/
}

// 0xffe64975 sub_FFE64975
int __cdecl sub_FFE64975(int a1, int a2)
{
  return sub_FFE648B6(a1, a2, 0); /*0xffe64985*/
}

// 0xffe64986 sub_FFE64986
int __cdecl sub_FFE64986(_DWORD *a1, char a2)
{
  int v2; // ecx
  int v4; // [esp+0h] [ebp-4h] BYREF

  v4 = v2; /*0xffe64989*/
  if ( (a2 & 0xC) == 0xC ) /*0xffe64992*/
    return -2147483646; /*0xffe64999*/
  if ( (a2 & 4) == 0 ) /*0xffe649ac*/
    goto LABEL_8; /*0xffe649ac*/
  if ( !(*(unsigned __int8 (__cdecl **)(_DWORD *, int))((char *)a1 + 170))(a1, 0x2000) ) /*0xffe649b0*/
  {
    if ( !(*(unsigned __int8 (__cdecl **)(_DWORD *, int))((char *)a1 + 170))(a1, 64) ) /*0xffe649bf*/
    {
      (*(void (__cdecl **)(_DWORD, int, int *))(*(_DWORD *)*a1 + 76))(*a1, 2 * *((unsigned __int16 *)a1 + 61), &v4); /*0xffe649db*/
      sub_FFE664FC(v4, *(_DWORD *)((char *)a1 + 118), 2 * *((unsigned __int16 *)a1 + 61)); /*0xffe649eb*/
      *(_DWORD *)((char *)a1 + 118) = v4; /*0xffe649f6*/
    }
    (*(void (__cdecl **)(_DWORD *, int))((char *)a1 + 162))(a1, 0x2000); /*0xffe649fc*/
    (*(void (__cdecl **)(_DWORD *, _DWORD *))((char *)a1 + 142))(a1, a1 + 35); /*0xffe64a0a*/
    (*(void (__cdecl **)(_DWORD *, _DWORD))((char *)a1 + 150))(a1, *((unsigned __int16 *)a1 + 70)); /*0xffe64a15*/
LABEL_8:
    if ( (a2 & 8) != 0 ) /*0xffe64a23*/
      (*(void (__cdecl **)(_DWORD *, int))((char *)a1 + 166))(a1, 0x2000); /*0xffe64a27*/
  }
  return 0; /*0xffe64a35*/
}

// 0xffe64a37 sub_FFE64A37
int __cdecl sub_FFE64A37(int a1, unsigned int a2)
{
  unsigned int v2; // edi
  unsigned int i; // ebx

  v2 = a2; /*0xffe64a3f*/
  if ( !a2 ) /*0xffe64a44*/
    v2 = (*(int (__cdecl **)(int))(a1 + 36))(a1); /*0xffe64a4b*/
  if ( !(*(unsigned __int8 (__cdecl **)(int, int))(a1 + 174))(a1, 0x80000) ) /*0xffe64a53*/
    return -2147483641; /*0xffe64a5f*/
  for ( i = 0; i < 4; ++i ) /*0xffe64a67*/
  {
    HIBYTE(a2) = v2 >> (8 * (3 - i)); /*0xffe64a79*/
    sub_FFE64EE0(i + 66, 255, (char *)&a2 + 3); /*0xffe64a89*/
  }
  return 0; /*0xffe64a9a*/
}

// 0xffe64a9e sub_FFE64A9E
int __cdecl sub_FFE64A9E(int a1, int *a2)
{
  int v2; // esi
  unsigned __int8 i; // bl

  v2 = 0; /*0xffe64aa7*/
  if ( !(*(unsigned __int8 (__cdecl **)(int, int))(a1 + 174))(a1, 0x80000) ) /*0xffe64aaf*/
    return -2147483641; /*0xffe64abb*/
  for ( i = 0; i < 4u; ++i ) /*0xffe64ac3*/
  {
    sub_FFE64E08((unsigned __int16)(i + 66), (char *)&a1 + 3); /*0xffe64add*/
    v2 = HIBYTE(a1) | (v2 << 8); /*0xffe64ae9*/
  }
  *a2 = v2; /*0xffe64af8*/
  return 0; /*0xffe64afc*/
}

// 0xffe64b02 sub_FFE64B02
int __cdecl sub_FFE64B02(_DWORD *a1)
{
  int v1; // edi

  v1 = (*(int (__cdecl **)(_DWORD, _DWORD *))(*(_DWORD *)*a1 + 24))(*a1, a1 + 18); /*0xffe64b14*/
  if ( v1 < 0 ) /*0xffe64b1a*/
  {
    (*(void (__cdecl **)(_DWORD *, int))((char *)a1 + 162))(a1, 4); /*0xffe64b2c*/
    (*(void (__cdecl **)(_DWORD *, int))((char *)a1 + 166))(a1, 1); /*0xffe64b35*/
  }
  else
  {
    (*(void (__cdecl **)(_DWORD *, int))((char *)a1 + 162))(a1, 1); /*0xffe64b1f*/
  }
  return v1; /*0xffe64b40*/
}

// 0xffe64b43 sub_FFE64B43
int __fastcall sub_FFE64B43(int SystemTable, _DWORD *a2)
{
  *a2 = SystemTable; /*0xffe64b46*/
  a2[1] = sub_FFE651EB; /*0xffe64b48*/
  a2[2] = sub_FFE656AB; /*0xffe64b4f*/
  a2[3] = sub_FFE64DA7; /*0xffe64b56*/
  a2[4] = sub_FFE65262; /*0xffe64b5d*/
  a2[5] = sub_FFE65A44; /*0xffe64b64*/
  a2[6] = sub_FFE65966; /*0xffe64b6b*/
  a2[9] = sub_FFE6486C; /*0xffe64b72*/
  a2[8] = sub_FFE64B02; /*0xffe64b79*/
  *(_DWORD *)((char *)a2 + 142) = sub_FFE655C0; /*0xffe64b80*/
  *(_DWORD *)((char *)a2 + 146) = sub_FFE653CF; /*0xffe64b8a*/
  *(_DWORD *)((char *)a2 + 150) = sub_FFE653F9; /*0xffe64b94*/
  a2[34] = sub_FFE64986; /*0xffe64b9e*/
  *(_DWORD *)((char *)a2 + 170) = sub_FFE6488E; /*0xffe64ba8*/
  *(_DWORD *)((char *)a2 + 174) = sub_FFE648A4; /*0xffe64bb2*/
  *(_DWORD *)((char *)a2 + 162) = sub_FFE64964; /*0xffe64bbc*/
  *(_DWORD *)((char *)a2 + 166) = sub_FFE64975; /*0xffe64bc6*/
  *(_DWORD *)((char *)a2 + 154) = sub_FFE6572B; /*0xffe64bd0*/
  *(_DWORD *)((char *)a2 + 182) = sub_FFE64A37; /*0xffe64bda*/
  *(_DWORD *)((char *)a2 + 186) = sub_FFE64A9E; /*0xffe64be4*/
  sub_FFE64964((int)a2, 8); /*0xffe64bee*/
  return 0; /*0xffe64bf7*/
}

// 0xffe64bf8 sub_FFE64BF8
_DWORD *__thiscall sub_FFE64BF8(EFI_SYSTEM_TABLE *SystemTable)
{
  _DWORD *v3; // eax
  unsigned __int8 (__cdecl **v4)(_DWORD); // edi
  unsigned __int8 (__cdecl **v5)(_DWORD); // ebx
  unsigned __int8 (__cdecl **v6)(_DWORD); // esi
  unsigned __int8 (__cdecl **i)(_DWORD); // ebp
  _DWORD *v8; // [esp+8h] [ebp-4h] BYREF

  if ( (*(int (__cdecl **)(EFI_SYSTEM_TABLE *, void *, _DWORD, _DWORD, _DWORD **))(LODWORD(SystemTable->Hdr.Signature) /*0xffe64c0e*/
                                                                                 + 32))(
         SystemTable,
         &unk_FFE66BEC,
         0,
         0,
         &v8) )
  {
    if ( (*(int (__cdecl **)(EFI_SYSTEM_TABLE *, int, _DWORD **))(LODWORD(SystemTable->Hdr.Signature) + 76))( /*0xffe64c47*/
           SystemTable,
           220,
           &v8) >= 0 )
    {
      sub_FFE664A6(v8, 220, 0); /*0xffe64c57*/
      sub_FFE64B43((int)SystemTable, v8); /*0xffe64c65*/
      ((void (__thiscall *)(_DWORD *))loc_FFE645D2)(v8); /*0xffe64c6e*/
      v3 = v8; /*0xffe64c73*/
      v4 = *(unsigned __int8 (__cdecl ***)(_DWORD))((char *)v8 + 194); /*0xffe64c77*/
      v5 = *(unsigned __int8 (__cdecl ***)(_DWORD))((char *)v8 + 198); /*0xffe64c7d*/
      v6 = *(unsigned __int8 (__cdecl ***)(_DWORD))((char *)v8 + 202); /*0xffe64c83*/
      for ( i = *(unsigned __int8 (__cdecl ***)(_DWORD))((char *)v8 + 206); *i; ++i ) /*0xffe64c89*/
      {
        if ( (*i)(*v3) ) /*0xffe64c98*/
          (*(void (__cdecl **)(_DWORD *, int))((char *)v8 + 162))(v8, 0x80000); /*0xffe64ca9*/
        else
          (*(void (__cdecl **)(_DWORD *, int))((char *)v8 + 166))(v8, 0x80000); /*0xffe64cb1*/
        v3 = v8; /*0xffe64cb7*/
      }
      while ( *v4 ) /*0xffe64cc7*/
      {
        if ( (*v4)(*v3) ) /*0xffe64ccb*/
          (*(void (__cdecl **)(_DWORD *, int))((char *)v8 + 162))(v8, 16); /*0xffe64cd9*/
        v3 = v8; /*0xffe64ce1*/
        ++v4; /*0xffe64ce5*/
      }
      while ( *v5 ) /*0xffe64cee*/
      {
        if ( (*v5)(*v3) ) /*0xffe64cf2*/
          (*(void (__cdecl **)(_DWORD *, int))((char *)v8 + 162))(v8, 0x10000); /*0xffe64d03*/
        v3 = v8; /*0xffe64d0b*/
        ++v5; /*0xffe64d0f*/
      }
      while ( *v6 ) /*0xffe64d18*/
      {
        if ( (*v6)(*v3) ) /*0xffe64d1c*/
          (*(void (__cdecl **)(_DWORD *, int))((char *)v8 + 162))(v8, 0x20000); /*0xffe64d2d*/
        v3 = v8; /*0xffe64d35*/
        ++v6; /*0xffe64d39*/
      }
      (*(void (__cdecl **)(_DWORD *, int))((char *)v3 + 162))(v3, 0x40000); /*0xffe64d44*/
      (*(void (__cdecl **)(_DWORD *, _DWORD *))((char *)v8 + 142))(v8, v8 + 35); /*0xffe64d56*/
      sub_FFE65447(v8); /*0xffe64d63*/
      return v8; /*0xffe64d68*/
    }
    else
    {
      return 0; /*0xffe64c49*/
    }
  }
  else
  {
    (*(void (__cdecl **)(_DWORD *, int))((char *)v8 + 162))(v8, 2); /*0xffe64c1f*/
    return v8; /*0xffe64c25*/
  }
}

// 0xffe64d71 sub_FFE64D71
unsigned __int16 __fastcall sub_FFE64D71(int a1, __int16 n0xE)
{
  unsigned __int16 v2; // di
  unsigned __int16 v3; // si
  int v4; // ecx

  v2 = *(_WORD *)(a1 + 116); /*0xffe64d74*/
  v3 = 1; /*0xffe64d7d*/
  if ( v2 > 1u ) /*0xffe64d83*/
  {
    v4 = *(_DWORD *)(a1 + 112); /*0xffe64d85*/
    do /*0xffe64d95*/
    {
      if ( *(_WORD *)(v4 + 2 * v3) == n0xE ) /*0xffe64d8f*/
        break; /*0xffe64d8f*/
      ++v3; /*0xffe64d91*/
    }
    while ( v3 < v2 ); /*0xffe64d95*/
  }
  if ( v3 >= v2 ) /*0xffe64d9a*/
    return 0; /*0xffe64da1*/
  else
    return v3; /*0xffe64d9c*/
}

// 0xffe64da7 sub_FFE64DA7
int __cdecl sub_FFE64DA7(int a1, __int16 a2)
{
  unsigned __int16 v2; // cx
  unsigned __int16 v3; // di
  int result; // eax

  v2 = 1; /*0xffe64daf*/
  v3 = *(_WORD *)(a1 + 116); /*0xffe64db4*/
  if ( v3 > 1u ) /*0xffe64db9*/
  {
    do /*0xffe64dde*/
    {
      if ( ((*(_WORD *)(*(_DWORD *)(a1 + 112) + 2 * v2) >> 3) & 0x1FF) == a2 ) /*0xffe64dd8*/
        break; /*0xffe64dd8*/
      ++v2; /*0xffe64dda*/
    }
    while ( v2 < v3 ); /*0xffe64dde*/
  }
  if ( v2 >= *(_WORD *)(a1 + 116) ) /*0xffe64de7*/
    return 0; /*0xffe64de7*/
  result = *(unsigned __int16 *)(*(_DWORD *)(a1 + 112) + 2 * v2); /*0xffe64df4*/
  if ( (result & 0xF000) != 0x8000 ) /*0xffe64e03*/
    return 0; /*0xffe64e05*/
  return result; /*0xffe64de2*/
}

// 0xffe64e08 sub_FFE64E08
int __fastcall sub_FFE64E08(int a1, int a2, int a3, unsigned __int8 *a4)
{
  int v5; // esi
  unsigned __int8 v6; // bl
  unsigned __int16 v7; // bp
  int v8; // ecx
  int v9; // edx
  int v10; // eax
  int v11; // esi
  unsigned __int8 v12; // al

  v5 = -2147483634; /*0xffe64e15*/
  v6 = 1; /*0xffe64e1b*/
  v7 = *(_WORD *)(a1 + 218); /*0xffe64e1d*/
  if ( v7 > 1u ) /*0xffe64e27*/
  {
    v8 = *(_DWORD *)(a1 + 214); /*0xffe64e2d*/
    v9 = a3; /*0xffe64e33*/
    while ( 1 ) /*0xffe64e3a*/
    {
      v10 = 12 * v6; /*0xffe64e3a*/
      if ( (unsigned __int16)v9 >= *(_WORD *)(v10 + v8 + 4) && (unsigned __int16)v9 <= *(_WORD *)(v10 + v8 + 6) ) /*0xffe64e49*/
      {
        if ( *(_DWORD *)(v10 + v8 + 8) ) /*0xffe64e4b*/
          return (*(int (__cdecl **)(_DWORD, int, int, unsigned __int8 *))(12 * v6 + v8 + 8))(*(_DWORD *)a1, a2, v9, a4); /*0xffe64ecf*/
        v7 = *(_WORD *)(a1 + 218); /*0xffe64e58*/
        if ( *(_WORD *)(v10 + v8) ) /*0xffe64e54*/
        {
          v9 = a3; /*0xffe64e68*/
          if ( *(_WORD *)(v10 + v8 + 2) ) /*0xffe64e63*/
            break; /*0xffe64e63*/
        }
      }
      if ( ++v6 >= v7 ) /*0xffe64e76*/
        return v5; /*0xffe64e76*/
    }
    v11 = 12 * v6; /*0xffe64e7d*/
    __outbyte(*(_WORD *)(v11 + v8), a3); /*0xffe64e88*/
    if ( a2 == 1 ) /*0xffe64e8e*/
    {
      v12 = __inbyte(*(_WORD *)(*(_DWORD *)(a1 + 214) + v11 + 2)); /*0xffe64e9b*/
      *a4 = v12; /*0xffe64ea2*/
    }
    else
    {
      __outbyte(*(_WORD *)(*(_DWORD *)(a1 + 214) + v11 + 2), *a4); /*0xffe64eb9*/
    }
    return 0; /*0xffe64ed6*/
  }
  return v5; /*0xffe64ed8*/
}

// 0xffe64ee0 sub_FFE64EE0
int __fastcall sub_FFE64EE0(int a1, int a2, unsigned int n0xD, char n255, char *a5)
{
  unsigned int v8; // [esp+8h] [ebp-Ch] BYREF
  int v9; // [esp+Ch] [ebp-8h] BYREF
  int v10; // [esp+10h] [ebp-4h] BYREF

  v8 = 0; /*0xffe64ee6*/
  sub_FFE64E08(a1, 1, n0xD, (unsigned __int8 *)&v10); /*0xffe64efa*/
  if ( a2 == 1 ) /*0xffe64f04*/
  {
    *a5 = v10; /*0xffe64f0c*/
  }
  else
  {
    LOBYTE(v9) = *a5 | v10 & ~n255; /*0xffe64f27*/
    if ( !(*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 1024) ) /*0xffe64f2a*/
      sub_FFE65518(a1, n0xD, v10, v9, &v8); /*0xffe64f45*/
    sub_FFE64E08(a1, 0, n0xD, (unsigned __int8 *)&v9); /*0xffe64f58*/
    if ( !(*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 1024) /*0xffe64f72*/
      && (*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 256) )
    {
      (*(void (__cdecl **)(int, int))(a1 + 162))(a1, 1024); /*0xffe64f80*/
      sub_FFE653F9(a1, v8); /*0xffe64f8a*/
      (*(void (__cdecl **)(int, int))(a1 + 166))(a1, 1024); /*0xffe64f91*/
    }
  }
  return 0; /*0xffe64f9a*/
}

// 0xffe64fa2 sub_FFE64FA2
int __fastcall sub_FFE64FA2(int a1, int a2, unsigned __int16 i, char n255, _BYTE *a5)
{
  int v6; // ebp
  char v7; // cl
  unsigned __int8 v8; // bl
  unsigned int v10; // [esp+8h] [ebp-8h] BYREF
  int v11; // [esp+Ch] [ebp-4h]

  v10 = 0; /*0xffe64fa4*/
  if ( (unsigned __int16)(i - 64) > 0x31u )
  {
    ((void (*)(int, const char *, ...))loc_FFE64550)(a1, "    CmosBufferReadWrite: Invalid CmosAddress (0x%X)\n", i);
    return -2147483646; /*0xffe6507a*/
  }
  else
  {
    v6 = (unsigned __int16)(i - 63); /*0xffe64fc7*/
    v7 = *(_BYTE *)(*(_DWORD *)(a1 + 118) + 2 * v6); /*0xffe64fc9*/
    LOBYTE(v11) = *(_BYTE *)(*(_DWORD *)(a1 + 118) + 2 * v6); /*0xffe64fd0*/
    if ( a2 == 1 ) /*0xffe64fd7*/
    {
      *a5 = v7; /*0xffe64fd9*/
    }
    else
    {
      v8 = *a5 | v7 & ~n255; /*0xffe64fe9*/
      if ( !(*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 1024) ) /*0xffe64ff5*/
        sub_FFE65518(a1, i, v11, v8, &v10); /*0xffe65012*/
      *(_BYTE *)(*(_DWORD *)(a1 + 118) + 2 * v6) = v8; /*0xffe65024*/
      if ( !(*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 1024) ) /*0xffe65027*/
      {
        if ( (*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 256) ) /*0xffe6503a*/
        {
          (*(void (__cdecl **)(int, int))(a1 + 162))(a1, 1024); /*0xffe65048*/
          sub_FFE653F9(a1, v10); /*0xffe65053*/
          (*(void (__cdecl **)(int, int))(a1 + 166))(a1, 1024); /*0xffe6505a*/
        }
      }
    }
    return 0; /*0xffe65063*/
  }
}

// 0xffe65084 sub_FFE65084
int __fastcall sub_FFE65084(int a1, int a2, unsigned int i, char n255, char *a5)
{
  unsigned __int16 j_1; // dx
  unsigned __int16 j; // cx

  if ( !(*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 0x2000) ) /*0xffe65091*/
    return sub_FFE64EE0(a1, a2, i, n255, a5); /*0xffe65091*/
  if ( !(*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 0x80000) /*0xffe650b9*/
    || !(*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 0x8000) )
  {
    return sub_FFE64FA2(a1, a2, i, n255, a5); /*0xffe650b9*/
  }
  j_1 = *(_WORD *)(a1 + 128); /*0xffe650c5*/
  for ( j = 1; j < j_1; ++j ) /*0xffe650d2*/
  {
    if ( (unsigned __int16)i <= *(_WORD *)(*(_DWORD *)(a1 + 124) + 2 * j) ) /*0xffe650df*/
      break; /*0xffe650df*/
  }
  if ( (_WORD)i == *(_WORD *)(*(_DWORD *)(a1 + 124) + 2 * j) ) /*0xffe650f2*/
    return sub_FFE64EE0(a1, a2, i, n255, a5); /*0xffe65115*/
  else
    return sub_FFE64FA2(a1, a2, i, n255, a5); /*0xffe65101*/
}

// 0xffe65121 sub_FFE65121
int __fastcall sub_FFE65121(int a1, int a2, unsigned __int16 a3, char *va)
{
  int v4; // ebp
  char n255; // [esp+10h] [ebp-Ch]

  v4 = *(_DWORD *)(a1 + 112); /*0xffe65126*/
  n255 = 0; /*0xffe65138*/
  if ( !a2 ) /*0xffe6514d*/
  {
    if ( ((unsigned __int8)~(255 >> (8 - (*(unsigned __int16 *)(v4 + 2 * a3) >> 12))) & (unsigned __int8)*va) != 0 ) /*0xffe65165*/
      return -2147483646; /*0xffe6516c*/
    *va <<= *(_BYTE *)(v4 + 2 * a3) & 7; /*0xffe65177*/
    n255 = (unsigned __int8)(255 >> (8 - (*(unsigned __int16 *)(v4 + 2 * a3) >> 12))) << (*(_BYTE *)(v4 + 2 * a3) & 7); /*0xffe65196*/
  }
  sub_FFE65084(a1, a2, (*(_WORD *)(v4 + 2 * a3) >> 3) & 0x1FF, n255, va); /*0xffe651b8*/
  if ( a2 == 1 ) /*0xffe651c5*/
  {
    *va = (unsigned __int8)*va >> (*(_BYTE *)(v4 + 2 * a3) & 7); /*0xffe651ce*/
    *va &= 255 >> (8 - (*(unsigned __int16 *)(v4 + 2 * a3) >> 12)); /*0xffe651df*/
  }
  return 0; /*0xffe651e3*/
}

// 0xffe651eb sub_FFE651EB
int __cdecl sub_FFE651EB(int a1, int n0xE, unsigned __int8 *a3)
{
  int v3; // ecx
  unsigned __int16 v5; // ax

  if ( (unsigned __int16)n0xE <= 0xEu ) /*0xffe651f7*/
  {
    v3 = a1; /*0xffe651f9*/
    return sub_FFE64E08(v3, 1, n0xE, a3); /*0xffe65232*/
  }
  if ( (unsigned __int16)n0xE < 0x1000u ) /*0xffe65206*/
  {
    if ( !(*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 0x80000) ) /*0xffe65211*/
      return -2147483641; /*0xffe65222*/
    v3 = a1; /*0xffe65224*/
    return sub_FFE64E08(v3, 1, n0xE, a3); /*0xffe65224*/
  }
  v5 = sub_FFE64D71(a1, n0xE); /*0xffe65239*/
  if ( v5 ) /*0xffe65244*/
    return sub_FFE65121(a1, 1, v5, (char *)a3); /*0xffe65250*/
  else
    return -2147483646; /*0xffe65259*/
}

// 0xffe65262 sub_FFE65262
int __cdecl sub_FFE65262(int a1, char *p_n0xD_1)
{
  char *p_n0xD; // esi
  char *v4; // [esp-8h] [ebp-Ch]

  p_n0xD = p_n0xD_1; /*0xffe65266*/
  if ( !p_n0xD_1 ) /*0xffe6526b*/
    return -2147483646; /*0xffe6526d*/
  v4 = p_n0xD_1 + 3; /*0xffe6527e*/
  *p_n0xD_1 = 14; /*0xffe65281*/
  p_n0xD[2] = 13; /*0xffe65289*/
  sub_FFE64EE0(a1, 1, 0xDu, 0, v4); /*0xffe6528f*/
  sub_FFE64EE0(a1, 1, (unsigned __int8)*p_n0xD, 0, p_n0xD + 1); /*0xffe652a3*/
  if ( (*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 0x2000) ) /*0xffe652ae*/
    p_n0xD[4] |= 1u; /*0xffe652bb*/
  else
    p_n0xD[4] &= ~1u; /*0xffe652c1*/
  p_n0xD[4] &= 0xC3u; /*0xffe652c5*/
  if ( (*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 0x80000) ) /*0xffe652cf*/
  {
    p_n0xD[4] &= ~2u; /*0xffe652df*/
    (*(void (__cdecl **)(int, int, char *))(a1 + 4))(a1, 4658, (char *)&p_n0xD_1 + 3); /*0xffe652ed*/
    p_n0xD[4] ^= (p_n0xD[4] ^ (p_n0xD[4] | (4 * HIBYTE(p_n0xD_1)))) & 4; /*0xffe6530c*/
    (*(void (__cdecl **)(int, int, char *))(a1 + 4))(a1, 4660, (char *)&p_n0xD_1 + 3); /*0xffe6530f*/
    p_n0xD[4] ^= (p_n0xD[4] ^ (p_n0xD[4] | (16 * HIBYTE(p_n0xD_1)))) & 0x10; /*0xffe6532e*/
    (*(void (__cdecl **)(int, int, char *))(a1 + 4))(a1, 4661, (char *)&p_n0xD_1 + 3); /*0xffe65331*/
    p_n0xD[4] ^= (p_n0xD[4] ^ (p_n0xD[4] | (32 * HIBYTE(p_n0xD_1)))) & 0x20; /*0xffe65350*/
    (*(void (__cdecl **)(int, int, char *))(a1 + 4))(a1, 4659, (char *)&p_n0xD_1 + 3); /*0xffe65353*/
    p_n0xD[4] ^= (p_n0xD[4] ^ (p_n0xD[4] | (8 * HIBYTE(p_n0xD_1)))) & 8; /*0xffe6536b*/
  }
  else
  {
    p_n0xD[4] |= 2u; /*0xffe65370*/
    if ( (*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 4096) ) /*0xffe6537a*/
      p_n0xD[4] |= 4u; /*0xffe65386*/
    if ( (*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 0x4000) ) /*0xffe65390*/
      p_n0xD[4] |= 0x10u; /*0xffe6539c*/
    if ( (*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 16) ) /*0xffe653a3*/
      p_n0xD[4] |= 0x20u; /*0xffe653af*/
    if ( (*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 128) ) /*0xffe653b9*/
      p_n0xD[4] |= 8u; /*0xffe653c5*/
  }
  return 0; /*0xffe653cc*/
}

// 0xffe653cf sub_FFE653CF
int __cdecl sub_FFE653CF(int a1, _WORD *a2)
{
  (*(void (__cdecl **)(int, int, _WORD *))(a1 + 4))(a1, 33280, a2); /*0xffe653e0*/
  *a2 <<= 8; /*0xffe653e3*/
  (*(void (__cdecl **)(int, int, _WORD *))(a1 + 4))(a1, 33288, a2); /*0xffe653ee*/
  return 0; /*0xffe653f6*/
}

// 0xffe653f9 sub_FFE653F9
int __cdecl sub_FFE653F9(int a1, unsigned int a2)
{
  int v2; // eax

  v2 = *(_DWORD *)(a1 + 178); /*0xffe65404*/
  if ( v2 ) /*0xffe6540c*/
    *(_WORD *)(v2 + 28) = a2; /*0xffe6540e*/
  (*(void (__cdecl **)(int, int))(a1 + 162))(a1, 1024); /*0xffe65419*/
  (*(void (__cdecl **)(int, int, unsigned int))(a1 + 8))(a1, 33288, a2); /*0xffe65426*/
  (*(void (__cdecl **)(int, int, unsigned int))(a1 + 8))(a1, 33280, a2 >> 8); /*0xffe65433*/
  (*(void (__cdecl **)(int, int))(a1 + 166))(a1, 1024); /*0xffe65438*/
  return 0; /*0xffe65443*/
}

// 0xffe65447 sub_FFE65447
int __thiscall sub_FFE65447(char *this)
{
  int (__cdecl **v2)(_DWORD); // edi
  int (__cdecl *v3)(_DWORD); // eax
  char v4; // cl

  v2 = *(int (__cdecl ***)(_DWORD))(this + 210); /*0xffe6544b*/
  v3 = *v2; /*0xffe65451*/
  if ( !*v2 ) /*0xffe65451*/
    goto LABEL_5; /*0xffe65451*/
  do /*0xffe65461*/
  {
    ++v2; /*0xffe6545c*/
    v4 = v3(*(_DWORD *)this); /*0xffe6545f*/
    v3 = *v2; /*0xffe65461*/
  }
  while ( *v2 ); /*0xffe65461*/
  if ( v4 ) /*0xffe65469*/
    (*(void (__cdecl **)(char *, int))(this + 166))(this, 4096); /*0xffe65471*/
  else
LABEL_5:
    (*(void (__cdecl **)(char *, int))(this + 162))(this, 4096); /*0xffe6547f*/
  return 0; /*0xffe65487*/
}

// 0xffe6548c sub_FFE6548C
int __fastcall sub_FFE6548C(_DWORD *a1, __int16 n8, int a3)
{
  unsigned __int8 v6; // [esp+Bh] [ebp-1h] BYREF

  if ( (n8 & 0x80u) != 0 ) /*0xffe65498*/
  {
    sub_FFE64E08((int)a1, 1, 14, &v6); /*0xffe654a3*/
    if ( a3 == 1 ) /*0xffe654ae*/
    {
      v6 |= 0x40u; /*0xffe654b0*/
    }
    else if ( !*a1 ) /*0xffe654b6*/
    {
      v6 &= ~0x40u; /*0xffe654bb*/
    }
    sub_FFE64E08((int)a1, 0, 14, &v6); /*0xffe654c9*/
  }
  if ( (n8 & 0x1000) != 0 ) /*0xffe654d6*/
  {
    sub_FFE64E08((int)a1, 1, 14, &v6); /*0xffe654e3*/
    if ( a3 == 1 ) /*0xffe654ee*/
    {
      v6 |= 0x80u; /*0xffe654f0*/
    }
    else if ( !*a1 ) /*0xffe654f6*/
    {
      v6 &= ~0x80u; /*0xffe654fb*/
    }
    sub_FFE64E08((int)a1, 0, 14, &v6); /*0xffe65509*/
  }
  return 0; /*0xffe65510*/
}

// 0xffe65518 sub_FFE65518
int __fastcall sub_FFE65518(int a1, unsigned __int16 n0xD, unsigned __int8 a3, unsigned __int8 a4, _WORD *a5)
{
  unsigned __int16 v6; // si
  unsigned __int16 v7; // cx
  unsigned __int16 v8; // bx
  unsigned __int16 v9; // bx

  v6 = 1; /*0xffe65520*/
  v7 = 1; /*0xffe65521*/
  v8 = *(_WORD *)(a1 + 128); /*0xffe65523*/
  if ( v8 > 1u ) /*0xffe6552d*/
  {
    do /*0xffe65540*/
    {
      if ( n0xD <= *(_WORD *)(*(_DWORD *)(a1 + 124) + 2 * v7) ) /*0xffe6553a*/
        break; /*0xffe6553a*/
      ++v7; /*0xffe6553c*/
    }
    while ( v7 < v8 ); /*0xffe65540*/
  }
  v9 = *(_WORD *)(a1 + 134); /*0xffe65542*/
  if ( v9 > 1u ) /*0xffe6554c*/
  {
    do /*0xffe65562*/
    {
      if ( n0xD <= *(_WORD *)(*(_DWORD *)(a1 + 130) + 2 * v6) ) /*0xffe6555c*/
        break; /*0xffe6555c*/
      ++v6; /*0xffe6555e*/
    }
    while ( v6 < v9 ); /*0xffe65562*/
  }
  if ( n0xD == *(_WORD *)(*(_DWORD *)(a1 + 124) + 2 * v7) || n0xD == *(_WORD *)(*(_DWORD *)(a1 + 130) + 2 * v6) ) /*0xffe6557d*/
  {
    (*(void (__cdecl **)(int, int))(a1 + 166))(a1, 256); /*0xffe655b1*/
  }
  else
  {
    sub_FFE653CF(a1, a5); /*0xffe65585*/
    *a5 += a4 - a3; /*0xffe65597*/
    (*(void (__cdecl **)(int, int))(a1 + 162))(a1, 256); /*0xffe655a0*/
  }
  return 0; /*0xffe655b9*/
}

// 0xffe655c0 sub_FFE655C0
int __cdecl sub_FFE655C0(int a1, _WORD *a2)
{
  int v2; // esi
  unsigned __int16 j_1; // bx
  unsigned __int16 k_1; // bp
  unsigned int i; // edi
  unsigned __int16 j; // cx
  unsigned __int16 k; // cx
  __int16 v9; // [esp+10h] [ebp-4h] BYREF

  v2 = a1; /*0xffe655c8*/
  j_1 = 1; /*0xffe655d0*/
  k_1 = 1; /*0xffe655d1*/
  *a2 = 0; /*0xffe655d5*/
  for ( i = *(unsigned __int16 *)(v2 + 108); (unsigned __int16)i <= *(_WORD *)(v2 + 110); ++i ) /*0xffe655d8*/
  {
    for ( j = *(_WORD *)(v2 + 134); j_1 < j; ++j_1 ) /*0xffe655e8*/
    {
      if ( (unsigned __int16)i <= *(_WORD *)(*(_DWORD *)(v2 + 130) + 2 * j_1) ) /*0xffe655f7*/
        break; /*0xffe655f7*/
    }
    if ( (_WORD)i != *(_WORD *)(*(_DWORD *)(v2 + 130) + 2 * j_1) ) /*0xffe6560c*/
    {
      for ( k = *(_WORD *)(v2 + 128); k_1 < k; ++k_1 ) /*0xffe65618*/
      {
        if ( (unsigned __int16)i <= *(_WORD *)(*(_DWORD *)(v2 + 124) + 2 * k_1) ) /*0xffe65624*/
          break; /*0xffe65624*/
      }
      if ( (_WORD)i != *(_WORD *)(*(_DWORD *)(v2 + 124) + 2 * k_1) ) /*0xffe65636*/
      {
        sub_FFE65084(v2, 1, i, 0, (char *)&a1); /*0xffe65645*/
        *a2 += (unsigned __int8)a1; /*0xffe65656*/
      }
    }
  }
  sub_FFE653CF(v2, &v9); /*0xffe6566a*/
  if ( *a2 == v9 ) /*0xffe65683*/
  {
    (*(void (__cdecl **)(int, int))(v2 + 166))(v2, 128); /*0xffe6569b*/
  }
  else
  {
    (*(void (__cdecl **)(int, int))(v2 + 162))(v2, 128); /*0xffe65685*/
    ((void (__cdecl *)(int, const char *))loc_FFE64550)(v2, "    ...CMOS_BAD_CHECKSUM\n"); /*0xffe65691*/
  }
  return 0; /*0xffe656a3*/
}

// 0xffe656ab sub_FFE656AB
int sub_FFE656AB(int a1, int n0xE, ...)
{
  int v2; // ecx
  unsigned __int16 v4; // ax
  va_list va; // [esp+18h] [ebp+10h] BYREF

  va_start(va, n0xE);
  if ( (unsigned __int16)n0xE <= 0xEu ) /*0xffe656b7*/
  {
    v2 = a1; /*0xffe656b9*/
    return sub_FFE64E08(v2, 0, n0xE, (unsigned __int8 *)va); /*0xffe656fb*/
  }
  if ( (unsigned __int16)n0xE >= 0x1000u ) /*0xffe656c6*/
  {
    v4 = sub_FFE64D71(a1, n0xE); /*0xffe65702*/
    if ( v4 ) /*0xffe6570d*/
      return sub_FFE65121(a1, 0, v4, (char *)va); /*0xffe65720*/
  }
  else
  {
    if ( !(*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 0x80000) ) /*0xffe656d1*/
      return -2147483641; /*0xffe656e2*/
    if ( (unsigned __int16)(n0xE - 64) > 0x3Fu ) /*0xffe656eb*/
    {
      v2 = a1; /*0xffe656ed*/
      return sub_FFE64E08(v2, 0, n0xE, (unsigned __int8 *)va); /*0xffe656ed*/
    }
  }
  return -2147483646; /*0xffe65727*/
}

// 0xffe6572b sub_FFE6572B
int __cdecl sub_FFE6572B(int a1)
{
  int v1; // esi
  unsigned __int16 v2; // bx
  int v3; // ebp
  int v4; // eax
  unsigned int i; // edi
  int v6; // edx
  unsigned __int16 v7; // cx
  int v8; // esi
  int v9; // edx
  unsigned __int16 v10; // dx
  int v11; // ecx
  int v12; // esi
  char v14; // [esp+13h] [ebp-15h] BYREF
  int v15; // [esp+14h] [ebp-14h]
  int v16; // [esp+18h] [ebp-10h]
  unsigned int v17; // [esp+1Ch] [ebp-Ch] BYREF
  int v18; // [esp+24h] [ebp-4h]

  v1 = a1; /*0xffe65731*/
  v2 = 1; /*0xffe65737*/
  v16 = 1; /*0xffe6573f*/
  v15 = 1; /*0xffe65743*/
  v3 = 0; /*0xffe65747*/
  v4 = *(_DWORD *)(a1 + 158) & 0x2000; /*0xffe65751*/
  v17 = 0; /*0xffe65753*/
  v18 = v4; /*0xffe65758*/
  (*(void (__cdecl **)(int, int))(a1 + 166))(a1, 0x2000); /*0xffe6575c*/
  (*(void (__cdecl **)(int, int))(v1 + 162))(v1, 1024); /*0xffe65768*/
  if ( (*(unsigned __int8 (__cdecl **)(int, int))(v1 + 170))(v1, 16) ) /*0xffe65771*/
    (*(void (__cdecl **)(int, int))(a1 + 166))(a1, 128); /*0xffe65784*/
  i = *(unsigned __int16 *)(a1 + 108); /*0xffe6578c*/
  if ( (unsigned __int16)i <= *(_WORD *)(a1 + 110) )
  {
    v6 = v15; /*0xffe6579a*/
    while ( (unsigned __int16)v6 < *(_WORD *)(v1 + 122) )
    {
      v7 = *(_WORD *)(v1 + 134); /*0xffe657a8*/
      if ( v2 < v7 ) /*0xffe657b2*/
      {
        v8 = *(_DWORD *)(v1 + 130); /*0xffe657b4*/
        do /*0xffe657c7*/
        {
          if ( (unsigned __int16)i <= *(_WORD *)(v8 + 2 * v2) ) /*0xffe657c1*/
            break; /*0xffe657c1*/
          ++v2; /*0xffe657c3*/
        }
        while ( v2 < v7 ); /*0xffe657c7*/
        v1 = a1; /*0xffe657c9*/
      }
      if ( (_WORD)i == *(_WORD *)(*(_DWORD *)(v1 + 130) + 2 * v2) )
      {
        v9 = v6 + 0xFFFF; /*0xffe657dc*/
      }
      else
      {
        if ( !(*(unsigned __int8 (__cdecl **)(int, int))(v1 + 170))(v1, 32896) ) /*0xffe657ea*/
          goto LABEL_32; /*0xffe657ea*/
        v10 = *(_WORD *)(v1 + 128); /*0xffe657f6*/
        v11 = v16; /*0xffe657fd*/
        if ( (unsigned __int16)v16 < v10 ) /*0xffe65804*/
        {
          v12 = *(_DWORD *)(v1 + 124); /*0xffe65806*/
          do /*0xffe65816*/
          {
            if ( (unsigned __int16)i <= *(_WORD *)(v12 + 2 * (unsigned __int16)v11) ) /*0xffe65810*/
              break; /*0xffe65810*/
            ++v11; /*0xffe65812*/
          }
          while ( (unsigned __int16)v11 < v10 ); /*0xffe65816*/
          v1 = a1; /*0xffe65818*/
          v16 = v11; /*0xffe6581c*/
        }
        if ( (_WORD)i != *(_WORD *)(*(_DWORD *)(v1 + 124) + 2 * (unsigned __int16)v11) )
        {
LABEL_32:
          v14 = *(_BYTE *)(*(_DWORD *)(v1 + 118) + 2 * (unsigned __int16)v15); /*0xffe6583d*/
          v3 = sub_FFE65084(v1, 0, i, 255, &v14); /*0xffe65851*/
          if ( v3 < 0 )
          {
            ((void (*)(int, const char *, ...))loc_FFE64550)(
              v1,
              "    Error: unable to write to register: 0x%X\n",
              (unsigned __int16)i);
            (*(void (__cdecl **)(int, int))(v1 + 162))(v1, 512); /*0xffe65885*/
            break; /*0xffe65885*/
          }
        }
        v9 = v15; /*0xffe6585a*/
      }
      ++i; /*0xffe6585e*/
      v6 = v9 + 1; /*0xffe6585f*/
      v15 = v6; /*0xffe65860*/
      if ( (unsigned __int16)i > *(_WORD *)(v1 + 110) ) /*0xffe65868*/
        break; /*0xffe65868*/
    }
    if ( v3 < 0 ) /*0xffe65890*/
      goto LABEL_28; /*0xffe65890*/
  }
  if ( (*(unsigned __int8 (__cdecl **)(int, int))(v1 + 170))(v1, 512) )
  {
LABEL_28:
    ((void (__cdecl *)(int, const char *))loc_FFE64550)(v1, "    Error: Could not load Optimal Defaults\n");
    v3 = -2147483645; /*0xffe658d7*/
  }
  else
  {
    sub_FFE655C0(v1, &v17); /*0xffe658aa*/
    sub_FFE653F9(v1, v17); /*0xffe658b4*/
    (*(void (__cdecl **)(int, int))(v1 + 166))(v1, 128); /*0xffe658bf*/
  }
  *(_DWORD *)(v1 + 158) |= v18; /*0xffe658e0*/
  (*(void (__cdecl **)(int, int))(v1 + 166))(v1, 1024); /*0xffe658ec*/
  (*(void (__cdecl **)(int, int))(v1 + 162))(v1, 0x4000); /*0xffe658f8*/
  return v3; /*0xffe65903*/
}

// 0xffe6590b sub_FFE6590B
char __fastcall sub_FFE6590B(int a1, unsigned __int8 a2)
{
  unsigned __int8 v3; // [esp+1h] [ebp-1h] BYREF

  v3 = HIBYTE(a1); /*0xffe6590e*/
  sub_FFE64E08(a1, 1, a2, &v3); /*0xffe6591a*/
  return (v3 & 0xF) + 10 * (v3 >> 4); /*0xffe65936*/
}

// 0xffe65938 sub_FFE65938
int __fastcall sub_FFE65938(int a1, unsigned __int8 a2, unsigned __int8 a3)
{
  a3 = a3 % 0xAu + 16 * (a3 / 0xAu); /*0xffe6594f*/
  return sub_FFE64E08(a1, 0, a2, &a3); /*0xffe65963*/
}

// 0xffe65966 sub_FFE65966
int __cdecl sub_FFE65966(int a1, int a2)
{
  int v2; // edi

  v2 = a2; /*0xffe6596b*/
  if ( !a2 || !a1 ) /*0xffe6597b*/
    return -2147483646; /*0xffe65a3b*/
  sub_FFE64E08(a1, 1, 11, (unsigned __int8 *)&a2 + 3); /*0xffe6598d*/
  HIBYTE(a2) |= 0x80u; /*0xffe65992*/
  sub_FFE64E08(a1, 0, 11, (unsigned __int8 *)&a2 + 3); /*0xffe659a0*/
  sub_FFE65938(a1, 0x32u, *(_WORD *)v2 / 0x64u); /*0xffe659b4*/
  sub_FFE65938(a1, 9u, *(_WORD *)v2 % 0x64u); /*0xffe659c5*/
  sub_FFE65938(a1, 8u, *(_BYTE *)(v2 + 2)); /*0xffe659d3*/
  sub_FFE65938(a1, 7u, *(_BYTE *)(v2 + 3)); /*0xffe659e1*/
  sub_FFE65938(a1, 4u, *(_BYTE *)(v2 + 4)); /*0xffe659ef*/
  sub_FFE65938(a1, 2u, *(_BYTE *)(v2 + 5)); /*0xffe659fd*/
  sub_FFE65938(a1, 0, *(_BYTE *)(v2 + 6)); /*0xffe65a0b*/
  sub_FFE64E08(a1, 1, 11, (unsigned __int8 *)&a2 + 3); /*0xffe65a1b*/
  HIBYTE(a2) &= ~0x80u; /*0xffe65a20*/
  sub_FFE64E08(a1, 0, 11, (unsigned __int8 *)&a2 + 3); /*0xffe65a2e*/
  return 0; /*0xffe65a40*/
}

// 0xffe65a44 sub_FFE65A44
int __cdecl sub_FFE65A44(int a1, int a2)
{
  __int16 v2; // si
  char v3; // al

  if ( !a2 || !a1 ) /*0xffe65a54*/
    return -2147483646; /*0xffe65abd*/
  v2 = 100 * (unsigned __int8)sub_FFE6590B(a1, 0x32u); /*0xffe65a67*/
  *(_WORD *)a2 = v2 + (unsigned __int8)sub_FFE6590B(a1, 9u); /*0xffe65a79*/
  *(_BYTE *)(a2 + 2) = sub_FFE6590B(a1, 8u); /*0xffe65a83*/
  *(_BYTE *)(a2 + 3) = sub_FFE6590B(a1, 7u); /*0xffe65a8f*/
  *(_BYTE *)(a2 + 4) = sub_FFE6590B(a1, 4u); /*0xffe65a9b*/
  *(_BYTE *)(a2 + 5) = sub_FFE6590B(a1, 2u); /*0xffe65aa7*/
  v3 = sub_FFE6590B(a1, 0); /*0xffe65aac*/
  *(_DWORD *)(a2 + 8) = 0; /*0xffe65ab1*/
  *(_BYTE *)(a2 + 6) = v3; /*0xffe65ab5*/
  return 0; /*0xffe65ac2*/
}

// 0xffe65ac5 sub_FFE65AC5
int sub_FFE65AC5()
{
  int v0; // eax
  _BYTE v2[4]; // [esp+0h] [ebp-8h] BYREF
  int v3; // [esp+4h] [ebp-4h] BYREF

  v0 = sub_FFE663C8(); /*0xffe65aca*/
  if ( (*(int (__cdecl **)(int, void *, _DWORD, _BYTE *, int *))(*(_DWORD *)v0 + 32))(v0, &unk_FFE66BAC, 0, v2, &v3) >= 0 ) /*0xffe65ae9*/
    return v3; /*0xffe65aef*/
  else
    return 0; /*0xffe65aeb*/
}

// 0xffe65af6 sub_FFE65AF6
int sub_FFE65AF6(int a1, int _nASSERT_EFI_ERROR_(Status___%r)_n, ...)
{
  int result; // eax
  int (__cdecl **v3)(int, int, char *); // esi
  va_list va; // [esp+10h] [ebp+Ch] BYREF

  va_start(va, _nASSERT_EFI_ERROR_(Status___%r)_n);
  result = sub_FFE65AC5(); /*0xffe65af7*/
  v3 = (int (__cdecl **)(int, int, char *))result; /*0xffe65afc*/
  if ( result ) /*0xffe65b00*/
  {
    result = sub_FFE6630C(); /*0xffe65b02*/
    if ( (result & a1) != 0 ) /*0xffe65b0d*/
      return (*v3)(a1, _nASSERT_EFI_ERROR_(Status___%r)_n, (char *)va); /*0xffe65b19*/
  }
  return result; /*0xffe65b1e*/
}

// 0xffe65b20 sub_FFE65B20
int __fastcall sub_FFE65B20(
        int e:__hs__MdePkg__Library__PeiServicesTablePointerLibIdt__PeiServ,
        int n48,
        int PeiServices____((void__)_0))
{
  int result; // eax

  result = sub_FFE65AC5(); /*0xffe65b26*/
  if ( result ) /*0xffe65b2d*/
    return (*(int (__cdecl **)(int, int, int))(result + 4))( /*0xffe65b35*/
             e:__hs__MdePkg__Library__PeiServicesTablePointerLibIdt__PeiServ,
             n48,
             PeiServices____((void__)_0));
  return result; /*0xffe65b3b*/
}

// 0xffe65b3e sub_FFE65B3E
int sub_FFE65B3E(int a1, EFI_SYSTEM_TABLE *SystemTable, char *CmosManagerPeiEntry_Entry_n, ...)
{
  int result; // eax
  char *CmosManagerPeiEntry_Entry_n_1; // eax
  va_list va; // [esp+18h] [ebp+14h] BYREF

  va_start(va, CmosManagerPeiEntry_Entry_n);
  result = (*(int (__stdcall **)(EFI_SYSTEM_TABLE *))(LODWORD(SystemTable->Hdr.Signature) + 32))(SystemTable); /*0xffe65b57*/
  if ( result >= 0 ) /*0xffe65b5f*/
  {
    if ( SystemTable ) /*0xffe65b67*/
    {
      result = sub_FFE6630C(); /*0xffe65b69*/
      if ( (result & a1) != 0 ) /*0xffe65b73*/
      {
        CmosManagerPeiEntry_Entry_n_1 = CmosManagerPeiEntry_Entry_n; /*0xffe65b75*/
        if ( *CmosManagerPeiEntry_Entry_n ) /*0xffe65b78*/
        {
          do /*0xffe65b98*/
          {
            if ( *CmosManagerPeiEntry_Entry_n_1 == 37 ) /*0xffe65b80*/
            {
              if ( *++CmosManagerPeiEntry_Entry_n_1 == 115 ) /*0xffe65b88*/
              {
                *CmosManagerPeiEntry_Entry_n_1 = 97; /*0xffe65b8a*/
              }
              else if ( *CmosManagerPeiEntry_Entry_n_1 == 71 ) /*0xffe65b92*/
              {
                *CmosManagerPeiEntry_Entry_n_1 = 103; /*0xffe65b94*/
              }
            }
            ++CmosManagerPeiEntry_Entry_n_1; /*0xffe65b97*/
          }
          while ( *CmosManagerPeiEntry_Entry_n_1 ); /*0xffe65b98*/
          CmosManagerPeiEntry_Entry_n_1 = CmosManagerPeiEntry_Entry_n; /*0xffe65b9d*/
        }
        return ((int (__cdecl *)(int, char *, char *))LODWORD(SystemTable->Hdr.Signature))( /*0xffe65ba6*/
                 a1,
                 CmosManagerPeiEntry_Entry_n_1,
                 (char *)va);
      }
    }
  }
  return result; /*0xffe65bae*/
}

// 0xffe65bb0 sub_FFE65BB0
int __fastcall sub_FFE65BB0(unsigned int _EDI, unsigned int *p_n0xA, int n0xA, int _EDX)
{
  int n0xA_1; // eax
  int n64; // ecx

  n0xA_1 = n0xA; /*0xffe65bbf*/
  _EDX = _EDX; /*0xffe65bc2*/
  _EDI = 0; /*0xffe65bc8*/
  n64 = 64; /*0xffe65bca*/
  do
  {
    __asm /*0xffe65bd1*/
    {
      rcl edx, 1
      rcl edi, 1
    }
    n0xA_1 = 2 * n0xA_1 + (_EDI >= _EDI); /*0xffe65bda*/
    _EDI = _EDI - (_EDI >= _EDI ? _EDI : 0);
    --n64; /*0xffe65be0*/
  }
  while ( n64 );
  if ( p_n0xA ) /*0xffe65bf3*/
    *p_n0xA = _EDI; /*0xffe65bf8*/
  return n0xA_1; /*0xffe65bee*/
}

// 0xffe65c04 sub_FFE65C04
_BYTE *__fastcall sub_FFE65C04(_BYTE *a1, unsigned int n10, __int64 n0xA, char a4)
{
  int v4; // ebx
  int _EDX; // edx
  int n0xA_1; // ecx
  char v9; // al

  v4 = HIDWORD(n0xA); /*0xffe65c05*/
  if ( n0xA >= 0 ) /*0xffe65c16*/
    goto LABEL_2; /*0xffe65c16*/
  if ( n10 == 10 ) /*0xffe65c25*/
  {
    n0xA_1 = -(int)n0xA; /*0xffe65c2b*/
    _EDX = (unsigned __int64)-n0xA >> 32; /*0xffe65c30*/
    goto LABEL_8; /*0xffe65c32*/
  }
  if ( a4 ) /*0xffe65c39*/
LABEL_2:
    _EDX = HIDWORD(n0xA); /*0xffe65c1e*/
  else
    _EDX = 0; /*0xffe65c3b*/
  n0xA_1 = n0xA; /*0xffe65c3d*/
LABEL_8:
  if ( __PAIR64__(n0xA_1, _EDX) ) /*0xffe65c43*/
  {
    do /*0xffe65c6c*/
    {
      n0xA_1 = sub_FFE65BB0(n10, (unsigned int *)&n0xA, n0xA_1, _EDX); /*0xffe65c54*/
      if ( (unsigned int)n0xA >= 0xA ) /*0xffe65c5d*/
        v9 = n0xA + 87; /*0xffe65c63*/
      else
        v9 = n0xA + 48; /*0xffe65c5f*/
      *a1++ = v9; /*0xffe65c65*/
    }
    while ( __PAIR64__(n0xA_1, _EDX) ); /*0xffe65c6c*/
  }
  else
  {
    *a1++ = 48; /*0xffe65c70*/
  }
  if ( n10 == 10 && v4 < 0 ) /*0xffe65c7b*/
    *a1++ = 45; /*0xffe65c83*/
  *a1 = 0; /*0xffe65c88*/
  return a1 - 1; /*0xffe65c87*/
}

// 0xffe65c92 sub_FFE65C92
char *__fastcall sub_FFE65C92(char *a1, unsigned int n10, __int64 n0xA, char a4)
{
  char *v5; // esi
  char *v6; // eax
  char v7; // dl

  v5 = a1; /*0xffe65c9e*/
  v6 = sub_FFE65C04(a1, n10, n0xA, a4); /*0xffe65ca4*/
  if ( a1 < v6 ) /*0xffe65cae*/
  {
    do /*0xffe65cbc*/
    {
      v7 = *v5; /*0xffe65cb2*/
      *v5++ = *v6; /*0xffe65cb4*/
      *v6-- = v7; /*0xffe65cb7*/
    }
    while ( v5 < v6 ); /*0xffe65cbc*/
  }
  return a1; /*0xffe65cc0*/
}

// 0xffe65cc3 sub_FFE65CC3
int __fastcall sub_FFE65CC3(char *a1, char **a2)
{
  char v2; // bl
  unsigned int n0x7FFFFFFF; // esi
  char n57; // al
  char n10; // al
  char v7; // [esp+Ch] [ebp-4h]

  v2 = 1; /*0xffe65cc9*/
  v7 = 0; /*0xffe65ccd*/
  n0x7FFFFFFF = 0; /*0xffe65cd1*/
  while ( *a1 == 32 || *a1 == 9 ) /*0xffe65cdb*/
    ++a1; /*0xffe65cdd*/
  if ( !*a1 ) /*0xffe65ce0*/
  {
    *a2 = a1; /*0xffe65ce6*/
    return 0; /*0xffe65cea*/
  }
  if ( *a1 == 45 ) /*0xffe65cee*/
  {
    v2 = -1; /*0xffe65cf0*/
    ++a1; /*0xffe65cf3*/
  }
  if ( *a1 == 43 ) /*0xffe65cf7*/
    ++a1; /*0xffe65cf9*/
  while ( 1 ) /*0xffe65d00*/
  {
    n57 = *a1; /*0xffe65d00*/
    if ( *a1 >= 48 && n57 <= 57 ) /*0xffe65d08*/
    {
      n10 = n57 - 48; /*0xffe65d0a*/
      goto LABEL_17; /*0xffe65d0c*/
    }
    if ( (n57 & 0xDFu) < 0x41 || (n57 & 0xDFu) > 0x5A ) /*0xffe65d1b*/
      break; /*0xffe65d1b*/
    n10 = (n57 & 0xDF) - 55; /*0xffe65d1f*/
LABEL_17:
    if ( n10 >= 10 ) /*0xffe65d27*/
      break; /*0xffe65d27*/
    n0x7FFFFFFF = n10 + 10 * n0x7FFFFFFF; /*0xffe65d2c*/
    if ( v2 == 1 ) /*0xffe65d31*/
    {
      if ( n0x7FFFFFFF < 0x80000000 ) /*0xffe65d35*/
        goto LABEL_23; /*0xffe65d35*/
    }
    else if ( n0x7FFFFFFF <= 0x80000000 ) /*0xffe65d3b*/
    {
      goto LABEL_23; /*0xffe65d3b*/
    }
    v7 = 1; /*0xffe65d3d*/
LABEL_23:
    ++a1; /*0xffe65d42*/
  }
  *a2 = a1; /*0xffe65d45*/
  if ( v7 ) /*0xffe65d4c*/
  {
    n0x7FFFFFFF = 0x7FFFFFFF; /*0xffe65d4e*/
    if ( v2 == -1 ) /*0xffe65d56*/
      n0x7FFFFFFF = 0x80000000; /*0xffe65d58*/
  }
  return n0x7FFFFFFF * v2; /*0xffe65d61*/
}

// 0xffe65d66 sub_FFE65D66
char *__thiscall sub_FFE65D66(char *this)
{
  char *i; // eax
  char n122; // dl

  for ( i = this; *i; ++i ) /*0xffe65d66*/
  {
    n122 = *i; /*0xffe65d6d*/
    if ( *i >= 97 && n122 <= 122 ) /*0xffe65d77*/
      *i = n122 - 32; /*0xffe65d7c*/
  }
  return this; /*0xffe65d86*/
}

// 0xffe65d87 sub_FFE65D87
char *__fastcall sub_FFE65D87(int n2)
{
  unsigned int n3; // edx

  if ( !n2 ) /*0xffe65d89*/
    return "EFI_SUCCESS"; /*0xffe65d90*/
  if ( n2 < 0 ) /*0xffe65d91*/
  {
    n3 = n2 & 0x1FFFFFFF; /*0xffe65dc7*/
    if ( (n2 & 0xA0000000) == 0xA0000000 ) /*0xffe65dd0*/
    {
      if ( n3 >= 3 ) /*0xffe65dd5*/
        return 0; /*0xffe65dd5*/
      // "EFI_INTERRUPT_PENDING"
      return &aEfiInterruptPe[25 * n3]; /*0xffe65dda*/
    }
    else if ( (n2 & 0xC0000000) == 0xC0000000 ) /*0xffe65de9*/
    {
      if ( n3 > 2 ) /*0xffe65dee*/
        return 0; /*0xffe65dee*/
      // "ABLE_YET"
      return &aAbleYet[25 * n3]; /*0xffe65df3*/
    }
    else
    {
      if ( n3 > 0x1E ) /*0xffe65dfd*/
        return 0; /*0xffe65dfd*/
      // "E_BOF"
      return &aEBof[25 * n3]; /*0xffe65e02*/
    }
  }
  else if ( (n2 & 0x20000000) != 0 ) /*0xffe65d99*/
  {
    if ( (unsigned int)n2 >= 2 ) /*0xffe65d9e*/
      return 0; /*0xffe65da2*/
    // "EFI_WARN_INTERRUPT_SOURCE_PENDING"
    return &aEfiWarnInterru[35 * n2]; /*0xffe65da6*/
  }
  else
  {
    if ( (unsigned int)n2 > 4 ) /*0xffe65daf*/
      return 0; /*0xffe65daf*/
    // "... DEBUG BUFFER OVERFLOW!!!\n"
    return &aDebugBufferOve[26 * n2 + 6]; /*0xffe65db4*/
  }
}

// 0xffe65e09 sub_FFE65E09
int __fastcall sub_FFE65E09(char *a1, int a2, char *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x, int va)
{
  char *v4; // ebx
  int v5; // edi
  char *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1; // esi
  int *v7; // ecx
  int i_1; // edx
  char n37; // al
  char *v10; // esi
  int i_2; // edx
  int *v12; // ecx
  int m_2; // eax
  char n97; // ah
  char *k; // ecx
  unsigned __int8 *v16; // edi
  int v17; // ebx
  int v18; // esi
  int v19; // ecx
  int v20; // eax
  int v21; // eax
  const char *v22; // eax
  char n105; // ah
  unsigned int n10_1; // eax
  int *v25; // ecx
  unsigned int n10_3; // edx
  char v27; // dl
  unsigned int m; // eax
  char *v29; // ecx
  char *j; // eax
  int v32; // [esp-1Ch] [ebp-6Ch]
  int v33; // [esp-18h] [ebp-68h]
  int v34; // [esp-14h] [ebp-64h]
  int v35; // [esp-10h] [ebp-60h]
  int v36; // [esp-Ch] [ebp-5Ch]
  __int64 n0xA; // [esp-Ch] [ebp-5Ch]
  int v38; // [esp-8h] [ebp-58h]
  int v39; // [esp-4h] [ebp-54h]
  int n10; // [esp-4h] [ebp-54h]
  char v41; // [esp-4h] [ebp-54h]
  char v42; // [esp+Eh] [ebp-42h]
  char n32; // [esp+Fh] [ebp-41h]
  char *v44; // [esp+10h] [ebp-40h]
  int *v45; // [esp+14h] [ebp-3Ch]
  int i; // [esp+18h] [ebp-38h]
  int v47; // [esp+1Ch] [ebp-34h]
  int v49; // [esp+24h] [ebp-2Ch]
  unsigned int n10_2; // [esp+24h] [ebp-2Ch]
  unsigned int m_1; // [esp+28h] [ebp-28h]
  char *v52; // [esp+28h] [ebp-28h]
  int n2; // [esp+28h] [ebp-28h]
  char *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_2; // [esp+2Ch] [ebp-24h] BYREF
  char v55[32]; // [esp+30h] [ebp-20h] BYREF
  char *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_3; // [esp+58h] [ebp+8h]

  v4 = a1; /*0xffe65e1a*/
  v44 = a1; /*0xffe65e1c*/
  v5 = a2; /*0xffe65e21*/
  v47 = a2; /*0xffe65e23*/
  if ( !a1 ) /*0xffe65e29*/
    return -1; /*0xffe65e29*/
  %08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1 = %08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x; /*0xffe65e2f*/
  if ( !%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x ) /*0xffe65e34*/
    return -1; /*0xffe66174*/
  if ( a2 != 1 ) /*0xffe65e3f*/
  {
    v7 = (int *)(va - 4); /*0xffe65e48*/
    i_1 = va - 8; /*0xffe65e4b*/
    v45 = (int *)(va - 4); /*0xffe65e4e*/
    for ( i = va - 8; ; i_1 = i ) /*0xffe65e52*/
    {
      n37 = *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1; /*0xffe65e56*/
      if ( !*%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1 ) /*0xffe65e5a*/
        break; /*0xffe65e5a*/
      if ( n37 != 37 ) /*0xffe65e62*/
      {
        *v4++ = n37; /*0xffe65e64*/
        ++%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1; /*0xffe65e67*/
LABEL_8:
        --v5; /*0xffe65e68*/
        v44 = v4; /*0xffe65e69*/
        v47 = v5; /*0xffe65e6d*/
        goto LABEL_65; /*0xffe65e71*/
      }
      v10 = %08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1 + 1; /*0xffe65e76*/
      if ( *v10 == 37 ) /*0xffe65e7b*/
      {
        %08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1 = v10 + 1; /*0xffe65e7d*/
        *v4++ = 37; /*0xffe65e7e*/
        goto LABEL_8; /*0xffe65e81*/
      }
      n32 = 32; /*0xffe65e83*/
      if ( *v10 == 48 ) /*0xffe65e8a*/
      {
        n32 = 48; /*0xffe65e8c*/
        ++v10; /*0xffe65e90*/
      }
      if ( *v10 == 42 ) /*0xffe65e94*/
      {
        i_2 = i_1 + 4; /*0xffe65e96*/
        %08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1 = v10 + 1; /*0xffe65e99*/
        v12 = v7 + 1; /*0xffe65e9a*/
        i = i_2; /*0xffe65e9d*/
        v45 = v12; /*0xffe65ea1*/
        m_2 = *v12; /*0xffe65ea5*/
      }
      else
      {
        m_2 = sub_FFE65CC3(v10, &%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_2); /*0xffe65eb1*/
        %08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1 = %08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_2; /*0xffe65eb6*/
        i_2 = i; /*0xffe65eba*/
        v12 = v45; /*0xffe65ec0*/
      }
      m_1 = m_2; /*0xffe65ec4*/
      n97 = *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1; /*0xffe65ec8*/
      %08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_3 = %08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1; /*0xffe65eca*/
      if ( *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1 == 115 || n97 == 97 ) /*0xffe65ed9*/
      {
        i = i_2 + 4; /*0xffe6612b*/
        v45 = v12 + 1; /*0xffe6612f*/
        for ( j = (char *)v12[1]; *j; ++j ) /*0xffe66133*/
        {
          v47 = --v5; /*0xffe6613a*/
          if ( !v5 ) /*0xffe6613e*/
            goto LABEL_67; /*0xffe6613e*/
          *v4++ = *j; /*0xffe66140*/
          v44 = v4; /*0xffe66143*/
        }
        goto LABEL_64; /*0xffe6614c*/
      }
      if ( n97 == 83 ) /*0xffe65ee2*/
      {
        i = i_2 + 4; /*0xffe65eea*/
        v45 = v12 + 1; /*0xffe65ef0*/
        for ( k = (char *)v12[1]; *(_WORD *)k; k += 2 ) /*0xffe65ef4*/
        {
          v47 = --v5; /*0xffe65efb*/
          if ( !v5 ) /*0xffe65eff*/
            goto LABEL_69; /*0xffe65eff*/
          *v4++ = *k; /*0xffe65f07*/
          v44 = v4; /*0xffe65f0a*/
        }
        ++%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1; /*0xffe65f16*/
      }
      else
      {
        if ( n97 == 99 ) /*0xffe65f1f*/
        {
          i = i_2 + 4; /*0xffe65f27*/
          v45 = v12 + 1; /*0xffe65f2b*/
          *v4++ = *((_BYTE *)v12 + 4); /*0xffe65f31*/
          v44 = v4; /*0xffe65f34*/
          goto LABEL_64; /*0xffe65f38*/
        }
        if ( (n97 & 0xDF) == 0x47 ) /*0xffe65f43*/
        {
          v52 = v4; /*0xffe65f4c*/
          v45 = v12 + 1; /*0xffe65f53*/
          i = i_2 + 4; /*0xffe65f57*/
          v16 = (unsigned __int8 *)v12[1]; /*0xffe65f5b*/
          v17 = sub_FFE66382(v16); /*0xffe65f67*/
          v18 = (unsigned __int16)sub_FFE6635B(v16 + 4); /*0xffe65f71*/
          v19 = (unsigned __int16)sub_FFE6635B(v16 + 6); /*0xffe65f79*/
          v39 = v16[15]; /*0xffe65f80*/
          v38 = v16[14]; /*0xffe65f85*/
          v36 = v16[13]; /*0xffe65f8a*/
          v35 = v16[12]; /*0xffe65f8f*/
          v34 = v16[11]; /*0xffe65f94*/
          v33 = v16[10]; /*0xffe65f99*/
          v32 = v16[9]; /*0xffe65f9e*/
          v20 = v16[8]; /*0xffe65f9f*/
          v5 = v47; /*0xffe65fa3*/
          v21 = sub_FFE6617E( /*0xffe65fb6*/
                  v44,
                  v47,
                  "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
                  v17,
                  v18,
                  v19,
                  v20,
                  v32,
                  v33,
                  v34,
                  v35,
                  v36,
                  v38,
                  v39);
          %08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1 = %08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_3; /*0xffe65fbb*/
          v4 = &v44[v21]; /*0xffe65fbe*/
          v49 = v21; /*0xffe65fc3*/
          v44 += v21; /*0xffe65fc7*/
          if ( *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_3 == 71 ) /*0xffe65fce*/
          {
            sub_FFE65D66(v52); /*0xffe65fd4*/
            v21 = v49; /*0xffe65fd9*/
          }
LABEL_29:
          v5 -= v21; /*0xffe65fdd*/
          v47 = v5; /*0xffe65fdf*/
          goto LABEL_64; /*0xffe65fe3*/
        }
        if ( n97 == 114 ) /*0xffe65feb*/
        {
          v45 = v12 + 1; /*0xffe65ff3*/
          i = i_2 + 4; /*0xffe65ff7*/
          n2 = v12[1]; /*0xffe65fff*/
          v22 = sub_FFE65D87(n2); /*0xffe66003*/
          if ( v22 ) /*0xffe6600a*/
            v21 = sub_FFE6617E(v4, v5, "%s", v22); /*0xffe6602e*/
          else
            v21 = sub_FFE6617E( /*0xffe6601c*/
                    v4,
                    v5,
                    "%s(%X)",
                    aStatusCode, // "Status Code"
                    n2);
          v4 += v21; /*0xffe66036*/
          v44 = v4; /*0xffe66038*/
          goto LABEL_29; /*0xffe6603c*/
        }
        if ( n97 == 108 ) /*0xffe66041*/
        {
          ++%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1; /*0xffe66043*/
          v42 = 1; /*0xffe66044*/
        }
        else
        {
          v42 = 0; /*0xffe6604b*/
        }
        n105 = *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1; /*0xffe66050*/
        if ( *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1 == 100 || n105 == 105 ) /*0xffe6605a*/
        {
          n10 = 10; /*0xffe66071*/
LABEL_44:
          n10_1 = n10; /*0xffe66073*/
          n10_2 = n10; /*0xffe66079*/
          if ( v42 ) /*0xffe6607d*/
          {
            v25 = v12 + 2; /*0xffe66082*/
            v41 = 1; /*0xffe66085*/
            i = i_2 + 8; /*0xffe66087*/
            n0xA = *(_QWORD *)(i_2 + 8); /*0xffe6608e*/
            n10_3 = n10_1; /*0xffe66090*/
          }
          else
          {
            v25 = v12 + 1; /*0xffe66097*/
            i = i_2 + 4; /*0xffe6609a*/
            v41 = 0; /*0xffe6609e*/
            n0xA = *v25; /*0xffe660a8*/
            n10_3 = n10_2; /*0xffe660a4*/
          }
          v45 = v25; /*0xffe660a9*/
          sub_FFE65C92(v55, n10_3, n0xA, v41); /*0xffe660b1*/
          if ( *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1 == 88 /*0xffe660c1*/
            || *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1 == 112 )
          {
            sub_FFE65D66(v55); /*0xffe660c7*/
          }
          v27 = v55[0]; /*0xffe660cc*/
          for ( m = 0; v55[m]; ++m ) /*0xffe660d4*/
            ; /*0xffe660d6*/
          if ( m < m_1 ) /*0xffe660e4*/
          {
            while ( 1 ) /*0xffe660ea*/
            {
              ++m; /*0xffe660ea*/
              v47 = --v5; /*0xffe660ee*/
              if ( !v5 ) /*0xffe660f2*/
                goto LABEL_67; /*0xffe660f2*/
              *v4++ = n32; /*0xffe660f4*/
              v44 = v4; /*0xffe660f7*/
              if ( m >= m_1 ) /*0xffe660fd*/
              {
                v27 = v55[0]; /*0xffe660ff*/
                break; /*0xffe660ff*/
              }
            }
          }
          v29 = v55; /*0xffe66103*/
          if ( v27 ) /*0xffe66109*/
          {
            while ( 1 ) /*0xffe6610b*/
            {
              v47 = --v5; /*0xffe6610e*/
              if ( !v5 ) /*0xffe66112*/
                break; /*0xffe66112*/
              *v4++ = *v29++; /*0xffe66116*/
              v44 = v4; /*0xffe6611a*/
              if ( !*v29 ) /*0xffe6611e*/
                goto LABEL_64; /*0xffe66121*/
            }
LABEL_67:
            *v4 = 0; /*0xffe66163*/
            return v4 - a1; /*0xffe66163*/
          }
LABEL_64:
          ++%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1; /*0xffe6614e*/
          goto LABEL_65; /*0xffe6614e*/
        }
        if ( (n105 & 0xDF) == 0x58 || n105 == 112 ) /*0xffe66067*/
        {
          n10 = 16; /*0xffe6606d*/
          goto LABEL_44; /*0xffe6606f*/
        }
      }
LABEL_65:
      if ( v5 == 1 ) /*0xffe66154*/
        break; /*0xffe66154*/
      v7 = v45; /*0xffe66156*/
    }
  }
LABEL_69:
  *v4 = 0; /*0xffe66170*/
  return v4 - a1; /*0xffe66177*/
}

// 0xffe6617e sub_FFE6617E
int sub_FFE6617E(char *a1, int a2, char *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x, ...)
{
  va_list va; // [esp+10h] [ebp+10h] BYREF

  va_start(va, %08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x);
  return sub_FFE65E09(a1, a2, %08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x, (int)va); /*0xffe66196*/
}

// 0xffe66197 sub_FFE66197
int __cdecl sub_FFE66197(int a1, int a2, unsigned __int16 n0x7F, unsigned __int8 *a4)
{
  char v5; // al
  unsigned __int8 v6; // al

  if ( n0x7F > 0x7Fu ) /*0xffe661a2*/
    return -2147483646; /*0xffe661a4*/
  if ( n0x7F <= 9u && a2 == 1 ) /*0xffe661bd*/
  {
    do /*0xffe661cb*/
    {
      __outbyte(0x70u, 0x8Au); /*0xffe661c4*/
      v5 = __inbyte(0x71u); /*0xffe661c8*/
    }
    while ( v5 < 0 ); /*0xffe661cb*/
  }
  __outbyte(0x70u, n0x7F | 0x80); /*0xffe661d5*/
  if ( a2 == 1 ) /*0xffe661da*/
  {
    v6 = __inbyte(0x71u); /*0xffe661df*/
    *a4 = v6; /*0xffe661e3*/
  }
  else
  {
    __outbyte(0x71u, *a4); /*0xffe661ef*/
  }
  return 0; /*0xffe661a9*/
}

// 0xffe661f6 sub_FFE661F6
int sub_FFE661F6()
{
  unsigned __int8 v0; // al

  __outbyte(0x70u, 0x8Du); /*0xffe661fe*/
  v0 = __inbyte(0x71u); /*0xffe66205*/
  return v0 >> 7; /*0xffe6620c*/
}

// 0xffe6620d sub_FFE6620D
char __cdecl sub_FFE6620D(int a1)
{
  char v1; // bl
  _DWORD v3[4]; // [esp+4h] [ebp-18h] BYREF
  int n4; // [esp+14h] [ebp-8h] BYREF
  int (__cdecl **v5)(_DWORD, const __int16 *, _DWORD *, _DWORD, int *, int *); // [esp+18h] [ebp-4h] BYREF

  v1 = 0; /*0xffe66217*/
  n4 = 4; /*0xffe66219*/
  v3[0] = 20351105; /*0xffe66220*/
  v3[1] = 1260242093; /*0xffe66227*/
  v3[2] = 2060792246; /*0xffe6622e*/
  v3[3] = 1809565838; /*0xffe66235*/
  v5 = 0; /*0xffe6623c*/
  if ( a1 /*0xffe66278*/
    && ((*(int (__cdecl **)(int, void *, _DWORD, _DWORD, int (__cdecl ***)(_DWORD, const __int16 *, _DWORD *, _DWORD, int *, int *)))(*(_DWORD *)a1 + 32))(
          a1,
          &unk_FFE66B9C,
          0,
          0,
          &v5) < 0
     || (*v5)(v5, L"MonotonicCounter", v3, 0, &n4, &a1) < 0) )
  {
    return 1; /*0xffe6627a*/
  }
  return v1; /*0xffe6627e*/
}

// 0xffe66283 sub_FFE66283
char sub_FFE66283()
{
  return 1; /*0xffe66285*/
}

// 0xffe66286 sub_FFE66286
int __cdecl sub_FFE66286(int a1, int a2, __int16 a3, unsigned __int8 *a4)
{
  unsigned __int8 v4; // al

  if ( (unsigned __int16)(a3 - 128) > 0x7Fu ) /*0xffe66291*/
    return -2147483646; /*0xffe662c0*/
  __outbyte(0x72u, a3); /*0xffe66299*/
  if ( a2 == 1 ) /*0xffe6629f*/
  {
    v4 = __inbyte(0x73u); /*0xffe662a7*/
    *a4 = v4; /*0xffe662ac*/
  }
  else
  {
    __outbyte(0x73u, *a4); /*0xffe662bc*/
  }
  return 0; /*0xffe662bf*/
}

// 0xffe662c6 sub_FFE662C6
char sub_FFE662C6()
{
  int v0; // ecx
  char result; // al

  v0 = sub_FFE663FA(); /*0xffe662cb*/
  result = *(_BYTE *)(v0 + 1024068) | 0x80; /*0xffe662d3*/
  *(_BYTE *)(v0 + 1024068) = result; /*0xffe662d5*/
  return result; /*0xffe662db*/
}

// 0xffe6630c sub_FFE6630C
int sub_FFE6630C()
{
  unsigned __int8 v0; // al
  char n3; // al
  char n3_1; // cl

  v0 = __inbyte(0x70u); /*0xffe66312*/
  __outbyte(0x70u, v0 & 0x80 | 0x4A); /*0xffe66317*/
  n3 = __inbyte(0x71u); /*0xffe6631e*/
  n3_1 = n3; /*0xffe6631f*/
  if ( (unsigned __int8)n3 <= 3u ) /*0xffe66324*/
  {
LABEL_4:
    if ( !n3_1 ) /*0xffe6633f*/
      return 0; /*0xffe6633f*/
    goto LABEL_5; /*0xffe6633f*/
  }
  n3_1 = n3; /*0xffe66326*/
  if ( !n3 ) /*0xffe6632e*/
  {
    n3_1 = MEMORY[0xFDAF0490] & 2 | 1; /*0xffe6633a*/
    goto LABEL_4; /*0xffe6633a*/
  }
LABEL_5:
  if ( n3_1 != -1 )
    return n3_1 != 1 ? -2147483578 : -2147483644;
  return 0; /*0xffe66357*/
}

// 0xffe6635b sub_FFE6635B
__int16 __thiscall sub_FFE6635B(void *this)
{
  int v2; // eax

  if ( !this ) /*0xffe66360*/
  {
    v2 = sub_FFE65AC5(); /*0xffe66362*/
    if ( v2 ) /*0xffe66369*/
      (*(void (__cdecl **)(const char *, int, const char *))(v2 + 4))( /*0xffe66377*/
        "e:\\hs\\MdePkg\\Library\\BaseLib\\Unaligned.c",
        38,
        "Buffer != ((void *) 0)");
  }
  return *(_WORD *)this; /*0xffe66380*/
}

// 0xffe66382 sub_FFE66382
int __thiscall sub_FFE66382(void *this)
{
  int v2; // eax

  if ( !this ) /*0xffe66387*/
  {
    v2 = sub_FFE65AC5(); /*0xffe66389*/
    if ( v2 ) /*0xffe66390*/
      (*(void (__cdecl **)(const char *, int, const char *))(v2 + 4))( /*0xffe663a1*/
        "e:\\hs\\MdePkg\\Library\\BaseLib\\Unaligned.c",
        141,
        "Buffer != ((void *) 0)");
  }
  return *(_DWORD *)this; /*0xffe663a9*/
}

// 0xffe663c8 sub_FFE663C8
int sub_FFE663C8()
{
  int v0; // esi
  _BYTE v2[2]; // [esp+4h] [ebp-8h] BYREF
  int v3; // [esp+6h] [ebp-6h]

  sub_FFE66417(v2); /*0xffe663d1*/
  v0 = *(_DWORD *)(v3 - 4); /*0xffe663d9*/
  if ( !v0 ) /*0xffe663de*/
    sub_FFE65B20( /*0xffe663ed*/
      (int)"e:\\hs\\MdePkg\\Library\\PeiServicesTablePointerLibIdt\\PeiServicesTablePointer.c",
      48,
      (int)"PeiServices != ((void *) 0)");
  return v0; /*0xffe663f5*/
}

// 0xffe663fa sub_FFE663FA
int sub_FFE663FA()
{
  int v0; // eax

  v0 = sub_FFE6643A(); /*0xffe663fa*/
  return (*(int (__cdecl **)(int))(v0 + 16))(5); /*0xffe66405*/
}

// 0xffe66406 sub_FFE66406
int sub_FFE66406()
{
  int v0; // ebx
  int v1; // eax

  v0 = sub_FFE663FA() + 1024064; /*0xffe662dd*/
  if ( (v0 & 1) != 0 ) /*0xffe662e2*/
  {
    v1 = sub_FFE65AC5(); /*0xffe662e4*/
    if ( v1 ) /*0xffe662eb*/
      (*(void (__cdecl **)(const char *, int, const char *))(v1 + 4))( /*0xffe662fc*/
        "e:\\hs\\MdePkg\\Library\\BaseIoLibIntrinsic\\IoLib.c",
        183,
        "(Address & 1) == 0");
  }
  *(_WORD *)v0 = 1280; /*0xffe66307*/
  return 1280; /*0xffe6630b*/
}

// 0xffe66417 sub_FFE66417
void *__thiscall sub_FFE66417(void *this)
{
  void *this_1; // eax

  if ( !this ) /*0xffe6641d*/
    sub_FFE65B20((int)"e:\\hs\\MdePkg\\Library\\BaseLib\\X86ReadIdtr.c", 37, (int)"Idtr != ((void *) 0)"); /*0xffe6642c*/
  this_1 = this; /*0xffe66432*/
  __sidt(this); /*0xffe66435*/
  return this_1; /*0xffe66439*/
}

// 0xffe6643a sub_FFE6643A
void *__thiscall sub_FFE6643A(void *this)
{
  int v1; // eax
  int v2; // eax
  int v3; // eax
  void *this_1; // [esp+0h] [ebp-4h]

  this_1 = this; /*0xffe6643d*/
  v1 = sub_FFE663C8(); /*0xffe6643e*/
  v2 = (*(int (__stdcall **)(int))(*(_DWORD *)v1 + 32))(v1); /*0xffe66453*/
  if ( v2 < 0 ) /*0xffe6645b*/
  {
    sub_FFE65AF6(0x80000000, (int)"\nASSERT_EFI_ERROR (Status = %r)\n", v2); /*0xffe66468*/
    v3 = sub_FFE65AC5(); /*0xffe66470*/
    if ( v3 ) /*0xffe66477*/
      (*(void (__cdecl **)(const char *, int, const char *))(v3 + 4))( /*0xffe66485*/
        "e:\\hs\\MdePkg\\Library\\PeiPcdLib\\PeiPcdLib.c",
        49,
        "!EFI_ERROR (Status)");
  }
  return this_1; /*0xffe66490*/
}

// 0xffe664a6 sub_FFE664A6
char *__usercall sub_FFE664A6@<eax>(int value_2@<eax>, char *buf, unsigned int n220, char a4)
{
  unsigned int n220_1; // ecx
  char *buf_1; // edi
  __int16 value; // bx
  int value_1; // eax
  int v8; // edx
  char n220_2; // dl
  unsigned int count; // ecx

  n220_1 = n220; /*0xffe664a6*/
  LOBYTE(value_2) = a4; /*0xffe664aa*/
  buf_1 = buf; /*0xffe664af*/
  BYTE1(value_2) = a4; /*0xffe664b8*/
  value = value_2; /*0xffe664ba*/
  value_1 = value_2 << 16; /*0xffe664bd*/
  LOWORD(value_1) = value; /*0xffe664c0*/
  if ( n220 >= 4 ) /*0xffe664c6*/
  {
    v8 = (unsigned __int8)buf & 3; /*0xffe664ca*/
    if ( ((unsigned __int8)buf & 3) != 0 ) /*0xffe664cd*/
    {
      memset(buf, value, 4 - v8); /*0xffe664d8*/
      buf_1 = &buf[4 - v8]; /*0xffe664d8*/
      n220_1 = n220 - (4 - v8); /*0xffe664da*/
    }
    n220_2 = n220_1; /*0xffe664dc*/
    count = n220_1 >> 2; /*0xffe664de*/
    memset32(buf_1, value_1, count); /*0xffe664e1*/
    buf_1 += 4 * count; /*0xffe664e1*/
    n220_1 = n220_2 & 3; /*0xffe664e6*/
  }
  memset(buf_1, value, n220_1); /*0xffe664e8*/
  return buf; /*0xffe664ec*/
}

// 0xffe664fc sub_FFE664FC
unsigned int __cdecl sub_FFE664FC(unsigned int dst_1, char *src_1, unsigned int n4)
{
  char *src; // esi
  char *dst; // edi
  unsigned int count_2; // ecx
  char v10; // dl
  unsigned int n4_1; // eax
  unsigned int count; // eax
  int count_1; // ebx
  char count_3; // al
  unsigned int v15; // ecx
  int count_4; // eax

  __asm { pushfw } /*0xffe66502*/
  src = src_1; /*0xffe66507*/
  dst = (char *)dst_1; /*0xffe6650a*/
  count_2 = n4; /*0xffe6650d*/
  v10 = 0; /*0xffe66510*/
  n4_1 = (unsigned int)&src_1[-dst_1]; /*0xffe66514*/
  if ( (unsigned int)src_1 < dst_1 ) /*0xffe66516*/
  {
    n4_1 = dst_1 - (_DWORD)src_1; /*0xffe6651b*/
    if ( (unsigned int)&src_1[n4] >= dst_1 ) /*0xffe6651f*/
    {
      src = &src_1[n4]; /*0xffe66521*/
      dst = (char *)(n4 + dst_1); /*0xffe66523*/
      v10 = 1; /*0xffe66526*/
    }
  }
  if ( n4 < 4 || n4_1 < 4 ) /*0xffe66531*/
    goto LABEL_19; /*0xffe66531*/
  count = (unsigned __int8)src & 3; /*0xffe66537*/
  count_1 = (unsigned __int8)dst & 3; /*0xffe6653a*/
  if ( v10 ) /*0xffe6653f*/
  {
    --src; /*0xffe66541*/
    --dst; /*0xffe66542*/
  }
  if ( count == count_1 && count ) /*0xffe66549*/
  {
    if ( !v10 ) /*0xffe6654d*/
      count = 4 - count; /*0xffe66551*/
    qmemcpy(dst, src, count); /*0xffe66557*/
    src += count; /*0xffe66557*/
    dst += count; /*0xffe66557*/
    count_2 = n4 - count; /*0xffe66559*/
  }
  if ( v10 ) /*0xffe6655d*/
  {
    src -= 3; /*0xffe6655f*/
    dst -= 3; /*0xffe66562*/
  }
  count_3 = count_2; /*0xffe66565*/
  v15 = count_2 >> 2; /*0xffe66567*/
  qmemcpy(dst, src, 4 * v15); /*0xffe6656a*/
  src += 4 * v15; /*0xffe6656a*/
  dst += 4 * v15; /*0xffe6656a*/
  count_4 = count_3 & 3; /*0xffe6656c*/
  if ( count_4 ) /*0xffe6656f*/
  {
    if ( v10 ) /*0xffe66573*/
    {
      src += 4; /*0xffe66575*/
      dst += 4; /*0xffe66578*/
    }
    count_2 = count_4; /*0xffe6657b*/
LABEL_19:
    if ( v10 ) /*0xffe6657f*/
    {
      --src; /*0xffe66581*/
      --dst; /*0xffe66582*/
    }
    qmemcpy(dst, src, count_2); /*0xffe66583*/
  }
  __asm { popfw } /*0xffe66585*/
  return dst_1; /*0xffe66588*/
}

