    } elsif ($self->{next_input_character} == 65) { # A
      !!!next-input-character;
      if ($self->{next_input_character} == 69) { # E
        !!!next-input-character;
        if ($self->{next_input_character} == 108) { # l
          !!!next-input-character;
          if ($self->{next_input_character} == 105) { # i
            !!!next-input-character;
            if ($self->{next_input_character} == 103) { # g
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{00C6}>}; # AElig
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (69, 108, 105, $self->{next_input_character});
              $self->{next_input_character} = 65;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (69, 108, $self->{next_input_character});
            $self->{next_input_character} = 65;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (69, $self->{next_input_character});
          $self->{next_input_character} = 65;
        }
      } elsif ($self->{next_input_character} == 97) { # a
        !!!next-input-character;
        if ($self->{next_input_character} == 99) { # c
          !!!next-input-character;
          if ($self->{next_input_character} == 117) { # u
            !!!next-input-character;
            if ($self->{next_input_character} == 116) { # t
              !!!next-input-character;
              if ($self->{next_input_character} == 101) { # e
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00C1}>}; # Aacute
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (97, 99, 117, 116, $self->{next_input_character});
                $self->{next_input_character} = 65;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (97, 99, 117, $self->{next_input_character});
              $self->{next_input_character} = 65;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (97, 99, $self->{next_input_character});
            $self->{next_input_character} = 65;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (97, $self->{next_input_character});
          $self->{next_input_character} = 65;
        }
      } elsif ($self->{next_input_character} == 99) { # c
        !!!next-input-character;
        if ($self->{next_input_character} == 105) { # i
          !!!next-input-character;
          if ($self->{next_input_character} == 114) { # r
            !!!next-input-character;
            if ($self->{next_input_character} == 99) { # c
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{00C2}>}; # Acirc
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (99, 105, 114, $self->{next_input_character});
              $self->{next_input_character} = 65;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (99, 105, $self->{next_input_character});
            $self->{next_input_character} = 65;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (99, $self->{next_input_character});
          $self->{next_input_character} = 65;
        }
      } elsif ($self->{next_input_character} == 103) { # g
        !!!next-input-character;
        if ($self->{next_input_character} == 114) { # r
          !!!next-input-character;
          if ($self->{next_input_character} == 97) { # a
            !!!next-input-character;
            if ($self->{next_input_character} == 118) { # v
              !!!next-input-character;
              if ($self->{next_input_character} == 101) { # e
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00C0}>}; # Agrave
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (103, 114, 97, 118, $self->{next_input_character});
                $self->{next_input_character} = 65;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (103, 114, 97, $self->{next_input_character});
              $self->{next_input_character} = 65;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (103, 114, $self->{next_input_character});
            $self->{next_input_character} = 65;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (103, $self->{next_input_character});
          $self->{next_input_character} = 65;
        }
      } elsif ($self->{next_input_character} == 108) { # l
        !!!next-input-character;
        if ($self->{next_input_character} == 112) { # p
          !!!next-input-character;
          if ($self->{next_input_character} == 104) { # h
            !!!next-input-character;
            if ($self->{next_input_character} == 97) { # a
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{0391}>}; # Alpha
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (108, 112, 104, $self->{next_input_character});
              $self->{next_input_character} = 65;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (108, 112, $self->{next_input_character});
            $self->{next_input_character} = 65;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (108, $self->{next_input_character});
          $self->{next_input_character} = 65;
        }
      } elsif ($self->{next_input_character} == 114) { # r
        !!!next-input-character;
        if ($self->{next_input_character} == 105) { # i
          !!!next-input-character;
          if ($self->{next_input_character} == 110) { # n
            !!!next-input-character;
            if ($self->{next_input_character} == 103) { # g
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{00C5}>}; # Aring
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (114, 105, 110, $self->{next_input_character});
              $self->{next_input_character} = 65;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (114, 105, $self->{next_input_character});
            $self->{next_input_character} = 65;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (114, $self->{next_input_character});
          $self->{next_input_character} = 65;
        }
      } elsif ($self->{next_input_character} == 116) { # t
        !!!next-input-character;
        if ($self->{next_input_character} == 105) { # i
          !!!next-input-character;
          if ($self->{next_input_character} == 108) { # l
            !!!next-input-character;
            if ($self->{next_input_character} == 100) { # d
              !!!next-input-character;
              if ($self->{next_input_character} == 101) { # e
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00C3}>}; # Atilde
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (116, 105, 108, 100, $self->{next_input_character});
                $self->{next_input_character} = 65;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (116, 105, 108, $self->{next_input_character});
              $self->{next_input_character} = 65;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (116, 105, $self->{next_input_character});
            $self->{next_input_character} = 65;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (116, $self->{next_input_character});
          $self->{next_input_character} = 65;
        }
      } elsif ($self->{next_input_character} == 117) { # u
        !!!next-input-character;
        if ($self->{next_input_character} == 109) { # m
          !!!next-input-character;
          if ($self->{next_input_character} == 108) { # l
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{00C4}>}; # Auml
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (117, 109, $self->{next_input_character});
            $self->{next_input_character} = 65;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (117, $self->{next_input_character});
          $self->{next_input_character} = 65;
        }
      } elsif ($self->{next_input_character} == 77) { # M
        !!!next-input-character;
        if ($self->{next_input_character} == 80) { # P
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{0026}>}; # AMP
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (77, $self->{next_input_character});
          $self->{next_input_character} = 65;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 65;
      }
    } elsif ($self->{next_input_character} == 66) { # B
      !!!next-input-character;
      if ($self->{next_input_character} == 101) { # e
        !!!next-input-character;
        if ($self->{next_input_character} == 116) { # t
          !!!next-input-character;
          if ($self->{next_input_character} == 97) { # a
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{0392}>}; # Beta
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (101, 116, $self->{next_input_character});
            $self->{next_input_character} = 66;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (101, $self->{next_input_character});
          $self->{next_input_character} = 66;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 66;
      }
    } elsif ($self->{next_input_character} == 67) { # C
      !!!next-input-character;
      if ($self->{next_input_character} == 99) { # c
        !!!next-input-character;
        if ($self->{next_input_character} == 101) { # e
          !!!next-input-character;
          if ($self->{next_input_character} == 100) { # d
            !!!next-input-character;
            if ($self->{next_input_character} == 105) { # i
              !!!next-input-character;
              if ($self->{next_input_character} == 108) { # l
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00C7}>}; # Ccedil
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (99, 101, 100, 105, $self->{next_input_character});
                $self->{next_input_character} = 67;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (99, 101, 100, $self->{next_input_character});
              $self->{next_input_character} = 67;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (99, 101, $self->{next_input_character});
            $self->{next_input_character} = 67;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (99, $self->{next_input_character});
          $self->{next_input_character} = 67;
        }
      } elsif ($self->{next_input_character} == 104) { # h
        !!!next-input-character;
        if ($self->{next_input_character} == 105) { # i
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{03A7}>}; # Chi
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (104, $self->{next_input_character});
          $self->{next_input_character} = 67;
        }
      } elsif ($self->{next_input_character} == 79) { # O
        !!!next-input-character;
        if ($self->{next_input_character} == 80) { # P
          !!!next-input-character;
          if ($self->{next_input_character} == 89) { # Y
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{00A9}>}; # COPY
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (79, 80, $self->{next_input_character});
            $self->{next_input_character} = 67;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (79, $self->{next_input_character});
          $self->{next_input_character} = 67;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 67;
      }
    } elsif ($self->{next_input_character} == 68) { # D
      !!!next-input-character;
      if ($self->{next_input_character} == 97) { # a
        !!!next-input-character;
        if ($self->{next_input_character} == 103) { # g
          !!!next-input-character;
          if ($self->{next_input_character} == 103) { # g
            !!!next-input-character;
            if ($self->{next_input_character} == 101) { # e
              !!!next-input-character;
              if ($self->{next_input_character} == 114) { # r
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{2021}>}; # Dagger
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (97, 103, 103, 101, $self->{next_input_character});
                $self->{next_input_character} = 68;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (97, 103, 103, $self->{next_input_character});
              $self->{next_input_character} = 68;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (97, 103, $self->{next_input_character});
            $self->{next_input_character} = 68;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (97, $self->{next_input_character});
          $self->{next_input_character} = 68;
        }
      } elsif ($self->{next_input_character} == 101) { # e
        !!!next-input-character;
        if ($self->{next_input_character} == 108) { # l
          !!!next-input-character;
          if ($self->{next_input_character} == 116) { # t
            !!!next-input-character;
            if ($self->{next_input_character} == 97) { # a
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{0394}>}; # Delta
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (101, 108, 116, $self->{next_input_character});
              $self->{next_input_character} = 68;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (101, 108, $self->{next_input_character});
            $self->{next_input_character} = 68;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (101, $self->{next_input_character});
          $self->{next_input_character} = 68;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 68;
      }
    } elsif ($self->{next_input_character} == 69) { # E
      !!!next-input-character;
      if ($self->{next_input_character} == 84) { # T
        !!!next-input-character;
        if ($self->{next_input_character} == 72) { # H
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{00D0}>}; # ETH
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (84, $self->{next_input_character});
          $self->{next_input_character} = 69;
        }
      } elsif ($self->{next_input_character} == 97) { # a
        !!!next-input-character;
        if ($self->{next_input_character} == 99) { # c
          !!!next-input-character;
          if ($self->{next_input_character} == 117) { # u
            !!!next-input-character;
            if ($self->{next_input_character} == 116) { # t
              !!!next-input-character;
              if ($self->{next_input_character} == 101) { # e
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00C9}>}; # Eacute
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (97, 99, 117, 116, $self->{next_input_character});
                $self->{next_input_character} = 69;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (97, 99, 117, $self->{next_input_character});
              $self->{next_input_character} = 69;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (97, 99, $self->{next_input_character});
            $self->{next_input_character} = 69;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (97, $self->{next_input_character});
          $self->{next_input_character} = 69;
        }
      } elsif ($self->{next_input_character} == 99) { # c
        !!!next-input-character;
        if ($self->{next_input_character} == 105) { # i
          !!!next-input-character;
          if ($self->{next_input_character} == 114) { # r
            !!!next-input-character;
            if ($self->{next_input_character} == 99) { # c
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{00CA}>}; # Ecirc
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (99, 105, 114, $self->{next_input_character});
              $self->{next_input_character} = 69;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (99, 105, $self->{next_input_character});
            $self->{next_input_character} = 69;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (99, $self->{next_input_character});
          $self->{next_input_character} = 69;
        }
      } elsif ($self->{next_input_character} == 103) { # g
        !!!next-input-character;
        if ($self->{next_input_character} == 114) { # r
          !!!next-input-character;
          if ($self->{next_input_character} == 97) { # a
            !!!next-input-character;
            if ($self->{next_input_character} == 118) { # v
              !!!next-input-character;
              if ($self->{next_input_character} == 101) { # e
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00C8}>}; # Egrave
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (103, 114, 97, 118, $self->{next_input_character});
                $self->{next_input_character} = 69;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (103, 114, 97, $self->{next_input_character});
              $self->{next_input_character} = 69;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (103, 114, $self->{next_input_character});
            $self->{next_input_character} = 69;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (103, $self->{next_input_character});
          $self->{next_input_character} = 69;
        }
      } elsif ($self->{next_input_character} == 112) { # p
        !!!next-input-character;
        if ($self->{next_input_character} == 115) { # s
          !!!next-input-character;
          if ($self->{next_input_character} == 105) { # i
            !!!next-input-character;
            if ($self->{next_input_character} == 108) { # l
              !!!next-input-character;
              if ($self->{next_input_character} == 111) { # o
                !!!next-input-character;
                if ($self->{next_input_character} == 110) { # n
                  !!!next-input-character;
                  {
                    $r = {type => 'character', data => qq<\x{0395}>}; # Epsilon
                    if ($self->{next_input_character} == 0x003B) { # ;
                      !!!next-input-character;
                    } else {
                      !!!parse-error;
                      ## reconsume
                    }
                  }
                } else {
                  !!!parse-error;
                  !!!back-next-input-character (112, 115, 105, 108, 111, $self->{next_input_character});
                  $self->{next_input_character} = 69;
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (112, 115, 105, 108, $self->{next_input_character});
                $self->{next_input_character} = 69;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (112, 115, 105, $self->{next_input_character});
              $self->{next_input_character} = 69;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (112, 115, $self->{next_input_character});
            $self->{next_input_character} = 69;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (112, $self->{next_input_character});
          $self->{next_input_character} = 69;
        }
      } elsif ($self->{next_input_character} == 116) { # t
        !!!next-input-character;
        if ($self->{next_input_character} == 97) { # a
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{0397}>}; # Eta
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (116, $self->{next_input_character});
          $self->{next_input_character} = 69;
        }
      } elsif ($self->{next_input_character} == 117) { # u
        !!!next-input-character;
        if ($self->{next_input_character} == 109) { # m
          !!!next-input-character;
          if ($self->{next_input_character} == 108) { # l
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{00CB}>}; # Euml
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (117, 109, $self->{next_input_character});
            $self->{next_input_character} = 69;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (117, $self->{next_input_character});
          $self->{next_input_character} = 69;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 69;
      }
    } elsif ($self->{next_input_character} == 71) { # G
      !!!next-input-character;
      if ($self->{next_input_character} == 97) { # a
        !!!next-input-character;
        if ($self->{next_input_character} == 109) { # m
          !!!next-input-character;
          if ($self->{next_input_character} == 109) { # m
            !!!next-input-character;
            if ($self->{next_input_character} == 97) { # a
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{0393}>}; # Gamma
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (97, 109, 109, $self->{next_input_character});
              $self->{next_input_character} = 71;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (97, 109, $self->{next_input_character});
            $self->{next_input_character} = 71;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (97, $self->{next_input_character});
          $self->{next_input_character} = 71;
        }
      } elsif ($self->{next_input_character} == 84) { # T
        !!!next-input-character;
        {
          $r = {type => 'character', data => qq<\x{003E}>}; # GT
          if ($self->{next_input_character} == 0x003B) { # ;
            !!!next-input-character;
          } else {
            !!!parse-error;
            ## reconsume
          }
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 71;
      }
    } elsif ($self->{next_input_character} == 73) { # I
      !!!next-input-character;
      if ($self->{next_input_character} == 97) { # a
        !!!next-input-character;
        if ($self->{next_input_character} == 99) { # c
          !!!next-input-character;
          if ($self->{next_input_character} == 117) { # u
            !!!next-input-character;
            if ($self->{next_input_character} == 116) { # t
              !!!next-input-character;
              if ($self->{next_input_character} == 101) { # e
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00CD}>}; # Iacute
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (97, 99, 117, 116, $self->{next_input_character});
                $self->{next_input_character} = 73;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (97, 99, 117, $self->{next_input_character});
              $self->{next_input_character} = 73;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (97, 99, $self->{next_input_character});
            $self->{next_input_character} = 73;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (97, $self->{next_input_character});
          $self->{next_input_character} = 73;
        }
      } elsif ($self->{next_input_character} == 99) { # c
        !!!next-input-character;
        if ($self->{next_input_character} == 105) { # i
          !!!next-input-character;
          if ($self->{next_input_character} == 114) { # r
            !!!next-input-character;
            if ($self->{next_input_character} == 99) { # c
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{00CE}>}; # Icirc
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (99, 105, 114, $self->{next_input_character});
              $self->{next_input_character} = 73;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (99, 105, $self->{next_input_character});
            $self->{next_input_character} = 73;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (99, $self->{next_input_character});
          $self->{next_input_character} = 73;
        }
      } elsif ($self->{next_input_character} == 103) { # g
        !!!next-input-character;
        if ($self->{next_input_character} == 114) { # r
          !!!next-input-character;
          if ($self->{next_input_character} == 97) { # a
            !!!next-input-character;
            if ($self->{next_input_character} == 118) { # v
              !!!next-input-character;
              if ($self->{next_input_character} == 101) { # e
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00CC}>}; # Igrave
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (103, 114, 97, 118, $self->{next_input_character});
                $self->{next_input_character} = 73;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (103, 114, 97, $self->{next_input_character});
              $self->{next_input_character} = 73;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (103, 114, $self->{next_input_character});
            $self->{next_input_character} = 73;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (103, $self->{next_input_character});
          $self->{next_input_character} = 73;
        }
      } elsif ($self->{next_input_character} == 111) { # o
        !!!next-input-character;
        if ($self->{next_input_character} == 116) { # t
          !!!next-input-character;
          if ($self->{next_input_character} == 97) { # a
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{0399}>}; # Iota
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (111, 116, $self->{next_input_character});
            $self->{next_input_character} = 73;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (111, $self->{next_input_character});
          $self->{next_input_character} = 73;
        }
      } elsif ($self->{next_input_character} == 117) { # u
        !!!next-input-character;
        if ($self->{next_input_character} == 109) { # m
          !!!next-input-character;
          if ($self->{next_input_character} == 108) { # l
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{00CF}>}; # Iuml
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (117, 109, $self->{next_input_character});
            $self->{next_input_character} = 73;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (117, $self->{next_input_character});
          $self->{next_input_character} = 73;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 73;
      }
    } elsif ($self->{next_input_character} == 75) { # K
      !!!next-input-character;
      if ($self->{next_input_character} == 97) { # a
        !!!next-input-character;
        if ($self->{next_input_character} == 112) { # p
          !!!next-input-character;
          if ($self->{next_input_character} == 112) { # p
            !!!next-input-character;
            if ($self->{next_input_character} == 97) { # a
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{039A}>}; # Kappa
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (97, 112, 112, $self->{next_input_character});
              $self->{next_input_character} = 75;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (97, 112, $self->{next_input_character});
            $self->{next_input_character} = 75;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (97, $self->{next_input_character});
          $self->{next_input_character} = 75;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 75;
      }
    } elsif ($self->{next_input_character} == 76) { # L
      !!!next-input-character;
      if ($self->{next_input_character} == 97) { # a
        !!!next-input-character;
        if ($self->{next_input_character} == 109) { # m
          !!!next-input-character;
          if ($self->{next_input_character} == 98) { # b
            !!!next-input-character;
            if ($self->{next_input_character} == 100) { # d
              !!!next-input-character;
              if ($self->{next_input_character} == 97) { # a
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{039B}>}; # Lambda
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (97, 109, 98, 100, $self->{next_input_character});
                $self->{next_input_character} = 76;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (97, 109, 98, $self->{next_input_character});
              $self->{next_input_character} = 76;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (97, 109, $self->{next_input_character});
            $self->{next_input_character} = 76;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (97, $self->{next_input_character});
          $self->{next_input_character} = 76;
        }
      } elsif ($self->{next_input_character} == 84) { # T
        !!!next-input-character;
        {
          $r = {type => 'character', data => qq<\x{003C}>}; # LT
          if ($self->{next_input_character} == 0x003B) { # ;
            !!!next-input-character;
          } else {
            !!!parse-error;
            ## reconsume
          }
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 76;
      }
    } elsif ($self->{next_input_character} == 77) { # M
      !!!next-input-character;
      if ($self->{next_input_character} == 117) { # u
        !!!next-input-character;
        {
          $r = {type => 'character', data => qq<\x{039C}>}; # Mu
          if ($self->{next_input_character} == 0x003B) { # ;
            !!!next-input-character;
          } else {
            !!!parse-error;
            ## reconsume
          }
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 77;
      }
    } elsif ($self->{next_input_character} == 78) { # N
      !!!next-input-character;
      if ($self->{next_input_character} == 116) { # t
        !!!next-input-character;
        if ($self->{next_input_character} == 105) { # i
          !!!next-input-character;
          if ($self->{next_input_character} == 108) { # l
            !!!next-input-character;
            if ($self->{next_input_character} == 100) { # d
              !!!next-input-character;
              if ($self->{next_input_character} == 101) { # e
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00D1}>}; # Ntilde
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (116, 105, 108, 100, $self->{next_input_character});
                $self->{next_input_character} = 78;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (116, 105, 108, $self->{next_input_character});
              $self->{next_input_character} = 78;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (116, 105, $self->{next_input_character});
            $self->{next_input_character} = 78;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (116, $self->{next_input_character});
          $self->{next_input_character} = 78;
        }
      } elsif ($self->{next_input_character} == 117) { # u
        !!!next-input-character;
        {
          $r = {type => 'character', data => qq<\x{039D}>}; # Nu
          if ($self->{next_input_character} == 0x003B) { # ;
            !!!next-input-character;
          } else {
            !!!parse-error;
            ## reconsume
          }
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 78;
      }
    } elsif ($self->{next_input_character} == 79) { # O
      !!!next-input-character;
      if ($self->{next_input_character} == 69) { # E
        !!!next-input-character;
        if ($self->{next_input_character} == 108) { # l
          !!!next-input-character;
          if ($self->{next_input_character} == 105) { # i
            !!!next-input-character;
            if ($self->{next_input_character} == 103) { # g
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{0152}>}; # OElig
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (69, 108, 105, $self->{next_input_character});
              $self->{next_input_character} = 79;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (69, 108, $self->{next_input_character});
            $self->{next_input_character} = 79;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (69, $self->{next_input_character});
          $self->{next_input_character} = 79;
        }
      } elsif ($self->{next_input_character} == 97) { # a
        !!!next-input-character;
        if ($self->{next_input_character} == 99) { # c
          !!!next-input-character;
          if ($self->{next_input_character} == 117) { # u
            !!!next-input-character;
            if ($self->{next_input_character} == 116) { # t
              !!!next-input-character;
              if ($self->{next_input_character} == 101) { # e
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00D3}>}; # Oacute
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (97, 99, 117, 116, $self->{next_input_character});
                $self->{next_input_character} = 79;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (97, 99, 117, $self->{next_input_character});
              $self->{next_input_character} = 79;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (97, 99, $self->{next_input_character});
            $self->{next_input_character} = 79;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (97, $self->{next_input_character});
          $self->{next_input_character} = 79;
        }
      } elsif ($self->{next_input_character} == 99) { # c
        !!!next-input-character;
        if ($self->{next_input_character} == 105) { # i
          !!!next-input-character;
          if ($self->{next_input_character} == 114) { # r
            !!!next-input-character;
            if ($self->{next_input_character} == 99) { # c
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{00D4}>}; # Ocirc
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (99, 105, 114, $self->{next_input_character});
              $self->{next_input_character} = 79;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (99, 105, $self->{next_input_character});
            $self->{next_input_character} = 79;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (99, $self->{next_input_character});
          $self->{next_input_character} = 79;
        }
      } elsif ($self->{next_input_character} == 103) { # g
        !!!next-input-character;
        if ($self->{next_input_character} == 114) { # r
          !!!next-input-character;
          if ($self->{next_input_character} == 97) { # a
            !!!next-input-character;
            if ($self->{next_input_character} == 118) { # v
              !!!next-input-character;
              if ($self->{next_input_character} == 101) { # e
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00D2}>}; # Ograve
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (103, 114, 97, 118, $self->{next_input_character});
                $self->{next_input_character} = 79;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (103, 114, 97, $self->{next_input_character});
              $self->{next_input_character} = 79;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (103, 114, $self->{next_input_character});
            $self->{next_input_character} = 79;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (103, $self->{next_input_character});
          $self->{next_input_character} = 79;
        }
      } elsif ($self->{next_input_character} == 109) { # m
        !!!next-input-character;
        if ($self->{next_input_character} == 101) { # e
          !!!next-input-character;
          if ($self->{next_input_character} == 103) { # g
            !!!next-input-character;
            if ($self->{next_input_character} == 97) { # a
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{03A9}>}; # Omega
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (109, 101, 103, $self->{next_input_character});
              $self->{next_input_character} = 79;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (109, 101, $self->{next_input_character});
            $self->{next_input_character} = 79;
          }
        } elsif ($self->{next_input_character} == 105) { # i
          !!!next-input-character;
          if ($self->{next_input_character} == 99) { # c
            !!!next-input-character;
            if ($self->{next_input_character} == 114) { # r
              !!!next-input-character;
              if ($self->{next_input_character} == 111) { # o
                !!!next-input-character;
                if ($self->{next_input_character} == 110) { # n
                  !!!next-input-character;
                  {
                    $r = {type => 'character', data => qq<\x{039F}>}; # Omicron
                    if ($self->{next_input_character} == 0x003B) { # ;
                      !!!next-input-character;
                    } else {
                      !!!parse-error;
                      ## reconsume
                    }
                  }
                } else {
                  !!!parse-error;
                  !!!back-next-input-character (109, 105, 99, 114, 111, $self->{next_input_character});
                  $self->{next_input_character} = 79;
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (109, 105, 99, 114, $self->{next_input_character});
                $self->{next_input_character} = 79;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (109, 105, 99, $self->{next_input_character});
              $self->{next_input_character} = 79;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (109, 105, $self->{next_input_character});
            $self->{next_input_character} = 79;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (109, $self->{next_input_character});
          $self->{next_input_character} = 79;
        }
      } elsif ($self->{next_input_character} == 115) { # s
        !!!next-input-character;
        if ($self->{next_input_character} == 108) { # l
          !!!next-input-character;
          if ($self->{next_input_character} == 97) { # a
            !!!next-input-character;
            if ($self->{next_input_character} == 115) { # s
              !!!next-input-character;
              if ($self->{next_input_character} == 104) { # h
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00D8}>}; # Oslash
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (115, 108, 97, 115, $self->{next_input_character});
                $self->{next_input_character} = 79;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (115, 108, 97, $self->{next_input_character});
              $self->{next_input_character} = 79;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (115, 108, $self->{next_input_character});
            $self->{next_input_character} = 79;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (115, $self->{next_input_character});
          $self->{next_input_character} = 79;
        }
      } elsif ($self->{next_input_character} == 116) { # t
        !!!next-input-character;
        if ($self->{next_input_character} == 105) { # i
          !!!next-input-character;
          if ($self->{next_input_character} == 108) { # l
            !!!next-input-character;
            if ($self->{next_input_character} == 100) { # d
              !!!next-input-character;
              if ($self->{next_input_character} == 101) { # e
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00D5}>}; # Otilde
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (116, 105, 108, 100, $self->{next_input_character});
                $self->{next_input_character} = 79;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (116, 105, 108, $self->{next_input_character});
              $self->{next_input_character} = 79;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (116, 105, $self->{next_input_character});
            $self->{next_input_character} = 79;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (116, $self->{next_input_character});
          $self->{next_input_character} = 79;
        }
      } elsif ($self->{next_input_character} == 117) { # u
        !!!next-input-character;
        if ($self->{next_input_character} == 109) { # m
          !!!next-input-character;
          if ($self->{next_input_character} == 108) { # l
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{00D6}>}; # Ouml
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (117, 109, $self->{next_input_character});
            $self->{next_input_character} = 79;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (117, $self->{next_input_character});
          $self->{next_input_character} = 79;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 79;
      }
    } elsif ($self->{next_input_character} == 80) { # P
      !!!next-input-character;
      if ($self->{next_input_character} == 104) { # h
        !!!next-input-character;
        if ($self->{next_input_character} == 105) { # i
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{03A6}>}; # Phi
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (104, $self->{next_input_character});
          $self->{next_input_character} = 80;
        }
      } elsif ($self->{next_input_character} == 105) { # i
        !!!next-input-character;
        {
          $r = {type => 'character', data => qq<\x{03A0}>}; # Pi
          if ($self->{next_input_character} == 0x003B) { # ;
            !!!next-input-character;
          } else {
            !!!parse-error;
            ## reconsume
          }
        }
      } elsif ($self->{next_input_character} == 114) { # r
        !!!next-input-character;
        if ($self->{next_input_character} == 105) { # i
          !!!next-input-character;
          if ($self->{next_input_character} == 109) { # m
            !!!next-input-character;
            if ($self->{next_input_character} == 101) { # e
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{2033}>}; # Prime
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (114, 105, 109, $self->{next_input_character});
              $self->{next_input_character} = 80;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (114, 105, $self->{next_input_character});
            $self->{next_input_character} = 80;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (114, $self->{next_input_character});
          $self->{next_input_character} = 80;
        }
      } elsif ($self->{next_input_character} == 115) { # s
        !!!next-input-character;
        if ($self->{next_input_character} == 105) { # i
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{03A8}>}; # Psi
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (115, $self->{next_input_character});
          $self->{next_input_character} = 80;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 80;
      }
    } elsif ($self->{next_input_character} == 82) { # R
      !!!next-input-character;
      if ($self->{next_input_character} == 104) { # h
        !!!next-input-character;
        if ($self->{next_input_character} == 111) { # o
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{03A1}>}; # Rho
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (104, $self->{next_input_character});
          $self->{next_input_character} = 82;
        }
      } elsif ($self->{next_input_character} == 69) { # E
        !!!next-input-character;
        if ($self->{next_input_character} == 71) { # G
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{00AE}>}; # REG
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (69, $self->{next_input_character});
          $self->{next_input_character} = 82;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 82;
      }
    } elsif ($self->{next_input_character} == 83) { # S
      !!!next-input-character;
      if ($self->{next_input_character} == 99) { # c
        !!!next-input-character;
        if ($self->{next_input_character} == 97) { # a
          !!!next-input-character;
          if ($self->{next_input_character} == 114) { # r
            !!!next-input-character;
            if ($self->{next_input_character} == 111) { # o
              !!!next-input-character;
              if ($self->{next_input_character} == 110) { # n
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{0160}>}; # Scaron
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (99, 97, 114, 111, $self->{next_input_character});
                $self->{next_input_character} = 83;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (99, 97, 114, $self->{next_input_character});
              $self->{next_input_character} = 83;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (99, 97, $self->{next_input_character});
            $self->{next_input_character} = 83;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (99, $self->{next_input_character});
          $self->{next_input_character} = 83;
        }
      } elsif ($self->{next_input_character} == 105) { # i
        !!!next-input-character;
        if ($self->{next_input_character} == 103) { # g
          !!!next-input-character;
          if ($self->{next_input_character} == 109) { # m
            !!!next-input-character;
            if ($self->{next_input_character} == 97) { # a
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{03A3}>}; # Sigma
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (105, 103, 109, $self->{next_input_character});
              $self->{next_input_character} = 83;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (105, 103, $self->{next_input_character});
            $self->{next_input_character} = 83;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (105, $self->{next_input_character});
          $self->{next_input_character} = 83;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 83;
      }
    } elsif ($self->{next_input_character} == 84) { # T
      !!!next-input-character;
      if ($self->{next_input_character} == 72) { # H
        !!!next-input-character;
        if ($self->{next_input_character} == 79) { # O
          !!!next-input-character;
          if ($self->{next_input_character} == 82) { # R
            !!!next-input-character;
            if ($self->{next_input_character} == 78) { # N
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{00DE}>}; # THORN
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (72, 79, 82, $self->{next_input_character});
              $self->{next_input_character} = 84;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (72, 79, $self->{next_input_character});
            $self->{next_input_character} = 84;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (72, $self->{next_input_character});
          $self->{next_input_character} = 84;
        }
      } elsif ($self->{next_input_character} == 97) { # a
        !!!next-input-character;
        if ($self->{next_input_character} == 117) { # u
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{03A4}>}; # Tau
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (97, $self->{next_input_character});
          $self->{next_input_character} = 84;
        }
      } elsif ($self->{next_input_character} == 104) { # h
        !!!next-input-character;
        if ($self->{next_input_character} == 101) { # e
          !!!next-input-character;
          if ($self->{next_input_character} == 116) { # t
            !!!next-input-character;
            if ($self->{next_input_character} == 97) { # a
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{0398}>}; # Theta
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (104, 101, 116, $self->{next_input_character});
              $self->{next_input_character} = 84;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (104, 101, $self->{next_input_character});
            $self->{next_input_character} = 84;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (104, $self->{next_input_character});
          $self->{next_input_character} = 84;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 84;
      }
    } elsif ($self->{next_input_character} == 85) { # U
      !!!next-input-character;
      if ($self->{next_input_character} == 97) { # a
        !!!next-input-character;
        if ($self->{next_input_character} == 99) { # c
          !!!next-input-character;
          if ($self->{next_input_character} == 117) { # u
            !!!next-input-character;
            if ($self->{next_input_character} == 116) { # t
              !!!next-input-character;
              if ($self->{next_input_character} == 101) { # e
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00DA}>}; # Uacute
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (97, 99, 117, 116, $self->{next_input_character});
                $self->{next_input_character} = 85;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (97, 99, 117, $self->{next_input_character});
              $self->{next_input_character} = 85;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (97, 99, $self->{next_input_character});
            $self->{next_input_character} = 85;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (97, $self->{next_input_character});
          $self->{next_input_character} = 85;
        }
      } elsif ($self->{next_input_character} == 99) { # c
        !!!next-input-character;
        if ($self->{next_input_character} == 105) { # i
          !!!next-input-character;
          if ($self->{next_input_character} == 114) { # r
            !!!next-input-character;
            if ($self->{next_input_character} == 99) { # c
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{00DB}>}; # Ucirc
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (99, 105, 114, $self->{next_input_character});
              $self->{next_input_character} = 85;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (99, 105, $self->{next_input_character});
            $self->{next_input_character} = 85;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (99, $self->{next_input_character});
          $self->{next_input_character} = 85;
        }
      } elsif ($self->{next_input_character} == 103) { # g
        !!!next-input-character;
        if ($self->{next_input_character} == 114) { # r
          !!!next-input-character;
          if ($self->{next_input_character} == 97) { # a
            !!!next-input-character;
            if ($self->{next_input_character} == 118) { # v
              !!!next-input-character;
              if ($self->{next_input_character} == 101) { # e
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00D9}>}; # Ugrave
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (103, 114, 97, 118, $self->{next_input_character});
                $self->{next_input_character} = 85;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (103, 114, 97, $self->{next_input_character});
              $self->{next_input_character} = 85;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (103, 114, $self->{next_input_character});
            $self->{next_input_character} = 85;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (103, $self->{next_input_character});
          $self->{next_input_character} = 85;
        }
      } elsif ($self->{next_input_character} == 112) { # p
        !!!next-input-character;
        if ($self->{next_input_character} == 115) { # s
          !!!next-input-character;
          if ($self->{next_input_character} == 105) { # i
            !!!next-input-character;
            if ($self->{next_input_character} == 108) { # l
              !!!next-input-character;
              if ($self->{next_input_character} == 111) { # o
                !!!next-input-character;
                if ($self->{next_input_character} == 110) { # n
                  !!!next-input-character;
                  {
                    $r = {type => 'character', data => qq<\x{03A5}>}; # Upsilon
                    if ($self->{next_input_character} == 0x003B) { # ;
                      !!!next-input-character;
                    } else {
                      !!!parse-error;
                      ## reconsume
                    }
                  }
                } else {
                  !!!parse-error;
                  !!!back-next-input-character (112, 115, 105, 108, 111, $self->{next_input_character});
                  $self->{next_input_character} = 85;
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (112, 115, 105, 108, $self->{next_input_character});
                $self->{next_input_character} = 85;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (112, 115, 105, $self->{next_input_character});
              $self->{next_input_character} = 85;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (112, 115, $self->{next_input_character});
            $self->{next_input_character} = 85;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (112, $self->{next_input_character});
          $self->{next_input_character} = 85;
        }
      } elsif ($self->{next_input_character} == 117) { # u
        !!!next-input-character;
        if ($self->{next_input_character} == 109) { # m
          !!!next-input-character;
          if ($self->{next_input_character} == 108) { # l
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{00DC}>}; # Uuml
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (117, 109, $self->{next_input_character});
            $self->{next_input_character} = 85;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (117, $self->{next_input_character});
          $self->{next_input_character} = 85;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 85;
      }
    } elsif ($self->{next_input_character} == 88) { # X
      !!!next-input-character;
      if ($self->{next_input_character} == 105) { # i
        !!!next-input-character;
        {
          $r = {type => 'character', data => qq<\x{039E}>}; # Xi
          if ($self->{next_input_character} == 0x003B) { # ;
            !!!next-input-character;
          } else {
            !!!parse-error;
            ## reconsume
          }
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 88;
      }
    } elsif ($self->{next_input_character} == 89) { # Y
      !!!next-input-character;
      if ($self->{next_input_character} == 97) { # a
        !!!next-input-character;
        if ($self->{next_input_character} == 99) { # c
          !!!next-input-character;
          if ($self->{next_input_character} == 117) { # u
            !!!next-input-character;
            if ($self->{next_input_character} == 116) { # t
              !!!next-input-character;
              if ($self->{next_input_character} == 101) { # e
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00DD}>}; # Yacute
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (97, 99, 117, 116, $self->{next_input_character});
                $self->{next_input_character} = 89;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (97, 99, 117, $self->{next_input_character});
              $self->{next_input_character} = 89;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (97, 99, $self->{next_input_character});
            $self->{next_input_character} = 89;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (97, $self->{next_input_character});
          $self->{next_input_character} = 89;
        }
      } elsif ($self->{next_input_character} == 117) { # u
        !!!next-input-character;
        if ($self->{next_input_character} == 109) { # m
          !!!next-input-character;
          if ($self->{next_input_character} == 108) { # l
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{0178}>}; # Yuml
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (117, 109, $self->{next_input_character});
            $self->{next_input_character} = 89;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (117, $self->{next_input_character});
          $self->{next_input_character} = 89;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 89;
      }
    } elsif ($self->{next_input_character} == 90) { # Z
      !!!next-input-character;
      if ($self->{next_input_character} == 101) { # e
        !!!next-input-character;
        if ($self->{next_input_character} == 116) { # t
          !!!next-input-character;
          if ($self->{next_input_character} == 97) { # a
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{0396}>}; # Zeta
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (101, 116, $self->{next_input_character});
            $self->{next_input_character} = 90;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (101, $self->{next_input_character});
          $self->{next_input_character} = 90;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 90;
      }
    } elsif ($self->{next_input_character} == 97) { # a
      !!!next-input-character;
      if ($self->{next_input_character} == 97) { # a
        !!!next-input-character;
        if ($self->{next_input_character} == 99) { # c
          !!!next-input-character;
          if ($self->{next_input_character} == 117) { # u
            !!!next-input-character;
            if ($self->{next_input_character} == 116) { # t
              !!!next-input-character;
              if ($self->{next_input_character} == 101) { # e
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00E1}>}; # aacute
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (97, 99, 117, 116, $self->{next_input_character});
                $self->{next_input_character} = 97;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (97, 99, 117, $self->{next_input_character});
              $self->{next_input_character} = 97;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (97, 99, $self->{next_input_character});
            $self->{next_input_character} = 97;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (97, $self->{next_input_character});
          $self->{next_input_character} = 97;
        }
      } elsif ($self->{next_input_character} == 99) { # c
        !!!next-input-character;
        if ($self->{next_input_character} == 105) { # i
          !!!next-input-character;
          if ($self->{next_input_character} == 114) { # r
            !!!next-input-character;
            if ($self->{next_input_character} == 99) { # c
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{00E2}>}; # acirc
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (99, 105, 114, $self->{next_input_character});
              $self->{next_input_character} = 97;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (99, 105, $self->{next_input_character});
            $self->{next_input_character} = 97;
          }
        } elsif ($self->{next_input_character} == 117) { # u
          !!!next-input-character;
          if ($self->{next_input_character} == 116) { # t
            !!!next-input-character;
            if ($self->{next_input_character} == 101) { # e
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{00B4}>}; # acute
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (99, 117, 116, $self->{next_input_character});
              $self->{next_input_character} = 97;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (99, 117, $self->{next_input_character});
            $self->{next_input_character} = 97;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (99, $self->{next_input_character});
          $self->{next_input_character} = 97;
        }
      } elsif ($self->{next_input_character} == 101) { # e
        !!!next-input-character;
        if ($self->{next_input_character} == 108) { # l
          !!!next-input-character;
          if ($self->{next_input_character} == 105) { # i
            !!!next-input-character;
            if ($self->{next_input_character} == 103) { # g
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{00E6}>}; # aelig
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (101, 108, 105, $self->{next_input_character});
              $self->{next_input_character} = 97;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (101, 108, $self->{next_input_character});
            $self->{next_input_character} = 97;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (101, $self->{next_input_character});
          $self->{next_input_character} = 97;
        }
      } elsif ($self->{next_input_character} == 103) { # g
        !!!next-input-character;
        if ($self->{next_input_character} == 114) { # r
          !!!next-input-character;
          if ($self->{next_input_character} == 97) { # a
            !!!next-input-character;
            if ($self->{next_input_character} == 118) { # v
              !!!next-input-character;
              if ($self->{next_input_character} == 101) { # e
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00E0}>}; # agrave
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (103, 114, 97, 118, $self->{next_input_character});
                $self->{next_input_character} = 97;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (103, 114, 97, $self->{next_input_character});
              $self->{next_input_character} = 97;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (103, 114, $self->{next_input_character});
            $self->{next_input_character} = 97;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (103, $self->{next_input_character});
          $self->{next_input_character} = 97;
        }
      } elsif ($self->{next_input_character} == 108) { # l
        !!!next-input-character;
        if ($self->{next_input_character} == 101) { # e
          !!!next-input-character;
          if ($self->{next_input_character} == 102) { # f
            !!!next-input-character;
            if ($self->{next_input_character} == 115) { # s
              !!!next-input-character;
              if ($self->{next_input_character} == 121) { # y
                !!!next-input-character;
                if ($self->{next_input_character} == 109) { # m
                  !!!next-input-character;
                  {
                    $r = {type => 'character', data => qq<\x{2135}>}; # alefsym
                    if ($self->{next_input_character} == 0x003B) { # ;
                      !!!next-input-character;
                    } else {
                      !!!parse-error;
                      ## reconsume
                    }
                  }
                } else {
                  !!!parse-error;
                  !!!back-next-input-character (108, 101, 102, 115, 121, $self->{next_input_character});
                  $self->{next_input_character} = 97;
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (108, 101, 102, 115, $self->{next_input_character});
                $self->{next_input_character} = 97;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (108, 101, 102, $self->{next_input_character});
              $self->{next_input_character} = 97;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (108, 101, $self->{next_input_character});
            $self->{next_input_character} = 97;
          }
        } elsif ($self->{next_input_character} == 112) { # p
          !!!next-input-character;
          if ($self->{next_input_character} == 104) { # h
            !!!next-input-character;
            if ($self->{next_input_character} == 97) { # a
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{03B1}>}; # alpha
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (108, 112, 104, $self->{next_input_character});
              $self->{next_input_character} = 97;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (108, 112, $self->{next_input_character});
            $self->{next_input_character} = 97;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (108, $self->{next_input_character});
          $self->{next_input_character} = 97;
        }
      } elsif ($self->{next_input_character} == 109) { # m
        !!!next-input-character;
        if ($self->{next_input_character} == 112) { # p
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{0026}>}; # amp
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (109, $self->{next_input_character});
          $self->{next_input_character} = 97;
        }
      } elsif ($self->{next_input_character} == 110) { # n
        !!!next-input-character;
        if ($self->{next_input_character} == 100) { # d
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{2227}>}; # and
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } elsif ($self->{next_input_character} == 103) { # g
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{2220}>}; # ang
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (110, $self->{next_input_character});
          $self->{next_input_character} = 97;
        }
      } elsif ($self->{next_input_character} == 112) { # p
        !!!next-input-character;
        if ($self->{next_input_character} == 111) { # o
          !!!next-input-character;
          if ($self->{next_input_character} == 115) { # s
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{0027}>}; # apos
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (112, 111, $self->{next_input_character});
            $self->{next_input_character} = 97;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (112, $self->{next_input_character});
          $self->{next_input_character} = 97;
        }
      } elsif ($self->{next_input_character} == 114) { # r
        !!!next-input-character;
        if ($self->{next_input_character} == 105) { # i
          !!!next-input-character;
          if ($self->{next_input_character} == 110) { # n
            !!!next-input-character;
            if ($self->{next_input_character} == 103) { # g
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{00E5}>}; # aring
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (114, 105, 110, $self->{next_input_character});
              $self->{next_input_character} = 97;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (114, 105, $self->{next_input_character});
            $self->{next_input_character} = 97;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (114, $self->{next_input_character});
          $self->{next_input_character} = 97;
        }
      } elsif ($self->{next_input_character} == 115) { # s
        !!!next-input-character;
        if ($self->{next_input_character} == 121) { # y
          !!!next-input-character;
          if ($self->{next_input_character} == 109) { # m
            !!!next-input-character;
            if ($self->{next_input_character} == 112) { # p
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{2248}>}; # asymp
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (115, 121, 109, $self->{next_input_character});
              $self->{next_input_character} = 97;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (115, 121, $self->{next_input_character});
            $self->{next_input_character} = 97;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (115, $self->{next_input_character});
          $self->{next_input_character} = 97;
        }
      } elsif ($self->{next_input_character} == 116) { # t
        !!!next-input-character;
        if ($self->{next_input_character} == 105) { # i
          !!!next-input-character;
          if ($self->{next_input_character} == 108) { # l
            !!!next-input-character;
            if ($self->{next_input_character} == 100) { # d
              !!!next-input-character;
              if ($self->{next_input_character} == 101) { # e
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00E3}>}; # atilde
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (116, 105, 108, 100, $self->{next_input_character});
                $self->{next_input_character} = 97;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (116, 105, 108, $self->{next_input_character});
              $self->{next_input_character} = 97;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (116, 105, $self->{next_input_character});
            $self->{next_input_character} = 97;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (116, $self->{next_input_character});
          $self->{next_input_character} = 97;
        }
      } elsif ($self->{next_input_character} == 117) { # u
        !!!next-input-character;
        if ($self->{next_input_character} == 109) { # m
          !!!next-input-character;
          if ($self->{next_input_character} == 108) { # l
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{00E4}>}; # auml
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (117, 109, $self->{next_input_character});
            $self->{next_input_character} = 97;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (117, $self->{next_input_character});
          $self->{next_input_character} = 97;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 97;
      }
    } elsif ($self->{next_input_character} == 98) { # b
      !!!next-input-character;
      if ($self->{next_input_character} == 100) { # d
        !!!next-input-character;
        if ($self->{next_input_character} == 113) { # q
          !!!next-input-character;
          if ($self->{next_input_character} == 117) { # u
            !!!next-input-character;
            if ($self->{next_input_character} == 111) { # o
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{201E}>}; # bdquo
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (100, 113, 117, $self->{next_input_character});
              $self->{next_input_character} = 98;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (100, 113, $self->{next_input_character});
            $self->{next_input_character} = 98;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (100, $self->{next_input_character});
          $self->{next_input_character} = 98;
        }
      } elsif ($self->{next_input_character} == 101) { # e
        !!!next-input-character;
        if ($self->{next_input_character} == 116) { # t
          !!!next-input-character;
          if ($self->{next_input_character} == 97) { # a
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{03B2}>}; # beta
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (101, 116, $self->{next_input_character});
            $self->{next_input_character} = 98;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (101, $self->{next_input_character});
          $self->{next_input_character} = 98;
        }
      } elsif ($self->{next_input_character} == 114) { # r
        !!!next-input-character;
        if ($self->{next_input_character} == 118) { # v
          !!!next-input-character;
          if ($self->{next_input_character} == 98) { # b
            !!!next-input-character;
            if ($self->{next_input_character} == 97) { # a
              !!!next-input-character;
              if ($self->{next_input_character} == 114) { # r
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00A6}>}; # brvbar
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (114, 118, 98, 97, $self->{next_input_character});
                $self->{next_input_character} = 98;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (114, 118, 98, $self->{next_input_character});
              $self->{next_input_character} = 98;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (114, 118, $self->{next_input_character});
            $self->{next_input_character} = 98;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (114, $self->{next_input_character});
          $self->{next_input_character} = 98;
        }
      } elsif ($self->{next_input_character} == 117) { # u
        !!!next-input-character;
        if ($self->{next_input_character} == 108) { # l
          !!!next-input-character;
          if ($self->{next_input_character} == 108) { # l
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{2022}>}; # bull
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (117, 108, $self->{next_input_character});
            $self->{next_input_character} = 98;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (117, $self->{next_input_character});
          $self->{next_input_character} = 98;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 98;
      }
    } elsif ($self->{next_input_character} == 99) { # c
      !!!next-input-character;
      if ($self->{next_input_character} == 97) { # a
        !!!next-input-character;
        if ($self->{next_input_character} == 112) { # p
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{2229}>}; # cap
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (97, $self->{next_input_character});
          $self->{next_input_character} = 99;
        }
      } elsif ($self->{next_input_character} == 99) { # c
        !!!next-input-character;
        if ($self->{next_input_character} == 101) { # e
          !!!next-input-character;
          if ($self->{next_input_character} == 100) { # d
            !!!next-input-character;
            if ($self->{next_input_character} == 105) { # i
              !!!next-input-character;
              if ($self->{next_input_character} == 108) { # l
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00E7}>}; # ccedil
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (99, 101, 100, 105, $self->{next_input_character});
                $self->{next_input_character} = 99;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (99, 101, 100, $self->{next_input_character});
              $self->{next_input_character} = 99;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (99, 101, $self->{next_input_character});
            $self->{next_input_character} = 99;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (99, $self->{next_input_character});
          $self->{next_input_character} = 99;
        }
      } elsif ($self->{next_input_character} == 101) { # e
        !!!next-input-character;
        if ($self->{next_input_character} == 100) { # d
          !!!next-input-character;
          if ($self->{next_input_character} == 105) { # i
            !!!next-input-character;
            if ($self->{next_input_character} == 108) { # l
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{00B8}>}; # cedil
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (101, 100, 105, $self->{next_input_character});
              $self->{next_input_character} = 99;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (101, 100, $self->{next_input_character});
            $self->{next_input_character} = 99;
          }
        } elsif ($self->{next_input_character} == 110) { # n
          !!!next-input-character;
          if ($self->{next_input_character} == 116) { # t
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{00A2}>}; # cent
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (101, 110, $self->{next_input_character});
            $self->{next_input_character} = 99;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (101, $self->{next_input_character});
          $self->{next_input_character} = 99;
        }
      } elsif ($self->{next_input_character} == 104) { # h
        !!!next-input-character;
        if ($self->{next_input_character} == 105) { # i
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{03C7}>}; # chi
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (104, $self->{next_input_character});
          $self->{next_input_character} = 99;
        }
      } elsif ($self->{next_input_character} == 105) { # i
        !!!next-input-character;
        if ($self->{next_input_character} == 114) { # r
          !!!next-input-character;
          if ($self->{next_input_character} == 99) { # c
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{02C6}>}; # circ
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (105, 114, $self->{next_input_character});
            $self->{next_input_character} = 99;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (105, $self->{next_input_character});
          $self->{next_input_character} = 99;
        }
      } elsif ($self->{next_input_character} == 108) { # l
        !!!next-input-character;
        if ($self->{next_input_character} == 117) { # u
          !!!next-input-character;
          if ($self->{next_input_character} == 98) { # b
            !!!next-input-character;
            if ($self->{next_input_character} == 115) { # s
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{2663}>}; # clubs
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (108, 117, 98, $self->{next_input_character});
              $self->{next_input_character} = 99;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (108, 117, $self->{next_input_character});
            $self->{next_input_character} = 99;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (108, $self->{next_input_character});
          $self->{next_input_character} = 99;
        }
      } elsif ($self->{next_input_character} == 111) { # o
        !!!next-input-character;
        if ($self->{next_input_character} == 110) { # n
          !!!next-input-character;
          if ($self->{next_input_character} == 103) { # g
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{2245}>}; # cong
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (111, 110, $self->{next_input_character});
            $self->{next_input_character} = 99;
          }
        } elsif ($self->{next_input_character} == 112) { # p
          !!!next-input-character;
          if ($self->{next_input_character} == 121) { # y
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{00A9}>}; # copy
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (111, 112, $self->{next_input_character});
            $self->{next_input_character} = 99;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (111, $self->{next_input_character});
          $self->{next_input_character} = 99;
        }
      } elsif ($self->{next_input_character} == 114) { # r
        !!!next-input-character;
        if ($self->{next_input_character} == 97) { # a
          !!!next-input-character;
          if ($self->{next_input_character} == 114) { # r
            !!!next-input-character;
            if ($self->{next_input_character} == 114) { # r
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{21B5}>}; # crarr
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (114, 97, 114, $self->{next_input_character});
              $self->{next_input_character} = 99;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (114, 97, $self->{next_input_character});
            $self->{next_input_character} = 99;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (114, $self->{next_input_character});
          $self->{next_input_character} = 99;
        }
      } elsif ($self->{next_input_character} == 117) { # u
        !!!next-input-character;
        if ($self->{next_input_character} == 112) { # p
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{222A}>}; # cup
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } elsif ($self->{next_input_character} == 114) { # r
          !!!next-input-character;
          if ($self->{next_input_character} == 114) { # r
            !!!next-input-character;
            if ($self->{next_input_character} == 101) { # e
              !!!next-input-character;
              if ($self->{next_input_character} == 110) { # n
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00A4}>}; # curren
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (117, 114, 114, 101, $self->{next_input_character});
                $self->{next_input_character} = 99;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (117, 114, 114, $self->{next_input_character});
              $self->{next_input_character} = 99;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (117, 114, $self->{next_input_character});
            $self->{next_input_character} = 99;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (117, $self->{next_input_character});
          $self->{next_input_character} = 99;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 99;
      }
    } elsif ($self->{next_input_character} == 100) { # d
      !!!next-input-character;
      if ($self->{next_input_character} == 65) { # A
        !!!next-input-character;
        if ($self->{next_input_character} == 114) { # r
          !!!next-input-character;
          if ($self->{next_input_character} == 114) { # r
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{21D3}>}; # dArr
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (65, 114, $self->{next_input_character});
            $self->{next_input_character} = 100;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (65, $self->{next_input_character});
          $self->{next_input_character} = 100;
        }
      } elsif ($self->{next_input_character} == 97) { # a
        !!!next-input-character;
        if ($self->{next_input_character} == 103) { # g
          !!!next-input-character;
          if ($self->{next_input_character} == 103) { # g
            !!!next-input-character;
            if ($self->{next_input_character} == 101) { # e
              !!!next-input-character;
              if ($self->{next_input_character} == 114) { # r
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{2020}>}; # dagger
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (97, 103, 103, 101, $self->{next_input_character});
                $self->{next_input_character} = 100;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (97, 103, 103, $self->{next_input_character});
              $self->{next_input_character} = 100;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (97, 103, $self->{next_input_character});
            $self->{next_input_character} = 100;
          }
        } elsif ($self->{next_input_character} == 114) { # r
          !!!next-input-character;
          if ($self->{next_input_character} == 114) { # r
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{2193}>}; # darr
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (97, 114, $self->{next_input_character});
            $self->{next_input_character} = 100;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (97, $self->{next_input_character});
          $self->{next_input_character} = 100;
        }
      } elsif ($self->{next_input_character} == 101) { # e
        !!!next-input-character;
        if ($self->{next_input_character} == 103) { # g
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{00B0}>}; # deg
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } elsif ($self->{next_input_character} == 108) { # l
          !!!next-input-character;
          if ($self->{next_input_character} == 116) { # t
            !!!next-input-character;
            if ($self->{next_input_character} == 97) { # a
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{03B4}>}; # delta
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (101, 108, 116, $self->{next_input_character});
              $self->{next_input_character} = 100;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (101, 108, $self->{next_input_character});
            $self->{next_input_character} = 100;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (101, $self->{next_input_character});
          $self->{next_input_character} = 100;
        }
      } elsif ($self->{next_input_character} == 105) { # i
        !!!next-input-character;
        if ($self->{next_input_character} == 97) { # a
          !!!next-input-character;
          if ($self->{next_input_character} == 109) { # m
            !!!next-input-character;
            if ($self->{next_input_character} == 115) { # s
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{2666}>}; # diams
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (105, 97, 109, $self->{next_input_character});
              $self->{next_input_character} = 100;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (105, 97, $self->{next_input_character});
            $self->{next_input_character} = 100;
          }
        } elsif ($self->{next_input_character} == 118) { # v
          !!!next-input-character;
          if ($self->{next_input_character} == 105) { # i
            !!!next-input-character;
            if ($self->{next_input_character} == 100) { # d
              !!!next-input-character;
              if ($self->{next_input_character} == 101) { # e
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00F7}>}; # divide
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (105, 118, 105, 100, $self->{next_input_character});
                $self->{next_input_character} = 100;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (105, 118, 105, $self->{next_input_character});
              $self->{next_input_character} = 100;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (105, 118, $self->{next_input_character});
            $self->{next_input_character} = 100;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (105, $self->{next_input_character});
          $self->{next_input_character} = 100;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 100;
      }
    } elsif ($self->{next_input_character} == 101) { # e
      !!!next-input-character;
      if ($self->{next_input_character} == 97) { # a
        !!!next-input-character;
        if ($self->{next_input_character} == 99) { # c
          !!!next-input-character;
          if ($self->{next_input_character} == 117) { # u
            !!!next-input-character;
            if ($self->{next_input_character} == 116) { # t
              !!!next-input-character;
              if ($self->{next_input_character} == 101) { # e
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00E9}>}; # eacute
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (97, 99, 117, 116, $self->{next_input_character});
                $self->{next_input_character} = 101;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (97, 99, 117, $self->{next_input_character});
              $self->{next_input_character} = 101;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (97, 99, $self->{next_input_character});
            $self->{next_input_character} = 101;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (97, $self->{next_input_character});
          $self->{next_input_character} = 101;
        }
      } elsif ($self->{next_input_character} == 99) { # c
        !!!next-input-character;
        if ($self->{next_input_character} == 105) { # i
          !!!next-input-character;
          if ($self->{next_input_character} == 114) { # r
            !!!next-input-character;
            if ($self->{next_input_character} == 99) { # c
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{00EA}>}; # ecirc
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (99, 105, 114, $self->{next_input_character});
              $self->{next_input_character} = 101;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (99, 105, $self->{next_input_character});
            $self->{next_input_character} = 101;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (99, $self->{next_input_character});
          $self->{next_input_character} = 101;
        }
      } elsif ($self->{next_input_character} == 103) { # g
        !!!next-input-character;
        if ($self->{next_input_character} == 114) { # r
          !!!next-input-character;
          if ($self->{next_input_character} == 97) { # a
            !!!next-input-character;
            if ($self->{next_input_character} == 118) { # v
              !!!next-input-character;
              if ($self->{next_input_character} == 101) { # e
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00E8}>}; # egrave
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (103, 114, 97, 118, $self->{next_input_character});
                $self->{next_input_character} = 101;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (103, 114, 97, $self->{next_input_character});
              $self->{next_input_character} = 101;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (103, 114, $self->{next_input_character});
            $self->{next_input_character} = 101;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (103, $self->{next_input_character});
          $self->{next_input_character} = 101;
        }
      } elsif ($self->{next_input_character} == 109) { # m
        !!!next-input-character;
        if ($self->{next_input_character} == 112) { # p
          !!!next-input-character;
          if ($self->{next_input_character} == 116) { # t
            !!!next-input-character;
            if ($self->{next_input_character} == 121) { # y
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{2205}>}; # empty
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (109, 112, 116, $self->{next_input_character});
              $self->{next_input_character} = 101;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (109, 112, $self->{next_input_character});
            $self->{next_input_character} = 101;
          }
        } elsif ($self->{next_input_character} == 115) { # s
          !!!next-input-character;
          if ($self->{next_input_character} == 112) { # p
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{2003}>}; # emsp
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (109, 115, $self->{next_input_character});
            $self->{next_input_character} = 101;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (109, $self->{next_input_character});
          $self->{next_input_character} = 101;
        }
      } elsif ($self->{next_input_character} == 110) { # n
        !!!next-input-character;
        if ($self->{next_input_character} == 115) { # s
          !!!next-input-character;
          if ($self->{next_input_character} == 112) { # p
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{2002}>}; # ensp
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (110, 115, $self->{next_input_character});
            $self->{next_input_character} = 101;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (110, $self->{next_input_character});
          $self->{next_input_character} = 101;
        }
      } elsif ($self->{next_input_character} == 112) { # p
        !!!next-input-character;
        if ($self->{next_input_character} == 115) { # s
          !!!next-input-character;
          if ($self->{next_input_character} == 105) { # i
            !!!next-input-character;
            if ($self->{next_input_character} == 108) { # l
              !!!next-input-character;
              if ($self->{next_input_character} == 111) { # o
                !!!next-input-character;
                if ($self->{next_input_character} == 110) { # n
                  !!!next-input-character;
                  {
                    $r = {type => 'character', data => qq<\x{03B5}>}; # epsilon
                    if ($self->{next_input_character} == 0x003B) { # ;
                      !!!next-input-character;
                    } else {
                      !!!parse-error;
                      ## reconsume
                    }
                  }
                } else {
                  !!!parse-error;
                  !!!back-next-input-character (112, 115, 105, 108, 111, $self->{next_input_character});
                  $self->{next_input_character} = 101;
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (112, 115, 105, 108, $self->{next_input_character});
                $self->{next_input_character} = 101;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (112, 115, 105, $self->{next_input_character});
              $self->{next_input_character} = 101;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (112, 115, $self->{next_input_character});
            $self->{next_input_character} = 101;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (112, $self->{next_input_character});
          $self->{next_input_character} = 101;
        }
      } elsif ($self->{next_input_character} == 113) { # q
        !!!next-input-character;
        if ($self->{next_input_character} == 117) { # u
          !!!next-input-character;
          if ($self->{next_input_character} == 105) { # i
            !!!next-input-character;
            if ($self->{next_input_character} == 118) { # v
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{2261}>}; # equiv
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (113, 117, 105, $self->{next_input_character});
              $self->{next_input_character} = 101;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (113, 117, $self->{next_input_character});
            $self->{next_input_character} = 101;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (113, $self->{next_input_character});
          $self->{next_input_character} = 101;
        }
      } elsif ($self->{next_input_character} == 116) { # t
        !!!next-input-character;
        if ($self->{next_input_character} == 97) { # a
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{03B7}>}; # eta
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } elsif ($self->{next_input_character} == 104) { # h
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{00F0}>}; # eth
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (116, $self->{next_input_character});
          $self->{next_input_character} = 101;
        }
      } elsif ($self->{next_input_character} == 117) { # u
        !!!next-input-character;
        if ($self->{next_input_character} == 109) { # m
          !!!next-input-character;
          if ($self->{next_input_character} == 108) { # l
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{00EB}>}; # euml
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (117, 109, $self->{next_input_character});
            $self->{next_input_character} = 101;
          }
        } elsif ($self->{next_input_character} == 114) { # r
          !!!next-input-character;
          if ($self->{next_input_character} == 111) { # o
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{20AC}>}; # euro
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (117, 114, $self->{next_input_character});
            $self->{next_input_character} = 101;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (117, $self->{next_input_character});
          $self->{next_input_character} = 101;
        }
      } elsif ($self->{next_input_character} == 120) { # x
        !!!next-input-character;
        if ($self->{next_input_character} == 105) { # i
          !!!next-input-character;
          if ($self->{next_input_character} == 115) { # s
            !!!next-input-character;
            if ($self->{next_input_character} == 116) { # t
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{2203}>}; # exist
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (120, 105, 115, $self->{next_input_character});
              $self->{next_input_character} = 101;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (120, 105, $self->{next_input_character});
            $self->{next_input_character} = 101;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (120, $self->{next_input_character});
          $self->{next_input_character} = 101;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 101;
      }
    } elsif ($self->{next_input_character} == 102) { # f
      !!!next-input-character;
      if ($self->{next_input_character} == 110) { # n
        !!!next-input-character;
        if ($self->{next_input_character} == 111) { # o
          !!!next-input-character;
          if ($self->{next_input_character} == 102) { # f
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{0192}>}; # fnof
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (110, 111, $self->{next_input_character});
            $self->{next_input_character} = 102;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (110, $self->{next_input_character});
          $self->{next_input_character} = 102;
        }
      } elsif ($self->{next_input_character} == 111) { # o
        !!!next-input-character;
        if ($self->{next_input_character} == 114) { # r
          !!!next-input-character;
          if ($self->{next_input_character} == 97) { # a
            !!!next-input-character;
            if ($self->{next_input_character} == 108) { # l
              !!!next-input-character;
              if ($self->{next_input_character} == 108) { # l
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{2200}>}; # forall
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (111, 114, 97, 108, $self->{next_input_character});
                $self->{next_input_character} = 102;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (111, 114, 97, $self->{next_input_character});
              $self->{next_input_character} = 102;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (111, 114, $self->{next_input_character});
            $self->{next_input_character} = 102;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (111, $self->{next_input_character});
          $self->{next_input_character} = 102;
        }
      } elsif ($self->{next_input_character} == 114) { # r
        !!!next-input-character;
        if ($self->{next_input_character} == 97) { # a
          !!!next-input-character;
          if ($self->{next_input_character} == 99) { # c
            !!!next-input-character;
            if ($self->{next_input_character} == 49) { # 1
              !!!next-input-character;
              if ($self->{next_input_character} == 50) { # 2
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00BD}>}; # frac12
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } elsif ($self->{next_input_character} == 52) { # 4
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00BC}>}; # frac14
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (114, 97, 99, 49, $self->{next_input_character});
                $self->{next_input_character} = 102;
              }
            } elsif ($self->{next_input_character} == 51) { # 3
              !!!next-input-character;
              if ($self->{next_input_character} == 52) { # 4
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00BE}>}; # frac34
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (114, 97, 99, 51, $self->{next_input_character});
                $self->{next_input_character} = 102;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (114, 97, 99, $self->{next_input_character});
              $self->{next_input_character} = 102;
            }
          } elsif ($self->{next_input_character} == 115) { # s
            !!!next-input-character;
            if ($self->{next_input_character} == 108) { # l
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{2044}>}; # frasl
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (114, 97, 115, $self->{next_input_character});
              $self->{next_input_character} = 102;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (114, 97, $self->{next_input_character});
            $self->{next_input_character} = 102;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (114, $self->{next_input_character});
          $self->{next_input_character} = 102;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 102;
      }
    } elsif ($self->{next_input_character} == 103) { # g
      !!!next-input-character;
      if ($self->{next_input_character} == 97) { # a
        !!!next-input-character;
        if ($self->{next_input_character} == 109) { # m
          !!!next-input-character;
          if ($self->{next_input_character} == 109) { # m
            !!!next-input-character;
            if ($self->{next_input_character} == 97) { # a
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{03B3}>}; # gamma
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (97, 109, 109, $self->{next_input_character});
              $self->{next_input_character} = 103;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (97, 109, $self->{next_input_character});
            $self->{next_input_character} = 103;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (97, $self->{next_input_character});
          $self->{next_input_character} = 103;
        }
      } elsif ($self->{next_input_character} == 101) { # e
        !!!next-input-character;
        {
          $r = {type => 'character', data => qq<\x{2265}>}; # ge
          if ($self->{next_input_character} == 0x003B) { # ;
            !!!next-input-character;
          } else {
            !!!parse-error;
            ## reconsume
          }
        }
      } elsif ($self->{next_input_character} == 116) { # t
        !!!next-input-character;
        {
          $r = {type => 'character', data => qq<\x{003E}>}; # gt
          if ($self->{next_input_character} == 0x003B) { # ;
            !!!next-input-character;
          } else {
            !!!parse-error;
            ## reconsume
          }
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 103;
      }
    } elsif ($self->{next_input_character} == 104) { # h
      !!!next-input-character;
      if ($self->{next_input_character} == 65) { # A
        !!!next-input-character;
        if ($self->{next_input_character} == 114) { # r
          !!!next-input-character;
          if ($self->{next_input_character} == 114) { # r
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{21D4}>}; # hArr
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (65, 114, $self->{next_input_character});
            $self->{next_input_character} = 104;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (65, $self->{next_input_character});
          $self->{next_input_character} = 104;
        }
      } elsif ($self->{next_input_character} == 97) { # a
        !!!next-input-character;
        if ($self->{next_input_character} == 114) { # r
          !!!next-input-character;
          if ($self->{next_input_character} == 114) { # r
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{2194}>}; # harr
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (97, 114, $self->{next_input_character});
            $self->{next_input_character} = 104;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (97, $self->{next_input_character});
          $self->{next_input_character} = 104;
        }
      } elsif ($self->{next_input_character} == 101) { # e
        !!!next-input-character;
        if ($self->{next_input_character} == 97) { # a
          !!!next-input-character;
          if ($self->{next_input_character} == 114) { # r
            !!!next-input-character;
            if ($self->{next_input_character} == 116) { # t
              !!!next-input-character;
              if ($self->{next_input_character} == 115) { # s
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{2665}>}; # hearts
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (101, 97, 114, 116, $self->{next_input_character});
                $self->{next_input_character} = 104;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (101, 97, 114, $self->{next_input_character});
              $self->{next_input_character} = 104;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (101, 97, $self->{next_input_character});
            $self->{next_input_character} = 104;
          }
        } elsif ($self->{next_input_character} == 108) { # l
          !!!next-input-character;
          if ($self->{next_input_character} == 108) { # l
            !!!next-input-character;
            if ($self->{next_input_character} == 105) { # i
              !!!next-input-character;
              if ($self->{next_input_character} == 112) { # p
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{2026}>}; # hellip
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (101, 108, 108, 105, $self->{next_input_character});
                $self->{next_input_character} = 104;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (101, 108, 108, $self->{next_input_character});
              $self->{next_input_character} = 104;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (101, 108, $self->{next_input_character});
            $self->{next_input_character} = 104;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (101, $self->{next_input_character});
          $self->{next_input_character} = 104;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 104;
      }
    } elsif ($self->{next_input_character} == 105) { # i
      !!!next-input-character;
      if ($self->{next_input_character} == 97) { # a
        !!!next-input-character;
        if ($self->{next_input_character} == 99) { # c
          !!!next-input-character;
          if ($self->{next_input_character} == 117) { # u
            !!!next-input-character;
            if ($self->{next_input_character} == 116) { # t
              !!!next-input-character;
              if ($self->{next_input_character} == 101) { # e
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00ED}>}; # iacute
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (97, 99, 117, 116, $self->{next_input_character});
                $self->{next_input_character} = 105;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (97, 99, 117, $self->{next_input_character});
              $self->{next_input_character} = 105;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (97, 99, $self->{next_input_character});
            $self->{next_input_character} = 105;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (97, $self->{next_input_character});
          $self->{next_input_character} = 105;
        }
      } elsif ($self->{next_input_character} == 99) { # c
        !!!next-input-character;
        if ($self->{next_input_character} == 105) { # i
          !!!next-input-character;
          if ($self->{next_input_character} == 114) { # r
            !!!next-input-character;
            if ($self->{next_input_character} == 99) { # c
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{00EE}>}; # icirc
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (99, 105, 114, $self->{next_input_character});
              $self->{next_input_character} = 105;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (99, 105, $self->{next_input_character});
            $self->{next_input_character} = 105;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (99, $self->{next_input_character});
          $self->{next_input_character} = 105;
        }
      } elsif ($self->{next_input_character} == 101) { # e
        !!!next-input-character;
        if ($self->{next_input_character} == 120) { # x
          !!!next-input-character;
          if ($self->{next_input_character} == 99) { # c
            !!!next-input-character;
            if ($self->{next_input_character} == 108) { # l
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{00A1}>}; # iexcl
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (101, 120, 99, $self->{next_input_character});
              $self->{next_input_character} = 105;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (101, 120, $self->{next_input_character});
            $self->{next_input_character} = 105;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (101, $self->{next_input_character});
          $self->{next_input_character} = 105;
        }
      } elsif ($self->{next_input_character} == 103) { # g
        !!!next-input-character;
        if ($self->{next_input_character} == 114) { # r
          !!!next-input-character;
          if ($self->{next_input_character} == 97) { # a
            !!!next-input-character;
            if ($self->{next_input_character} == 118) { # v
              !!!next-input-character;
              if ($self->{next_input_character} == 101) { # e
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00EC}>}; # igrave
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (103, 114, 97, 118, $self->{next_input_character});
                $self->{next_input_character} = 105;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (103, 114, 97, $self->{next_input_character});
              $self->{next_input_character} = 105;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (103, 114, $self->{next_input_character});
            $self->{next_input_character} = 105;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (103, $self->{next_input_character});
          $self->{next_input_character} = 105;
        }
      } elsif ($self->{next_input_character} == 109) { # m
        !!!next-input-character;
        if ($self->{next_input_character} == 97) { # a
          !!!next-input-character;
          if ($self->{next_input_character} == 103) { # g
            !!!next-input-character;
            if ($self->{next_input_character} == 101) { # e
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{2111}>}; # image
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (109, 97, 103, $self->{next_input_character});
              $self->{next_input_character} = 105;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (109, 97, $self->{next_input_character});
            $self->{next_input_character} = 105;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (109, $self->{next_input_character});
          $self->{next_input_character} = 105;
        }
      } elsif ($self->{next_input_character} == 110) { # n
        !!!next-input-character;
        if ($self->{next_input_character} == 102) { # f
          !!!next-input-character;
          if ($self->{next_input_character} == 105) { # i
            !!!next-input-character;
            if ($self->{next_input_character} == 110) { # n
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{221E}>}; # infin
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (110, 102, 105, $self->{next_input_character});
              $self->{next_input_character} = 105;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (110, 102, $self->{next_input_character});
            $self->{next_input_character} = 105;
          }
        } elsif ($self->{next_input_character} == 116) { # t
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{222B}>}; # int
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (110, $self->{next_input_character});
          $self->{next_input_character} = 105;
        }
      } elsif ($self->{next_input_character} == 111) { # o
        !!!next-input-character;
        if ($self->{next_input_character} == 116) { # t
          !!!next-input-character;
          if ($self->{next_input_character} == 97) { # a
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{03B9}>}; # iota
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (111, 116, $self->{next_input_character});
            $self->{next_input_character} = 105;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (111, $self->{next_input_character});
          $self->{next_input_character} = 105;
        }
      } elsif ($self->{next_input_character} == 113) { # q
        !!!next-input-character;
        if ($self->{next_input_character} == 117) { # u
          !!!next-input-character;
          if ($self->{next_input_character} == 101) { # e
            !!!next-input-character;
            if ($self->{next_input_character} == 115) { # s
              !!!next-input-character;
              if ($self->{next_input_character} == 116) { # t
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00BF}>}; # iquest
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (113, 117, 101, 115, $self->{next_input_character});
                $self->{next_input_character} = 105;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (113, 117, 101, $self->{next_input_character});
              $self->{next_input_character} = 105;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (113, 117, $self->{next_input_character});
            $self->{next_input_character} = 105;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (113, $self->{next_input_character});
          $self->{next_input_character} = 105;
        }
      } elsif ($self->{next_input_character} == 115) { # s
        !!!next-input-character;
        if ($self->{next_input_character} == 105) { # i
          !!!next-input-character;
          if ($self->{next_input_character} == 110) { # n
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{2208}>}; # isin
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (115, 105, $self->{next_input_character});
            $self->{next_input_character} = 105;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (115, $self->{next_input_character});
          $self->{next_input_character} = 105;
        }
      } elsif ($self->{next_input_character} == 117) { # u
        !!!next-input-character;
        if ($self->{next_input_character} == 109) { # m
          !!!next-input-character;
          if ($self->{next_input_character} == 108) { # l
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{00EF}>}; # iuml
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (117, 109, $self->{next_input_character});
            $self->{next_input_character} = 105;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (117, $self->{next_input_character});
          $self->{next_input_character} = 105;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 105;
      }
    } elsif ($self->{next_input_character} == 107) { # k
      !!!next-input-character;
      if ($self->{next_input_character} == 97) { # a
        !!!next-input-character;
        if ($self->{next_input_character} == 112) { # p
          !!!next-input-character;
          if ($self->{next_input_character} == 112) { # p
            !!!next-input-character;
            if ($self->{next_input_character} == 97) { # a
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{03BA}>}; # kappa
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (97, 112, 112, $self->{next_input_character});
              $self->{next_input_character} = 107;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (97, 112, $self->{next_input_character});
            $self->{next_input_character} = 107;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (97, $self->{next_input_character});
          $self->{next_input_character} = 107;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 107;
      }
    } elsif ($self->{next_input_character} == 108) { # l
      !!!next-input-character;
      if ($self->{next_input_character} == 65) { # A
        !!!next-input-character;
        if ($self->{next_input_character} == 114) { # r
          !!!next-input-character;
          if ($self->{next_input_character} == 114) { # r
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{21D0}>}; # lArr
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (65, 114, $self->{next_input_character});
            $self->{next_input_character} = 108;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (65, $self->{next_input_character});
          $self->{next_input_character} = 108;
        }
      } elsif ($self->{next_input_character} == 97) { # a
        !!!next-input-character;
        if ($self->{next_input_character} == 109) { # m
          !!!next-input-character;
          if ($self->{next_input_character} == 98) { # b
            !!!next-input-character;
            if ($self->{next_input_character} == 100) { # d
              !!!next-input-character;
              if ($self->{next_input_character} == 97) { # a
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{03BB}>}; # lambda
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (97, 109, 98, 100, $self->{next_input_character});
                $self->{next_input_character} = 108;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (97, 109, 98, $self->{next_input_character});
              $self->{next_input_character} = 108;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (97, 109, $self->{next_input_character});
            $self->{next_input_character} = 108;
          }
        } elsif ($self->{next_input_character} == 110) { # n
          !!!next-input-character;
          if ($self->{next_input_character} == 103) { # g
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{2329}>}; # lang
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (97, 110, $self->{next_input_character});
            $self->{next_input_character} = 108;
          }
        } elsif ($self->{next_input_character} == 113) { # q
          !!!next-input-character;
          if ($self->{next_input_character} == 117) { # u
            !!!next-input-character;
            if ($self->{next_input_character} == 111) { # o
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{00AB}>}; # laquo
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (97, 113, 117, $self->{next_input_character});
              $self->{next_input_character} = 108;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (97, 113, $self->{next_input_character});
            $self->{next_input_character} = 108;
          }
        } elsif ($self->{next_input_character} == 114) { # r
          !!!next-input-character;
          if ($self->{next_input_character} == 114) { # r
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{2190}>}; # larr
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (97, 114, $self->{next_input_character});
            $self->{next_input_character} = 108;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (97, $self->{next_input_character});
          $self->{next_input_character} = 108;
        }
      } elsif ($self->{next_input_character} == 99) { # c
        !!!next-input-character;
        if ($self->{next_input_character} == 101) { # e
          !!!next-input-character;
          if ($self->{next_input_character} == 105) { # i
            !!!next-input-character;
            if ($self->{next_input_character} == 108) { # l
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{2308}>}; # lceil
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (99, 101, 105, $self->{next_input_character});
              $self->{next_input_character} = 108;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (99, 101, $self->{next_input_character});
            $self->{next_input_character} = 108;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (99, $self->{next_input_character});
          $self->{next_input_character} = 108;
        }
      } elsif ($self->{next_input_character} == 100) { # d
        !!!next-input-character;
        if ($self->{next_input_character} == 113) { # q
          !!!next-input-character;
          if ($self->{next_input_character} == 117) { # u
            !!!next-input-character;
            if ($self->{next_input_character} == 111) { # o
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{201C}>}; # ldquo
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (100, 113, 117, $self->{next_input_character});
              $self->{next_input_character} = 108;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (100, 113, $self->{next_input_character});
            $self->{next_input_character} = 108;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (100, $self->{next_input_character});
          $self->{next_input_character} = 108;
        }
      } elsif ($self->{next_input_character} == 101) { # e
        !!!next-input-character;
        {
          $r = {type => 'character', data => qq<\x{2264}>}; # le
          if ($self->{next_input_character} == 0x003B) { # ;
            !!!next-input-character;
          } else {
            !!!parse-error;
            ## reconsume
          }
        }
      } elsif ($self->{next_input_character} == 102) { # f
        !!!next-input-character;
        if ($self->{next_input_character} == 108) { # l
          !!!next-input-character;
          if ($self->{next_input_character} == 111) { # o
            !!!next-input-character;
            if ($self->{next_input_character} == 111) { # o
              !!!next-input-character;
              if ($self->{next_input_character} == 114) { # r
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{230A}>}; # lfloor
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (102, 108, 111, 111, $self->{next_input_character});
                $self->{next_input_character} = 108;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (102, 108, 111, $self->{next_input_character});
              $self->{next_input_character} = 108;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (102, 108, $self->{next_input_character});
            $self->{next_input_character} = 108;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (102, $self->{next_input_character});
          $self->{next_input_character} = 108;
        }
      } elsif ($self->{next_input_character} == 111) { # o
        !!!next-input-character;
        if ($self->{next_input_character} == 119) { # w
          !!!next-input-character;
          if ($self->{next_input_character} == 97) { # a
            !!!next-input-character;
            if ($self->{next_input_character} == 115) { # s
              !!!next-input-character;
              if ($self->{next_input_character} == 116) { # t
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{2217}>}; # lowast
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (111, 119, 97, 115, $self->{next_input_character});
                $self->{next_input_character} = 108;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (111, 119, 97, $self->{next_input_character});
              $self->{next_input_character} = 108;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (111, 119, $self->{next_input_character});
            $self->{next_input_character} = 108;
          }
        } elsif ($self->{next_input_character} == 122) { # z
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{25CA}>}; # loz
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (111, $self->{next_input_character});
          $self->{next_input_character} = 108;
        }
      } elsif ($self->{next_input_character} == 114) { # r
        !!!next-input-character;
        if ($self->{next_input_character} == 109) { # m
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{200E}>}; # lrm
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (114, $self->{next_input_character});
          $self->{next_input_character} = 108;
        }
      } elsif ($self->{next_input_character} == 115) { # s
        !!!next-input-character;
        if ($self->{next_input_character} == 97) { # a
          !!!next-input-character;
          if ($self->{next_input_character} == 113) { # q
            !!!next-input-character;
            if ($self->{next_input_character} == 117) { # u
              !!!next-input-character;
              if ($self->{next_input_character} == 111) { # o
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{2039}>}; # lsaquo
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (115, 97, 113, 117, $self->{next_input_character});
                $self->{next_input_character} = 108;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (115, 97, 113, $self->{next_input_character});
              $self->{next_input_character} = 108;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (115, 97, $self->{next_input_character});
            $self->{next_input_character} = 108;
          }
        } elsif ($self->{next_input_character} == 113) { # q
          !!!next-input-character;
          if ($self->{next_input_character} == 117) { # u
            !!!next-input-character;
            if ($self->{next_input_character} == 111) { # o
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{2018}>}; # lsquo
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (115, 113, 117, $self->{next_input_character});
              $self->{next_input_character} = 108;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (115, 113, $self->{next_input_character});
            $self->{next_input_character} = 108;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (115, $self->{next_input_character});
          $self->{next_input_character} = 108;
        }
      } elsif ($self->{next_input_character} == 116) { # t
        !!!next-input-character;
        {
          $r = {type => 'character', data => qq<\x{003C}>}; # lt
          if ($self->{next_input_character} == 0x003B) { # ;
            !!!next-input-character;
          } else {
            !!!parse-error;
            ## reconsume
          }
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 108;
      }
    } elsif ($self->{next_input_character} == 109) { # m
      !!!next-input-character;
      if ($self->{next_input_character} == 97) { # a
        !!!next-input-character;
        if ($self->{next_input_character} == 99) { # c
          !!!next-input-character;
          if ($self->{next_input_character} == 114) { # r
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{00AF}>}; # macr
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (97, 99, $self->{next_input_character});
            $self->{next_input_character} = 109;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (97, $self->{next_input_character});
          $self->{next_input_character} = 109;
        }
      } elsif ($self->{next_input_character} == 100) { # d
        !!!next-input-character;
        if ($self->{next_input_character} == 97) { # a
          !!!next-input-character;
          if ($self->{next_input_character} == 115) { # s
            !!!next-input-character;
            if ($self->{next_input_character} == 104) { # h
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{2014}>}; # mdash
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (100, 97, 115, $self->{next_input_character});
              $self->{next_input_character} = 109;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (100, 97, $self->{next_input_character});
            $self->{next_input_character} = 109;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (100, $self->{next_input_character});
          $self->{next_input_character} = 109;
        }
      } elsif ($self->{next_input_character} == 105) { # i
        !!!next-input-character;
        if ($self->{next_input_character} == 99) { # c
          !!!next-input-character;
          if ($self->{next_input_character} == 114) { # r
            !!!next-input-character;
            if ($self->{next_input_character} == 111) { # o
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{00B5}>}; # micro
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (105, 99, 114, $self->{next_input_character});
              $self->{next_input_character} = 109;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (105, 99, $self->{next_input_character});
            $self->{next_input_character} = 109;
          }
        } elsif ($self->{next_input_character} == 100) { # d
          !!!next-input-character;
          if ($self->{next_input_character} == 100) { # d
            !!!next-input-character;
            if ($self->{next_input_character} == 111) { # o
              !!!next-input-character;
              if ($self->{next_input_character} == 116) { # t
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00B7}>}; # middot
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (105, 100, 100, 111, $self->{next_input_character});
                $self->{next_input_character} = 109;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (105, 100, 100, $self->{next_input_character});
              $self->{next_input_character} = 109;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (105, 100, $self->{next_input_character});
            $self->{next_input_character} = 109;
          }
        } elsif ($self->{next_input_character} == 110) { # n
          !!!next-input-character;
          if ($self->{next_input_character} == 117) { # u
            !!!next-input-character;
            if ($self->{next_input_character} == 115) { # s
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{2212}>}; # minus
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (105, 110, 117, $self->{next_input_character});
              $self->{next_input_character} = 109;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (105, 110, $self->{next_input_character});
            $self->{next_input_character} = 109;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (105, $self->{next_input_character});
          $self->{next_input_character} = 109;
        }
      } elsif ($self->{next_input_character} == 117) { # u
        !!!next-input-character;
        {
          $r = {type => 'character', data => qq<\x{03BC}>}; # mu
          if ($self->{next_input_character} == 0x003B) { # ;
            !!!next-input-character;
          } else {
            !!!parse-error;
            ## reconsume
          }
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 109;
      }
    } elsif ($self->{next_input_character} == 110) { # n
      !!!next-input-character;
      if ($self->{next_input_character} == 97) { # a
        !!!next-input-character;
        if ($self->{next_input_character} == 98) { # b
          !!!next-input-character;
          if ($self->{next_input_character} == 108) { # l
            !!!next-input-character;
            if ($self->{next_input_character} == 97) { # a
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{2207}>}; # nabla
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (97, 98, 108, $self->{next_input_character});
              $self->{next_input_character} = 110;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (97, 98, $self->{next_input_character});
            $self->{next_input_character} = 110;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (97, $self->{next_input_character});
          $self->{next_input_character} = 110;
        }
      } elsif ($self->{next_input_character} == 98) { # b
        !!!next-input-character;
        if ($self->{next_input_character} == 115) { # s
          !!!next-input-character;
          if ($self->{next_input_character} == 112) { # p
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{00A0}>}; # nbsp
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (98, 115, $self->{next_input_character});
            $self->{next_input_character} = 110;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (98, $self->{next_input_character});
          $self->{next_input_character} = 110;
        }
      } elsif ($self->{next_input_character} == 100) { # d
        !!!next-input-character;
        if ($self->{next_input_character} == 97) { # a
          !!!next-input-character;
          if ($self->{next_input_character} == 115) { # s
            !!!next-input-character;
            if ($self->{next_input_character} == 104) { # h
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{2013}>}; # ndash
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (100, 97, 115, $self->{next_input_character});
              $self->{next_input_character} = 110;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (100, 97, $self->{next_input_character});
            $self->{next_input_character} = 110;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (100, $self->{next_input_character});
          $self->{next_input_character} = 110;
        }
      } elsif ($self->{next_input_character} == 101) { # e
        !!!next-input-character;
        {
          $r = {type => 'character', data => qq<\x{2260}>}; # ne
          if ($self->{next_input_character} == 0x003B) { # ;
            !!!next-input-character;
          } else {
            !!!parse-error;
            ## reconsume
          }
        }
      } elsif ($self->{next_input_character} == 105) { # i
        !!!next-input-character;
        {
          $r = {type => 'character', data => qq<\x{220B}>}; # ni
          if ($self->{next_input_character} == 0x003B) { # ;
            !!!next-input-character;
          } else {
            !!!parse-error;
            ## reconsume
          }
        }
      } elsif ($self->{next_input_character} == 111) { # o
        !!!next-input-character;
        if ($self->{next_input_character} == 116) { # t
          !!!next-input-character;
          if ($self->{next_input_character} == 105) { # i
            !!!next-input-character;
            if ($self->{next_input_character} == 110) { # n
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{2209}>}; # notin
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (111, 116, 105, $self->{next_input_character});
              $self->{next_input_character} = 110;
            }
          } else {
            $r = {type => 'character', data => qq<\x{00AC}>}; # not
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (111, $self->{next_input_character});
          $self->{next_input_character} = 110;
        }
      } elsif ($self->{next_input_character} == 115) { # s
        !!!next-input-character;
        if ($self->{next_input_character} == 117) { # u
          !!!next-input-character;
          if ($self->{next_input_character} == 98) { # b
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{2284}>}; # nsub
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (115, 117, $self->{next_input_character});
            $self->{next_input_character} = 110;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (115, $self->{next_input_character});
          $self->{next_input_character} = 110;
        }
      } elsif ($self->{next_input_character} == 116) { # t
        !!!next-input-character;
        if ($self->{next_input_character} == 105) { # i
          !!!next-input-character;
          if ($self->{next_input_character} == 108) { # l
            !!!next-input-character;
            if ($self->{next_input_character} == 100) { # d
              !!!next-input-character;
              if ($self->{next_input_character} == 101) { # e
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00F1}>}; # ntilde
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (116, 105, 108, 100, $self->{next_input_character});
                $self->{next_input_character} = 110;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (116, 105, 108, $self->{next_input_character});
              $self->{next_input_character} = 110;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (116, 105, $self->{next_input_character});
            $self->{next_input_character} = 110;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (116, $self->{next_input_character});
          $self->{next_input_character} = 110;
        }
      } elsif ($self->{next_input_character} == 117) { # u
        !!!next-input-character;
        {
          $r = {type => 'character', data => qq<\x{03BD}>}; # nu
          if ($self->{next_input_character} == 0x003B) { # ;
            !!!next-input-character;
          } else {
            !!!parse-error;
            ## reconsume
          }
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 110;
      }
    } elsif ($self->{next_input_character} == 111) { # o
      !!!next-input-character;
      if ($self->{next_input_character} == 97) { # a
        !!!next-input-character;
        if ($self->{next_input_character} == 99) { # c
          !!!next-input-character;
          if ($self->{next_input_character} == 117) { # u
            !!!next-input-character;
            if ($self->{next_input_character} == 116) { # t
              !!!next-input-character;
              if ($self->{next_input_character} == 101) { # e
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00F3}>}; # oacute
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (97, 99, 117, 116, $self->{next_input_character});
                $self->{next_input_character} = 111;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (97, 99, 117, $self->{next_input_character});
              $self->{next_input_character} = 111;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (97, 99, $self->{next_input_character});
            $self->{next_input_character} = 111;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (97, $self->{next_input_character});
          $self->{next_input_character} = 111;
        }
      } elsif ($self->{next_input_character} == 99) { # c
        !!!next-input-character;
        if ($self->{next_input_character} == 105) { # i
          !!!next-input-character;
          if ($self->{next_input_character} == 114) { # r
            !!!next-input-character;
            if ($self->{next_input_character} == 99) { # c
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{00F4}>}; # ocirc
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (99, 105, 114, $self->{next_input_character});
              $self->{next_input_character} = 111;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (99, 105, $self->{next_input_character});
            $self->{next_input_character} = 111;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (99, $self->{next_input_character});
          $self->{next_input_character} = 111;
        }
      } elsif ($self->{next_input_character} == 101) { # e
        !!!next-input-character;
        if ($self->{next_input_character} == 108) { # l
          !!!next-input-character;
          if ($self->{next_input_character} == 105) { # i
            !!!next-input-character;
            if ($self->{next_input_character} == 103) { # g
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{0153}>}; # oelig
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (101, 108, 105, $self->{next_input_character});
              $self->{next_input_character} = 111;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (101, 108, $self->{next_input_character});
            $self->{next_input_character} = 111;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (101, $self->{next_input_character});
          $self->{next_input_character} = 111;
        }
      } elsif ($self->{next_input_character} == 103) { # g
        !!!next-input-character;
        if ($self->{next_input_character} == 114) { # r
          !!!next-input-character;
          if ($self->{next_input_character} == 97) { # a
            !!!next-input-character;
            if ($self->{next_input_character} == 118) { # v
              !!!next-input-character;
              if ($self->{next_input_character} == 101) { # e
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00F2}>}; # ograve
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (103, 114, 97, 118, $self->{next_input_character});
                $self->{next_input_character} = 111;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (103, 114, 97, $self->{next_input_character});
              $self->{next_input_character} = 111;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (103, 114, $self->{next_input_character});
            $self->{next_input_character} = 111;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (103, $self->{next_input_character});
          $self->{next_input_character} = 111;
        }
      } elsif ($self->{next_input_character} == 108) { # l
        !!!next-input-character;
        if ($self->{next_input_character} == 105) { # i
          !!!next-input-character;
          if ($self->{next_input_character} == 110) { # n
            !!!next-input-character;
            if ($self->{next_input_character} == 101) { # e
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{203E}>}; # oline
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (108, 105, 110, $self->{next_input_character});
              $self->{next_input_character} = 111;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (108, 105, $self->{next_input_character});
            $self->{next_input_character} = 111;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (108, $self->{next_input_character});
          $self->{next_input_character} = 111;
        }
      } elsif ($self->{next_input_character} == 109) { # m
        !!!next-input-character;
        if ($self->{next_input_character} == 101) { # e
          !!!next-input-character;
          if ($self->{next_input_character} == 103) { # g
            !!!next-input-character;
            if ($self->{next_input_character} == 97) { # a
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{03C9}>}; # omega
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (109, 101, 103, $self->{next_input_character});
              $self->{next_input_character} = 111;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (109, 101, $self->{next_input_character});
            $self->{next_input_character} = 111;
          }
        } elsif ($self->{next_input_character} == 105) { # i
          !!!next-input-character;
          if ($self->{next_input_character} == 99) { # c
            !!!next-input-character;
            if ($self->{next_input_character} == 114) { # r
              !!!next-input-character;
              if ($self->{next_input_character} == 111) { # o
                !!!next-input-character;
                if ($self->{next_input_character} == 110) { # n
                  !!!next-input-character;
                  {
                    $r = {type => 'character', data => qq<\x{03BF}>}; # omicron
                    if ($self->{next_input_character} == 0x003B) { # ;
                      !!!next-input-character;
                    } else {
                      !!!parse-error;
                      ## reconsume
                    }
                  }
                } else {
                  !!!parse-error;
                  !!!back-next-input-character (109, 105, 99, 114, 111, $self->{next_input_character});
                  $self->{next_input_character} = 111;
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (109, 105, 99, 114, $self->{next_input_character});
                $self->{next_input_character} = 111;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (109, 105, 99, $self->{next_input_character});
              $self->{next_input_character} = 111;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (109, 105, $self->{next_input_character});
            $self->{next_input_character} = 111;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (109, $self->{next_input_character});
          $self->{next_input_character} = 111;
        }
      } elsif ($self->{next_input_character} == 112) { # p
        !!!next-input-character;
        if ($self->{next_input_character} == 108) { # l
          !!!next-input-character;
          if ($self->{next_input_character} == 117) { # u
            !!!next-input-character;
            if ($self->{next_input_character} == 115) { # s
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{2295}>}; # oplus
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (112, 108, 117, $self->{next_input_character});
              $self->{next_input_character} = 111;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (112, 108, $self->{next_input_character});
            $self->{next_input_character} = 111;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (112, $self->{next_input_character});
          $self->{next_input_character} = 111;
        }
      } elsif ($self->{next_input_character} == 114) { # r
        !!!next-input-character;
        if ($self->{next_input_character} == 100) { # d
          !!!next-input-character;
          if ($self->{next_input_character} == 102) { # f
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{00AA}>}; # ordf
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } elsif ($self->{next_input_character} == 109) { # m
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{00BA}>}; # ordm
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (114, 100, $self->{next_input_character});
            $self->{next_input_character} = 111;
          }
        } else {
          $r = {type => 'character', data => qq<\x{2228}>}; # or
          if ($self->{next_input_character} == 0x003B) { # ;
            !!!next-input-character;
          } else {
            !!!parse-error;
            ## reconsume
          }
        }
      } elsif ($self->{next_input_character} == 115) { # s
        !!!next-input-character;
        if ($self->{next_input_character} == 108) { # l
          !!!next-input-character;
          if ($self->{next_input_character} == 97) { # a
            !!!next-input-character;
            if ($self->{next_input_character} == 115) { # s
              !!!next-input-character;
              if ($self->{next_input_character} == 104) { # h
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00F8}>}; # oslash
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (115, 108, 97, 115, $self->{next_input_character});
                $self->{next_input_character} = 111;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (115, 108, 97, $self->{next_input_character});
              $self->{next_input_character} = 111;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (115, 108, $self->{next_input_character});
            $self->{next_input_character} = 111;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (115, $self->{next_input_character});
          $self->{next_input_character} = 111;
        }
      } elsif ($self->{next_input_character} == 116) { # t
        !!!next-input-character;
        if ($self->{next_input_character} == 105) { # i
          !!!next-input-character;
          if ($self->{next_input_character} == 108) { # l
            !!!next-input-character;
            if ($self->{next_input_character} == 100) { # d
              !!!next-input-character;
              if ($self->{next_input_character} == 101) { # e
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00F5}>}; # otilde
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (116, 105, 108, 100, $self->{next_input_character});
                $self->{next_input_character} = 111;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (116, 105, 108, $self->{next_input_character});
              $self->{next_input_character} = 111;
            }
          } elsif ($self->{next_input_character} == 109) { # m
            !!!next-input-character;
            if ($self->{next_input_character} == 101) { # e
              !!!next-input-character;
              if ($self->{next_input_character} == 115) { # s
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{2297}>}; # otimes
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (116, 105, 109, 101, $self->{next_input_character});
                $self->{next_input_character} = 111;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (116, 105, 109, $self->{next_input_character});
              $self->{next_input_character} = 111;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (116, 105, $self->{next_input_character});
            $self->{next_input_character} = 111;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (116, $self->{next_input_character});
          $self->{next_input_character} = 111;
        }
      } elsif ($self->{next_input_character} == 117) { # u
        !!!next-input-character;
        if ($self->{next_input_character} == 109) { # m
          !!!next-input-character;
          if ($self->{next_input_character} == 108) { # l
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{00F6}>}; # ouml
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (117, 109, $self->{next_input_character});
            $self->{next_input_character} = 111;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (117, $self->{next_input_character});
          $self->{next_input_character} = 111;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 111;
      }
    } elsif ($self->{next_input_character} == 112) { # p
      !!!next-input-character;
      if ($self->{next_input_character} == 97) { # a
        !!!next-input-character;
        if ($self->{next_input_character} == 114) { # r
          !!!next-input-character;
          if ($self->{next_input_character} == 97) { # a
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{00B6}>}; # para
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } elsif ($self->{next_input_character} == 116) { # t
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{2202}>}; # part
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (97, 114, $self->{next_input_character});
            $self->{next_input_character} = 112;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (97, $self->{next_input_character});
          $self->{next_input_character} = 112;
        }
      } elsif ($self->{next_input_character} == 101) { # e
        !!!next-input-character;
        if ($self->{next_input_character} == 114) { # r
          !!!next-input-character;
          if ($self->{next_input_character} == 109) { # m
            !!!next-input-character;
            if ($self->{next_input_character} == 105) { # i
              !!!next-input-character;
              if ($self->{next_input_character} == 108) { # l
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{2030}>}; # permil
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (101, 114, 109, 105, $self->{next_input_character});
                $self->{next_input_character} = 112;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (101, 114, 109, $self->{next_input_character});
              $self->{next_input_character} = 112;
            }
          } elsif ($self->{next_input_character} == 112) { # p
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{22A5}>}; # perp
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (101, 114, $self->{next_input_character});
            $self->{next_input_character} = 112;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (101, $self->{next_input_character});
          $self->{next_input_character} = 112;
        }
      } elsif ($self->{next_input_character} == 104) { # h
        !!!next-input-character;
        if ($self->{next_input_character} == 105) { # i
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{03C6}>}; # phi
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (104, $self->{next_input_character});
          $self->{next_input_character} = 112;
        }
      } elsif ($self->{next_input_character} == 105) { # i
        !!!next-input-character;
        if ($self->{next_input_character} == 118) { # v
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{03D6}>}; # piv
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } else {
          $r = {type => 'character', data => qq<\x{03C0}>}; # pi
          if ($self->{next_input_character} == 0x003B) { # ;
            !!!next-input-character;
          } else {
            !!!parse-error;
            ## reconsume
          }
        }
      } elsif ($self->{next_input_character} == 108) { # l
        !!!next-input-character;
        if ($self->{next_input_character} == 117) { # u
          !!!next-input-character;
          if ($self->{next_input_character} == 115) { # s
            !!!next-input-character;
            if ($self->{next_input_character} == 109) { # m
              !!!next-input-character;
              if ($self->{next_input_character} == 110) { # n
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00B1}>}; # plusmn
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (108, 117, 115, 109, $self->{next_input_character});
                $self->{next_input_character} = 112;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (108, 117, 115, $self->{next_input_character});
              $self->{next_input_character} = 112;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (108, 117, $self->{next_input_character});
            $self->{next_input_character} = 112;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (108, $self->{next_input_character});
          $self->{next_input_character} = 112;
        }
      } elsif ($self->{next_input_character} == 111) { # o
        !!!next-input-character;
        if ($self->{next_input_character} == 117) { # u
          !!!next-input-character;
          if ($self->{next_input_character} == 110) { # n
            !!!next-input-character;
            if ($self->{next_input_character} == 100) { # d
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{00A3}>}; # pound
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (111, 117, 110, $self->{next_input_character});
              $self->{next_input_character} = 112;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (111, 117, $self->{next_input_character});
            $self->{next_input_character} = 112;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (111, $self->{next_input_character});
          $self->{next_input_character} = 112;
        }
      } elsif ($self->{next_input_character} == 114) { # r
        !!!next-input-character;
        if ($self->{next_input_character} == 105) { # i
          !!!next-input-character;
          if ($self->{next_input_character} == 109) { # m
            !!!next-input-character;
            if ($self->{next_input_character} == 101) { # e
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{2032}>}; # prime
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (114, 105, 109, $self->{next_input_character});
              $self->{next_input_character} = 112;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (114, 105, $self->{next_input_character});
            $self->{next_input_character} = 112;
          }
        } elsif ($self->{next_input_character} == 111) { # o
          !!!next-input-character;
          if ($self->{next_input_character} == 100) { # d
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{220F}>}; # prod
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } elsif ($self->{next_input_character} == 112) { # p
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{221D}>}; # prop
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (114, 111, $self->{next_input_character});
            $self->{next_input_character} = 112;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (114, $self->{next_input_character});
          $self->{next_input_character} = 112;
        }
      } elsif ($self->{next_input_character} == 115) { # s
        !!!next-input-character;
        if ($self->{next_input_character} == 105) { # i
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{03C8}>}; # psi
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (115, $self->{next_input_character});
          $self->{next_input_character} = 112;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 112;
      }
    } elsif ($self->{next_input_character} == 113) { # q
      !!!next-input-character;
      if ($self->{next_input_character} == 117) { # u
        !!!next-input-character;
        if ($self->{next_input_character} == 111) { # o
          !!!next-input-character;
          if ($self->{next_input_character} == 116) { # t
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{0022}>}; # quot
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (117, 111, $self->{next_input_character});
            $self->{next_input_character} = 113;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (117, $self->{next_input_character});
          $self->{next_input_character} = 113;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 113;
      }
    } elsif ($self->{next_input_character} == 81) { # Q
      !!!next-input-character;
      if ($self->{next_input_character} == 85) { # U
        !!!next-input-character;
        if ($self->{next_input_character} == 79) { # O
          !!!next-input-character;
          if ($self->{next_input_character} == 84) { # T
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{0022}>}; # QUOT
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (85, 79, $self->{next_input_character});
            $self->{next_input_character} = 81;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (85, $self->{next_input_character});
          $self->{next_input_character} = 81;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 81;
      }
    } elsif ($self->{next_input_character} == 114) { # r
      !!!next-input-character;
      if ($self->{next_input_character} == 65) { # A
        !!!next-input-character;
        if ($self->{next_input_character} == 114) { # r
          !!!next-input-character;
          if ($self->{next_input_character} == 114) { # r
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{21D2}>}; # rArr
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (65, 114, $self->{next_input_character});
            $self->{next_input_character} = 114;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (65, $self->{next_input_character});
          $self->{next_input_character} = 114;
        }
      } elsif ($self->{next_input_character} == 97) { # a
        !!!next-input-character;
        if ($self->{next_input_character} == 100) { # d
          !!!next-input-character;
          if ($self->{next_input_character} == 105) { # i
            !!!next-input-character;
            if ($self->{next_input_character} == 99) { # c
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{221A}>}; # radic
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (97, 100, 105, $self->{next_input_character});
              $self->{next_input_character} = 114;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (97, 100, $self->{next_input_character});
            $self->{next_input_character} = 114;
          }
        } elsif ($self->{next_input_character} == 110) { # n
          !!!next-input-character;
          if ($self->{next_input_character} == 103) { # g
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{232A}>}; # rang
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (97, 110, $self->{next_input_character});
            $self->{next_input_character} = 114;
          }
        } elsif ($self->{next_input_character} == 113) { # q
          !!!next-input-character;
          if ($self->{next_input_character} == 117) { # u
            !!!next-input-character;
            if ($self->{next_input_character} == 111) { # o
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{00BB}>}; # raquo
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (97, 113, 117, $self->{next_input_character});
              $self->{next_input_character} = 114;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (97, 113, $self->{next_input_character});
            $self->{next_input_character} = 114;
          }
        } elsif ($self->{next_input_character} == 114) { # r
          !!!next-input-character;
          if ($self->{next_input_character} == 114) { # r
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{2192}>}; # rarr
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (97, 114, $self->{next_input_character});
            $self->{next_input_character} = 114;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (97, $self->{next_input_character});
          $self->{next_input_character} = 114;
        }
      } elsif ($self->{next_input_character} == 99) { # c
        !!!next-input-character;
        if ($self->{next_input_character} == 101) { # e
          !!!next-input-character;
          if ($self->{next_input_character} == 105) { # i
            !!!next-input-character;
            if ($self->{next_input_character} == 108) { # l
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{2309}>}; # rceil
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (99, 101, 105, $self->{next_input_character});
              $self->{next_input_character} = 114;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (99, 101, $self->{next_input_character});
            $self->{next_input_character} = 114;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (99, $self->{next_input_character});
          $self->{next_input_character} = 114;
        }
      } elsif ($self->{next_input_character} == 100) { # d
        !!!next-input-character;
        if ($self->{next_input_character} == 113) { # q
          !!!next-input-character;
          if ($self->{next_input_character} == 117) { # u
            !!!next-input-character;
            if ($self->{next_input_character} == 111) { # o
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{201D}>}; # rdquo
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (100, 113, 117, $self->{next_input_character});
              $self->{next_input_character} = 114;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (100, 113, $self->{next_input_character});
            $self->{next_input_character} = 114;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (100, $self->{next_input_character});
          $self->{next_input_character} = 114;
        }
      } elsif ($self->{next_input_character} == 101) { # e
        !!!next-input-character;
        if ($self->{next_input_character} == 97) { # a
          !!!next-input-character;
          if ($self->{next_input_character} == 108) { # l
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{211C}>}; # real
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (101, 97, $self->{next_input_character});
            $self->{next_input_character} = 114;
          }
        } elsif ($self->{next_input_character} == 103) { # g
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{00AE}>}; # reg
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (101, $self->{next_input_character});
          $self->{next_input_character} = 114;
        }
      } elsif ($self->{next_input_character} == 102) { # f
        !!!next-input-character;
        if ($self->{next_input_character} == 108) { # l
          !!!next-input-character;
          if ($self->{next_input_character} == 111) { # o
            !!!next-input-character;
            if ($self->{next_input_character} == 111) { # o
              !!!next-input-character;
              if ($self->{next_input_character} == 114) { # r
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{230B}>}; # rfloor
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (102, 108, 111, 111, $self->{next_input_character});
                $self->{next_input_character} = 114;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (102, 108, 111, $self->{next_input_character});
              $self->{next_input_character} = 114;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (102, 108, $self->{next_input_character});
            $self->{next_input_character} = 114;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (102, $self->{next_input_character});
          $self->{next_input_character} = 114;
        }
      } elsif ($self->{next_input_character} == 104) { # h
        !!!next-input-character;
        if ($self->{next_input_character} == 111) { # o
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{03C1}>}; # rho
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (104, $self->{next_input_character});
          $self->{next_input_character} = 114;
        }
      } elsif ($self->{next_input_character} == 108) { # l
        !!!next-input-character;
        if ($self->{next_input_character} == 109) { # m
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{200F}>}; # rlm
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (108, $self->{next_input_character});
          $self->{next_input_character} = 114;
        }
      } elsif ($self->{next_input_character} == 115) { # s
        !!!next-input-character;
        if ($self->{next_input_character} == 97) { # a
          !!!next-input-character;
          if ($self->{next_input_character} == 113) { # q
            !!!next-input-character;
            if ($self->{next_input_character} == 117) { # u
              !!!next-input-character;
              if ($self->{next_input_character} == 111) { # o
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{203A}>}; # rsaquo
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (115, 97, 113, 117, $self->{next_input_character});
                $self->{next_input_character} = 114;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (115, 97, 113, $self->{next_input_character});
              $self->{next_input_character} = 114;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (115, 97, $self->{next_input_character});
            $self->{next_input_character} = 114;
          }
        } elsif ($self->{next_input_character} == 113) { # q
          !!!next-input-character;
          if ($self->{next_input_character} == 117) { # u
            !!!next-input-character;
            if ($self->{next_input_character} == 111) { # o
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{2019}>}; # rsquo
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (115, 113, 117, $self->{next_input_character});
              $self->{next_input_character} = 114;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (115, 113, $self->{next_input_character});
            $self->{next_input_character} = 114;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (115, $self->{next_input_character});
          $self->{next_input_character} = 114;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 114;
      }
    } elsif ($self->{next_input_character} == 115) { # s
      !!!next-input-character;
      if ($self->{next_input_character} == 98) { # b
        !!!next-input-character;
        if ($self->{next_input_character} == 113) { # q
          !!!next-input-character;
          if ($self->{next_input_character} == 117) { # u
            !!!next-input-character;
            if ($self->{next_input_character} == 111) { # o
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{201A}>}; # sbquo
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (98, 113, 117, $self->{next_input_character});
              $self->{next_input_character} = 115;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (98, 113, $self->{next_input_character});
            $self->{next_input_character} = 115;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (98, $self->{next_input_character});
          $self->{next_input_character} = 115;
        }
      } elsif ($self->{next_input_character} == 99) { # c
        !!!next-input-character;
        if ($self->{next_input_character} == 97) { # a
          !!!next-input-character;
          if ($self->{next_input_character} == 114) { # r
            !!!next-input-character;
            if ($self->{next_input_character} == 111) { # o
              !!!next-input-character;
              if ($self->{next_input_character} == 110) { # n
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{0161}>}; # scaron
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (99, 97, 114, 111, $self->{next_input_character});
                $self->{next_input_character} = 115;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (99, 97, 114, $self->{next_input_character});
              $self->{next_input_character} = 115;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (99, 97, $self->{next_input_character});
            $self->{next_input_character} = 115;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (99, $self->{next_input_character});
          $self->{next_input_character} = 115;
        }
      } elsif ($self->{next_input_character} == 100) { # d
        !!!next-input-character;
        if ($self->{next_input_character} == 111) { # o
          !!!next-input-character;
          if ($self->{next_input_character} == 116) { # t
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{22C5}>}; # sdot
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (100, 111, $self->{next_input_character});
            $self->{next_input_character} = 115;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (100, $self->{next_input_character});
          $self->{next_input_character} = 115;
        }
      } elsif ($self->{next_input_character} == 101) { # e
        !!!next-input-character;
        if ($self->{next_input_character} == 99) { # c
          !!!next-input-character;
          if ($self->{next_input_character} == 116) { # t
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{00A7}>}; # sect
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (101, 99, $self->{next_input_character});
            $self->{next_input_character} = 115;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (101, $self->{next_input_character});
          $self->{next_input_character} = 115;
        }
      } elsif ($self->{next_input_character} == 104) { # h
        !!!next-input-character;
        if ($self->{next_input_character} == 121) { # y
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{00AD}>}; # shy
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (104, $self->{next_input_character});
          $self->{next_input_character} = 115;
        }
      } elsif ($self->{next_input_character} == 105) { # i
        !!!next-input-character;
        if ($self->{next_input_character} == 103) { # g
          !!!next-input-character;
          if ($self->{next_input_character} == 109) { # m
            !!!next-input-character;
            if ($self->{next_input_character} == 97) { # a
              !!!next-input-character;
              if ($self->{next_input_character} == 102) { # f
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{03C2}>}; # sigmaf
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                $r = {type => 'character', data => qq<\x{03C3}>}; # sigma
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (105, 103, 109, $self->{next_input_character});
              $self->{next_input_character} = 115;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (105, 103, $self->{next_input_character});
            $self->{next_input_character} = 115;
          }
        } elsif ($self->{next_input_character} == 109) { # m
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{223C}>}; # sim
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (105, $self->{next_input_character});
          $self->{next_input_character} = 115;
        }
      } elsif ($self->{next_input_character} == 112) { # p
        !!!next-input-character;
        if ($self->{next_input_character} == 97) { # a
          !!!next-input-character;
          if ($self->{next_input_character} == 100) { # d
            !!!next-input-character;
            if ($self->{next_input_character} == 101) { # e
              !!!next-input-character;
              if ($self->{next_input_character} == 115) { # s
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{2660}>}; # spades
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (112, 97, 100, 101, $self->{next_input_character});
                $self->{next_input_character} = 115;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (112, 97, 100, $self->{next_input_character});
              $self->{next_input_character} = 115;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (112, 97, $self->{next_input_character});
            $self->{next_input_character} = 115;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (112, $self->{next_input_character});
          $self->{next_input_character} = 115;
        }
      } elsif ($self->{next_input_character} == 117) { # u
        !!!next-input-character;
        if ($self->{next_input_character} == 98) { # b
          !!!next-input-character;
          if ($self->{next_input_character} == 101) { # e
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{2286}>}; # sube
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            $r = {type => 'character', data => qq<\x{2282}>}; # sub
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } elsif ($self->{next_input_character} == 109) { # m
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{2211}>}; # sum
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } elsif ($self->{next_input_character} == 112) { # p
          !!!next-input-character;
          if ($self->{next_input_character} == 49) { # 1
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{00B9}>}; # sup1
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } elsif ($self->{next_input_character} == 50) { # 2
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{00B2}>}; # sup2
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } elsif ($self->{next_input_character} == 51) { # 3
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{00B3}>}; # sup3
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } elsif ($self->{next_input_character} == 101) { # e
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{2287}>}; # supe
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            $r = {type => 'character', data => qq<\x{2283}>}; # sup
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (117, $self->{next_input_character});
          $self->{next_input_character} = 115;
        }
      } elsif ($self->{next_input_character} == 122) { # z
        !!!next-input-character;
        if ($self->{next_input_character} == 108) { # l
          !!!next-input-character;
          if ($self->{next_input_character} == 105) { # i
            !!!next-input-character;
            if ($self->{next_input_character} == 103) { # g
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{00DF}>}; # szlig
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (122, 108, 105, $self->{next_input_character});
              $self->{next_input_character} = 115;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (122, 108, $self->{next_input_character});
            $self->{next_input_character} = 115;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (122, $self->{next_input_character});
          $self->{next_input_character} = 115;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 115;
      }
    } elsif ($self->{next_input_character} == 116) { # t
      !!!next-input-character;
      if ($self->{next_input_character} == 97) { # a
        !!!next-input-character;
        if ($self->{next_input_character} == 117) { # u
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{03C4}>}; # tau
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (97, $self->{next_input_character});
          $self->{next_input_character} = 116;
        }
      } elsif ($self->{next_input_character} == 104) { # h
        !!!next-input-character;
        if ($self->{next_input_character} == 101) { # e
          !!!next-input-character;
          if ($self->{next_input_character} == 114) { # r
            !!!next-input-character;
            if ($self->{next_input_character} == 101) { # e
              !!!next-input-character;
              if ($self->{next_input_character} == 52) { # 4
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{2234}>}; # there4
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (104, 101, 114, 101, $self->{next_input_character});
                $self->{next_input_character} = 116;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (104, 101, 114, $self->{next_input_character});
              $self->{next_input_character} = 116;
            }
          } elsif ($self->{next_input_character} == 116) { # t
            !!!next-input-character;
            if ($self->{next_input_character} == 97) { # a
              !!!next-input-character;
              if ($self->{next_input_character} == 115) { # s
                !!!next-input-character;
                if ($self->{next_input_character} == 121) { # y
                  !!!next-input-character;
                  if ($self->{next_input_character} == 109) { # m
                    !!!next-input-character;
                    {
                      $r = {type => 'character', data => qq<\x{03D1}>}; # thetasym
                      if ($self->{next_input_character} == 0x003B) { # ;
                        !!!next-input-character;
                      } else {
                        !!!parse-error;
                        ## reconsume
                      }
                    }
                  } else {
                    !!!parse-error;
                    !!!back-next-input-character (104, 101, 116, 97, 115, 121, $self->{next_input_character});
                    $self->{next_input_character} = 116;
                  }
                } else {
                  !!!parse-error;
                  !!!back-next-input-character (104, 101, 116, 97, 115, $self->{next_input_character});
                  $self->{next_input_character} = 116;
                }
              } else {
                $r = {type => 'character', data => qq<\x{03B8}>}; # theta
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (104, 101, 116, $self->{next_input_character});
              $self->{next_input_character} = 116;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (104, 101, $self->{next_input_character});
            $self->{next_input_character} = 116;
          }
        } elsif ($self->{next_input_character} == 105) { # i
          !!!next-input-character;
          if ($self->{next_input_character} == 110) { # n
            !!!next-input-character;
            if ($self->{next_input_character} == 115) { # s
              !!!next-input-character;
              if ($self->{next_input_character} == 112) { # p
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{2009}>}; # thinsp
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (104, 105, 110, 115, $self->{next_input_character});
                $self->{next_input_character} = 116;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (104, 105, 110, $self->{next_input_character});
              $self->{next_input_character} = 116;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (104, 105, $self->{next_input_character});
            $self->{next_input_character} = 116;
          }
        } elsif ($self->{next_input_character} == 111) { # o
          !!!next-input-character;
          if ($self->{next_input_character} == 114) { # r
            !!!next-input-character;
            if ($self->{next_input_character} == 110) { # n
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{00FE}>}; # thorn
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (104, 111, 114, $self->{next_input_character});
              $self->{next_input_character} = 116;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (104, 111, $self->{next_input_character});
            $self->{next_input_character} = 116;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (104, $self->{next_input_character});
          $self->{next_input_character} = 116;
        }
      } elsif ($self->{next_input_character} == 105) { # i
        !!!next-input-character;
        if ($self->{next_input_character} == 108) { # l
          !!!next-input-character;
          if ($self->{next_input_character} == 100) { # d
            !!!next-input-character;
            if ($self->{next_input_character} == 101) { # e
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{02DC}>}; # tilde
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (105, 108, 100, $self->{next_input_character});
              $self->{next_input_character} = 116;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (105, 108, $self->{next_input_character});
            $self->{next_input_character} = 116;
          }
        } elsif ($self->{next_input_character} == 109) { # m
          !!!next-input-character;
          if ($self->{next_input_character} == 101) { # e
            !!!next-input-character;
            if ($self->{next_input_character} == 115) { # s
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{00D7}>}; # times
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (105, 109, 101, $self->{next_input_character});
              $self->{next_input_character} = 116;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (105, 109, $self->{next_input_character});
            $self->{next_input_character} = 116;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (105, $self->{next_input_character});
          $self->{next_input_character} = 116;
        }
      } elsif ($self->{next_input_character} == 114) { # r
        !!!next-input-character;
        if ($self->{next_input_character} == 97) { # a
          !!!next-input-character;
          if ($self->{next_input_character} == 100) { # d
            !!!next-input-character;
            if ($self->{next_input_character} == 101) { # e
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{2122}>}; # trade
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (114, 97, 100, $self->{next_input_character});
              $self->{next_input_character} = 116;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (114, 97, $self->{next_input_character});
            $self->{next_input_character} = 116;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (114, $self->{next_input_character});
          $self->{next_input_character} = 116;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 116;
      }
    } elsif ($self->{next_input_character} == 117) { # u
      !!!next-input-character;
      if ($self->{next_input_character} == 65) { # A
        !!!next-input-character;
        if ($self->{next_input_character} == 114) { # r
          !!!next-input-character;
          if ($self->{next_input_character} == 114) { # r
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{21D1}>}; # uArr
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (65, 114, $self->{next_input_character});
            $self->{next_input_character} = 117;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (65, $self->{next_input_character});
          $self->{next_input_character} = 117;
        }
      } elsif ($self->{next_input_character} == 97) { # a
        !!!next-input-character;
        if ($self->{next_input_character} == 99) { # c
          !!!next-input-character;
          if ($self->{next_input_character} == 117) { # u
            !!!next-input-character;
            if ($self->{next_input_character} == 116) { # t
              !!!next-input-character;
              if ($self->{next_input_character} == 101) { # e
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00FA}>}; # uacute
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (97, 99, 117, 116, $self->{next_input_character});
                $self->{next_input_character} = 117;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (97, 99, 117, $self->{next_input_character});
              $self->{next_input_character} = 117;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (97, 99, $self->{next_input_character});
            $self->{next_input_character} = 117;
          }
        } elsif ($self->{next_input_character} == 114) { # r
          !!!next-input-character;
          if ($self->{next_input_character} == 114) { # r
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{2191}>}; # uarr
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (97, 114, $self->{next_input_character});
            $self->{next_input_character} = 117;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (97, $self->{next_input_character});
          $self->{next_input_character} = 117;
        }
      } elsif ($self->{next_input_character} == 99) { # c
        !!!next-input-character;
        if ($self->{next_input_character} == 105) { # i
          !!!next-input-character;
          if ($self->{next_input_character} == 114) { # r
            !!!next-input-character;
            if ($self->{next_input_character} == 99) { # c
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{00FB}>}; # ucirc
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (99, 105, 114, $self->{next_input_character});
              $self->{next_input_character} = 117;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (99, 105, $self->{next_input_character});
            $self->{next_input_character} = 117;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (99, $self->{next_input_character});
          $self->{next_input_character} = 117;
        }
      } elsif ($self->{next_input_character} == 103) { # g
        !!!next-input-character;
        if ($self->{next_input_character} == 114) { # r
          !!!next-input-character;
          if ($self->{next_input_character} == 97) { # a
            !!!next-input-character;
            if ($self->{next_input_character} == 118) { # v
              !!!next-input-character;
              if ($self->{next_input_character} == 101) { # e
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00F9}>}; # ugrave
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (103, 114, 97, 118, $self->{next_input_character});
                $self->{next_input_character} = 117;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (103, 114, 97, $self->{next_input_character});
              $self->{next_input_character} = 117;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (103, 114, $self->{next_input_character});
            $self->{next_input_character} = 117;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (103, $self->{next_input_character});
          $self->{next_input_character} = 117;
        }
      } elsif ($self->{next_input_character} == 109) { # m
        !!!next-input-character;
        if ($self->{next_input_character} == 108) { # l
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{00A8}>}; # uml
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (109, $self->{next_input_character});
          $self->{next_input_character} = 117;
        }
      } elsif ($self->{next_input_character} == 112) { # p
        !!!next-input-character;
        if ($self->{next_input_character} == 115) { # s
          !!!next-input-character;
          if ($self->{next_input_character} == 105) { # i
            !!!next-input-character;
            if ($self->{next_input_character} == 104) { # h
              !!!next-input-character;
              {
                $r = {type => 'character', data => qq<\x{03D2}>}; # upsih
                if ($self->{next_input_character} == 0x003B) { # ;
                  !!!next-input-character;
                } else {
                  !!!parse-error;
                  ## reconsume
                }
              }
            } elsif ($self->{next_input_character} == 108) { # l
              !!!next-input-character;
              if ($self->{next_input_character} == 111) { # o
                !!!next-input-character;
                if ($self->{next_input_character} == 110) { # n
                  !!!next-input-character;
                  {
                    $r = {type => 'character', data => qq<\x{03C5}>}; # upsilon
                    if ($self->{next_input_character} == 0x003B) { # ;
                      !!!next-input-character;
                    } else {
                      !!!parse-error;
                      ## reconsume
                    }
                  }
                } else {
                  !!!parse-error;
                  !!!back-next-input-character (112, 115, 105, 108, 111, $self->{next_input_character});
                  $self->{next_input_character} = 117;
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (112, 115, 105, 108, $self->{next_input_character});
                $self->{next_input_character} = 117;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (112, 115, 105, $self->{next_input_character});
              $self->{next_input_character} = 117;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (112, 115, $self->{next_input_character});
            $self->{next_input_character} = 117;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (112, $self->{next_input_character});
          $self->{next_input_character} = 117;
        }
      } elsif ($self->{next_input_character} == 117) { # u
        !!!next-input-character;
        if ($self->{next_input_character} == 109) { # m
          !!!next-input-character;
          if ($self->{next_input_character} == 108) { # l
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{00FC}>}; # uuml
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (117, 109, $self->{next_input_character});
            $self->{next_input_character} = 117;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (117, $self->{next_input_character});
          $self->{next_input_character} = 117;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 117;
      }
    } elsif ($self->{next_input_character} == 119) { # w
      !!!next-input-character;
      if ($self->{next_input_character} == 101) { # e
        !!!next-input-character;
        if ($self->{next_input_character} == 105) { # i
          !!!next-input-character;
          if ($self->{next_input_character} == 101) { # e
            !!!next-input-character;
            if ($self->{next_input_character} == 114) { # r
              !!!next-input-character;
              if ($self->{next_input_character} == 112) { # p
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{2118}>}; # weierp
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (101, 105, 101, 114, $self->{next_input_character});
                $self->{next_input_character} = 119;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (101, 105, 101, $self->{next_input_character});
              $self->{next_input_character} = 119;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (101, 105, $self->{next_input_character});
            $self->{next_input_character} = 119;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (101, $self->{next_input_character});
          $self->{next_input_character} = 119;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 119;
      }
    } elsif ($self->{next_input_character} == 120) { # x
      !!!next-input-character;
      if ($self->{next_input_character} == 105) { # i
        !!!next-input-character;
        {
          $r = {type => 'character', data => qq<\x{03BE}>}; # xi
          if ($self->{next_input_character} == 0x003B) { # ;
            !!!next-input-character;
          } else {
            !!!parse-error;
            ## reconsume
          }
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 120;
      }
    } elsif ($self->{next_input_character} == 121) { # y
      !!!next-input-character;
      if ($self->{next_input_character} == 97) { # a
        !!!next-input-character;
        if ($self->{next_input_character} == 99) { # c
          !!!next-input-character;
          if ($self->{next_input_character} == 117) { # u
            !!!next-input-character;
            if ($self->{next_input_character} == 116) { # t
              !!!next-input-character;
              if ($self->{next_input_character} == 101) { # e
                !!!next-input-character;
                {
                  $r = {type => 'character', data => qq<\x{00FD}>}; # yacute
                  if ($self->{next_input_character} == 0x003B) { # ;
                    !!!next-input-character;
                  } else {
                    !!!parse-error;
                    ## reconsume
                  }
                }
              } else {
                !!!parse-error;
                !!!back-next-input-character (97, 99, 117, 116, $self->{next_input_character});
                $self->{next_input_character} = 121;
              }
            } else {
              !!!parse-error;
              !!!back-next-input-character (97, 99, 117, $self->{next_input_character});
              $self->{next_input_character} = 121;
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (97, 99, $self->{next_input_character});
            $self->{next_input_character} = 121;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (97, $self->{next_input_character});
          $self->{next_input_character} = 121;
        }
      } elsif ($self->{next_input_character} == 101) { # e
        !!!next-input-character;
        if ($self->{next_input_character} == 110) { # n
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{00A5}>}; # yen
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (101, $self->{next_input_character});
          $self->{next_input_character} = 121;
        }
      } elsif ($self->{next_input_character} == 117) { # u
        !!!next-input-character;
        if ($self->{next_input_character} == 109) { # m
          !!!next-input-character;
          if ($self->{next_input_character} == 108) { # l
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{00FF}>}; # yuml
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (117, 109, $self->{next_input_character});
            $self->{next_input_character} = 121;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (117, $self->{next_input_character});
          $self->{next_input_character} = 121;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 121;
      }
    } elsif ($self->{next_input_character} == 122) { # z
      !!!next-input-character;
      if ($self->{next_input_character} == 101) { # e
        !!!next-input-character;
        if ($self->{next_input_character} == 116) { # t
          !!!next-input-character;
          if ($self->{next_input_character} == 97) { # a
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{03B6}>}; # zeta
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (101, 116, $self->{next_input_character});
            $self->{next_input_character} = 122;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (101, $self->{next_input_character});
          $self->{next_input_character} = 122;
        }
      } elsif ($self->{next_input_character} == 119) { # w
        !!!next-input-character;
        if ($self->{next_input_character} == 106) { # j
          !!!next-input-character;
          {
            $r = {type => 'character', data => qq<\x{200D}>}; # zwj
            if ($self->{next_input_character} == 0x003B) { # ;
              !!!next-input-character;
            } else {
              !!!parse-error;
              ## reconsume
            }
          }
        } elsif ($self->{next_input_character} == 110) { # n
          !!!next-input-character;
          if ($self->{next_input_character} == 106) { # j
            !!!next-input-character;
            {
              $r = {type => 'character', data => qq<\x{200C}>}; # zwnj
              if ($self->{next_input_character} == 0x003B) { # ;
                !!!next-input-character;
              } else {
                !!!parse-error;
                ## reconsume
              }
            }
          } else {
            !!!parse-error;
            !!!back-next-input-character (119, 110, $self->{next_input_character});
            $self->{next_input_character} = 122;
          }
        } else {
          !!!parse-error;
          !!!back-next-input-character (119, $self->{next_input_character});
          $self->{next_input_character} = 122;
        }
      } else {
        !!!parse-error;
        !!!back-next-input-character ($self->{next_input_character});
        $self->{next_input_character} = 122;
      }
    } else {
      !!!parse-error;
    }
    
    ## Generated by: <javascript:%0A%0Avar%20table%20%3D%20document.getElementsByTagName%20%28%27table%27%29%5B0%5D%3B%0Avar%20trs%20%3D%20table.getElementsByTagName%20%28%27tr%27%29%3B%0A%0Afunction%20State%20%28%29%20%7B%20this.reparseNextChars%20%3D%20%5B%5D%20%7D%0AState.prototype.toString%20%3D%20function%20%28indent%29%20%7B%0A%20%20var%20r%20%3D%20%27%27%3B%0A%20%20var%20e%20%3D%20%27%27%3B%0A%20%20for%20%28var%20i%20in%20this%29%20%7B%0A%20%20%20%20if%20%28parseInt%20%28i%29.toString%20%28%29%20%3D%3D%20i%29%20%7B%0A%20%20%20%20%20%20r%20%2B%3D%20%27if%20%28%24next_input_character%20%3D%3D%20%27%20%2B%20i.toString%20%28%29%20%2B%20%27%29%20%7B%20%23%20%27%20%2B%20String.fromCharCode%20%28i%29%20%2B%20%27%5Cn%27%20%2B%0A%20%20%20%20%20%20%20%20%20%20indent%20%2B%20%27%20%20!!!next-input-character%3B%5Cn%27%3B%0A%20%20%20%20%20%20r%20%2B%3D%20indent%20%2B%20%27%20%20%27%20%2B%20this%5Bi%5D.toString%20%28indent%20%2B%20%27%20%20%27%29%3B%0A%20%20%20%20%20%20r%20%2B%3D%20indent%20%2B%20%27%7D%20els%27%3B%0A%20%20%20%20%20%20e%20%3D%20%27e%20%27%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%20%20r%20%2B%3D%20e%20%2B%20%22%7B%5Cn%22%3B%0A%20%20if%20%28this.codePoint%29%20%7B%0A%20%20%20%20r%20%2B%3D%20indent%20%2B%20%22%20%20%24r%20%3D%20%7Btype%20%3D%3E%20%27character%27%2C%20data%20%3D%3E%20qq%3C%5C%5Cx%7B%22%0A%20%20%20%20%20%20%20%20%2B%20this.codePoint%20%2B%20%22%7D%3E%7D%3B%20%23%20%22%20%2B%20this.entityName%20%2B%20%22%5Cn%22%3B%0A%20%20%20%20r%20%2B%3D%20indent%20%2B%20%22%20%20if%20%28%24next_input_character%20%3D%3D%200x003B%29%20%7B%20%23%20%3B%5Cn%22%3B%0A%20%20%20%20r%20%2B%3D%20indent%20%2B%20%22%20%20%20%20!!!next-input-character%3B%5Cn%22%3B%0A%20%20%20%20r%20%2B%3D%20indent%20%2B%20%22%20%20%7D%20else%20%7B%5Cn%22%3B%0A%20%20%20%20r%20%2B%3D%20indent%20%2B%20%22%20%20%20%20!!!parse-error%3B%5Cn%22%3B%0A%20%20%20%20r%20%2B%3D%20indent%20%2B%20%22%20%20%20%20%23%23%20reconsume%5Cn%22%3B%0A%20%20%20%20r%20%2B%3D%20indent%20%2B%20%22%20%20%7D%5Cn%22%3B%0A%20%20%7D%20else%20%7B%0A%20%20%20%20r%20%2B%3D%20indent%20%2B%20%22%20%20!!!parse-error%3B%5Cn%22%3B%0A%20%20%20%20if%20%28this.reparseNextChar%29%20%7B%0A%20%20%20%20%20%20r%20%2B%3D%20indent%20%2B%20%22%20%20!!!back-next-input-character%20%28%22%0A%20%20%20%20%20%20%20%20%20%20%2B%20this.reparseNextChars.map%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28function%20%28s%29%20%7Breturn%20s%20%2B%20%27%2C%20%27%7D%29.join%20%28%27%27%29%0A%20%20%20%20%20%20%20%20%20%20%2B%20%22%24next_input_character%29%3B%5Cn%22%3B%0A%20%20%20%20%20%20r%20%2B%3D%20indent%20%2B%20%22%20%20%24next_input_character%20%3D%20%22%0A%20%20%20%20%20%20%20%20%20%20%2B%20this.reparseNextChar%20%2B%20%22%3B%5Cn%22%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20indent%20%2B%20%22%20%20%23%23%20reconsume%22%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%20%20r%20%2B%3D%20indent%20%2B%20%27%7D%5Cn%27%3B%0A%20%20return%20r%3B%0A%7D%3B%20%2F%2F%20toString%0A%0Avar%20initialState%20%3D%20new%20State%20%28%29%3B%0A%0Afor%20%28var%20i%20%3D%201%20%2F*%20skip%20header%20*%2F%3B%20i%20%3C%20trs.length%3B%20i%2B%2B%29%20%7B%0A%20%20var%20tds%20%3D%20trs%5Bi%5D.getElementsByTagName%20%28%27td%27%29%3B%0A%20%20var%20entityName%20%3D%20tds%5B0%5D.textContent.replace%20%28%2F%5Cs%2Fg%2C%20%27%27%29%3B%0A%20%20var%20codePoint%20%3D%20tds%5B1%5D.textContent.replace%20%28%2F%5Cs%2Fg%2C%20%27%27%29.substring%20%282%29%3B%0A%0A%20%20var%20state%20%3D%20initialState%3B%0A%20%20for%20%28var%20j%20%3D%200%3B%20j%20%3C%20entityName.length%3B%20j%2B%2B%29%20%7B%0A%20%20%20%20var%20ch%20%3D%20entityName.charCodeAt%20%28j%29%3B%0A%20%20%20%20if%20%28!state%5Bch%5D%29%20%7B%0A%20%20%20%20%20%20state%5Bch%5D%20%3D%20new%20State%20%28%29%3B%0A%20%20%20%20%20%20state%5Bch%5D.prototype%20%3D%20initialState.prototype%3B%0A%20%20%20%20%20%20state%5Bch%5D.reparseNextChar%20%3D%20entityName.charCodeAt%20%280%29%3B%0A%20%20%20%20%20%20for%20%28var%20k%20%3D%201%3B%20k%20%3C%3D%20j%3B%20k%2B%2B%29%20%7B%0A%20%20%20%20%20%20%20%20state%5Bch%5D.reparseNextChars%5Bk%20-%201%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%3D%20entityName.charCodeAt%20%28k%29%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20state%20%3D%20state%5Bch%5D%3B%0A%20%20%7D%0A%20%20state.codePoint%20%3D%20codePoint%3B%0A%20%20state.entityName%20%3D%20entityName%3B%0A%7D%0A%0A%27%3Ca%20href%3D%22data%3Atext%2Fplain%3Bcharset%3Dutf-8%2C%27%20%2B%20encodeURIComponent%20%28%27%20%20%20%20%7D%20els%27%20%2B%20initialState.toString%20%28%27%20%20%20%20%27%29%29%20%2B%20%27%22%3Enamed%20entity%20code%3C%2Fa%3E%27%3B%0A>
