undefined4 FUN_00418b58(int param_1,char *param_2,int param_3)

{
  byte bVar1;
  byte bVar2;
  byte bVar3;
  byte bVar4;
  char *pcVar5;
  int iVar6;
  int iVar7;
  byte bVar8;
  char *pcVar9;
  int __c;
  char *pcVar10;
  byte local_48 [4];
  int local_44;
  byte local_40;
  byte local_3f;
  byte local_3e;
  byte local_3d;
  byte local_3c;
  byte local_3b;
  undefined1 local_3a;
  char *local_38;
  char *local_34;
  int *local_30;
  byte *local_2c;
  
  if ((param_2 != (char *)0x0) && (pcVar9 = param_2 + param_3, 0 < param_3)) {
    if (param_2 < pcVar9) {
      local_38 = PTR_s_0123456789ABCDEFabcdef_004303f0;
      local_34 = PTR_s_0123456789_004303f4;
      local_30 = &local_44;
      local_2c = local_48;
      do {
        iVar6 = (int)*param_2;
        local_44 = 0;
        if (iVar6 == 0x26) {
          iVar6 = strncasecmp(param_2,"&quot;",6);
          if (iVar6 == 0) {
            local_44 = 6;
            iVar6 = 0x22;
            bVar8 = 0x22;
          }
          else {
            iVar6 = strncasecmp(param_2,"&lt;",4);
            if (iVar6 == 0) {
              local_44 = 4;
              iVar6 = 0x3c;
              bVar8 = 0x3c;
            }
            else {
              iVar6 = strncasecmp(param_2,"&gt;",4);
              if (iVar6 == 0) {
                local_44 = 4;
                iVar6 = 0x3e;
                bVar8 = 0x3e;
              }
              else {
                iVar6 = strncasecmp(param_2,"&apos;",6);
                if (iVar6 == 0) {
                  local_44 = 6;
                  iVar6 = 0x27;
                  bVar8 = 0x27;
                }
                else {
                  iVar6 = strncasecmp(param_2,"&amp;",5);
                  if (iVar6 != 0) {
                    iVar6 = strncasecmp(param_2,"&#x",3);
                    pcVar10 = param_2 + 3;
                    if (iVar6 == 0) {
                      iVar6 = 0;
                      while( true ) {
                        __c = (int)*pcVar10;
                        pcVar5 = strchr(local_38,__c);
                        iVar7 = iVar6 * 0x10;
                        if (pcVar5 == (char *)0x0) break;
                        iVar6 = __c + -0x30 + iVar7;
                        if (0x39 < __c) {
                          if (__c < 0x47) {
                            iVar6 = __c + -0x37 + iVar7;
                          }
                          else {
                            iVar6 = __c + -0x57 + iVar7;
                          }
                        }
                        pcVar10 = pcVar10 + 1;
                      }
                    }
                    else {
                      iVar6 = strncasecmp(param_2,"&#",2);
                      if (iVar6 != 0) {
                        return 0x6a;
                      }
                      pcVar10 = param_2 + 2;
                      iVar6 = 0;
                      while( true ) {
                        __c = (int)*pcVar10;
                        pcVar5 = strchr(local_34,__c);
                        if (pcVar5 == (char *)0x0) break;
                        iVar6 = __c + -0x30 + iVar6 * 10;
                        pcVar10 = pcVar10 + 1;
                      }
                    }
                    if (param_2 == pcVar10) {
                      return 0x6a;
                    }
                    if (__c != 0x3b) {
                      return 0x6a;
                    }
                    if ((iVar6 - 9U < 2) || (iVar6 == 0xd)) {
LAB_00419148:
                      local_44 = (int)pcVar10 - (int)param_2   //possible issue identified - semgrep
                    }
                    else {
                      local_44 = (int)pcVar10 - (int)param_2   //possible issue identified - semgrep
                      if ((0xd7df < iVar6 - 0x20U) &&
                         (local_44 = (int)pcVar10 - (int)param_2, 0x1ffd < iVar6 - 0xe000U)) {   //possible issue identified - semgrep
                        if (0xfffff < iVar6 - 0x10000U) {
                          return 0x6a;
                        }
                        goto LAB_00419148;
                      }
                    }
                    local_44 = local_44 + 1;
                    goto LAB_00418c2c;
                  }
                  local_44 = 5;
                  iVar6 = 0x26;
                  bVar8 = 0x26;
                }
              }
            }
          }
        }
        else {
          if ((iVar6 < 1) || (((1 < iVar6 - 9U && (iVar6 != 0xd)) && (0xd7df < iVar6 - 0x20U)))) {
            iVar6 = FUN_00417ef8(param_2,local_30);
            if (1 < iVar6 - 9U) {
              if (iVar6 == 0xd) {
                bVar8 = 0xd;
                goto LAB_00418c38;
              }
              if (((0xd7df < iVar6 - 0x20U) && (0x1ffd < iVar6 - 0xe000U)) &&
                 (0xfffff < iVar6 - 0x10000U)) {
                return 0x6a;
              }
            }
          }
          else {
            local_44 = 1;
          }
LAB_00418c2c:
          bVar8 = (byte)iVar6;
          if (iVar6 < 1) {
            return 0x6a;
          }
        }
LAB_00418c38:
        if (local_44 == 1) {
          param_2 = param_2 + 1;
          local_48[0] = bVar8;
          ixml_membuf_append(param_1 + 0x1c,local_2c);
        }
        else {
          if (iVar6 < 0x80) {
            local_3f = 0;
            local_40 = bVar8;
          }
          else {
            bVar1 = (byte)(iVar6 >> 6);
            if (iVar6 < 0x800) {
              local_3f = bVar8 & 0x3f | 0x80;
              local_3e = 0;
              local_40 = bVar1 | 0xc0;
            }
            else {
              bVar2 = (byte)(iVar6 >> 0xc);
              if (iVar6 < 0x10000) {
                local_3e = bVar8 & 0x3f | 0x80;
                local_3f = bVar1 & 0x3f | 0x80;
                local_3d = 0;
                local_40 = bVar2 | 0xe0;
              }
              else {
                bVar3 = (byte)(iVar6 >> 0x12);
                if (iVar6 < 0x200000) {
                  local_3d = bVar8 & 0x3f | 0x80;
                  local_3f = bVar2 & 0x3f | 0x80;
                  local_3e = bVar1 & 0x3f | 0x80;
                  local_3c = 0;
                  local_40 = bVar3 | 0xf0;
                }
                else {
                  bVar4 = (byte)((uint)iVar6 >> 0x18);
                  if (iVar6 < 0x4000000) {
                    local_3c = bVar8 & 0x3f | 0x80;
                    local_3f = bVar3 & 0x3f | 0x80;
                    local_3e = bVar2 & 0x3f | 0x80;
                    local_3d = bVar1 & 0x3f | 0x80;
                    local_3b = 0;
                    local_40 = bVar4 | 0xf8;
                  }
                  else {
                    local_3b = bVar8 & 0x3f | 0x80;
                    local_3f = bVar4 & 0x3f | 0x80;
                    local_3e = bVar3 & 0x3f | 0x80;
                    local_3d = bVar2 & 0x3f | 0x80;
                    local_3c = bVar1 & 0x3f | 0x80;
                    local_3a = 0;
                    local_40 = (char)bVar4 >> 6 | 0xfc;
                  }
                }
              }
            }
          }
          ixml_membuf_append_str(param_1 + 0x1c,&local_40);
          param_2 = param_2 + local_44;
        }
        if (pcVar9 <= param_2) goto LAB_00418d7c;
      } while (param_2 != (char *)0x0);
    }
    else {
LAB_00418d7c:
      if (param_2 <= pcVar9) {
        return 0;
      }
    }
  }
  return 0x6a;
}