You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2020/02/16 00:00:08 UTC

[lucene-solr] 01/01: LUCENE-9220 regenerate all stemmers from snowball 2.0

This is an automated email from the ASF dual-hosted git repository.

rmuir pushed a commit to branch jira/LUCENE-9220
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git

commit fc229b170197e37ffcbdb330e7657939979a7def
Author: Robert Muir <rm...@apache.org>
AuthorDate: Sat Feb 15 18:58:45 2020 -0500

    LUCENE-9220 regenerate all stemmers from snowball 2.0
    
    Instead of patching them after-the-fact (both manually and
    automatically over the years) we patch the generator.
    
    This is easier to maintain than patches/changes against generated code.
    See LUCENE-9220 for more information.
    
    There is a remaining nocommit, test data. Also need to hook in and test
    the new languages that are added here.
---
 lucene/analysis/common/README.txt                  |   19 +-
 lucene/analysis/common/build.xml                   |   12 -
 .../lucene/analysis/snowball/SnowballFilter.java   |   10 +-
 .../snowball/SnowballPorterFilterFactory.java      |    8 +-
 .../src/java/org/tartarus/snowball/Among.java      |  104 +-
 .../org/tartarus/snowball/SnowballProgram.java     |  765 ++-
 .../org/tartarus/snowball/SnowballStemmer.java     |   42 +
 .../org/tartarus/snowball/ext/ArabicStemmer.java   | 3097 +++++------
 .../org/tartarus/snowball/ext/ArmenianStemmer.java |  861 ++--
 .../org/tartarus/snowball/ext/BasqueStemmer.java   | 1710 +++----
 .../org/tartarus/snowball/ext/CatalanStemmer.java  | 1914 ++++---
 .../org/tartarus/snowball/ext/DanishStemmer.java   |  691 +--
 .../org/tartarus/snowball/ext/DutchStemmer.java    | 1445 +++---
 .../org/tartarus/snowball/ext/EnglishStemmer.java  | 2237 ++++----
 .../org/tartarus/snowball/ext/EstonianStemmer.java | 2793 ++++------
 .../org/tartarus/snowball/ext/FinnishStemmer.java  | 1752 +++----
 .../org/tartarus/snowball/ext/FrenchStemmer.java   | 2603 ++++------
 .../org/tartarus/snowball/ext/German2Stemmer.java  | 1245 ++---
 .../org/tartarus/snowball/ext/GermanStemmer.java   | 1180 ++---
 .../org/tartarus/snowball/ext/GreekStemmer.java    | 2539 +++++++++
 .../org/tartarus/snowball/ext/HindiStemmer.java    |  210 +
 .../tartarus/snowball/ext/HungarianStemmer.java    | 1777 +++----
 .../tartarus/snowball/ext/IndonesianStemmer.java   |  392 ++
 .../org/tartarus/snowball/ext/IrishStemmer.java    |  933 ++--
 .../org/tartarus/snowball/ext/ItalianStemmer.java  | 2072 ++++----
 .../java/org/tartarus/snowball/ext/KpStemmer.java  | 3706 ++++++--------
 .../tartarus/snowball/ext/LithuanianStemmer.java   | 1222 ++---
 .../org/tartarus/snowball/ext/LovinsStemmer.java   | 3359 ++++++------
 .../org/tartarus/snowball/ext/NepaliStemmer.java   |  319 ++
 .../tartarus/snowball/ext/NorwegianStemmer.java    |  591 +--
 .../org/tartarus/snowball/ext/PorterStemmer.java   | 1571 +++---
 .../tartarus/snowball/ext/PortugueseStemmer.java   | 1947 +++----
 .../org/tartarus/snowball/ext/RomanianStemmer.java | 1813 +++----
 .../org/tartarus/snowball/ext/RussianStemmer.java  | 1310 +++--
 .../org/tartarus/snowball/ext/SerbianStemmer.java  | 3753 ++++++++++++++
 .../org/tartarus/snowball/ext/SpanishStemmer.java  | 2062 ++++----
 .../org/tartarus/snowball/ext/SwedishStemmer.java  |  583 +--
 .../org/tartarus/snowball/ext/TamilStemmer.java    | 1959 +++++++
 .../org/tartarus/snowball/ext/TurkishStemmer.java  | 5415 ++++++++------------
 .../lucene/analysis/core/TestRandomChains.java     |    6 +-
 .../analysis/snowball/TestSnowballVocab.java       |   11 +-
 lucene/common-build.xml                            |    2 +-
 .../carrot2/LuceneCarrot2StemmerFactory.java       |   12 +-
 43 files changed, 30521 insertions(+), 29531 deletions(-)

diff --git a/lucene/analysis/common/README.txt b/lucene/analysis/common/README.txt
index f3382f8..e98799d 100644
--- a/lucene/analysis/common/README.txt
+++ b/lucene/analysis/common/README.txt
@@ -1,22 +1,11 @@
 Lucene Analyzers README file
 
-This project provides pre-compiled version of the Snowball stemmers
-based on revision 502 of the Tartarus Snowball repository,
-now located at https://github.com/snowballstem/snowball/tree/e103b5c257383ee94a96e7fc58cab3c567bf079b (GitHub),
+This project provides pre-compiled version of the Snowball stemmers,
+now located at https://github.com/snowballstem/snowball/tree/53739a805cfa6c77ff8496dc711dc1c106d987c1 (GitHub),
 together with classes integrating them with the Lucene search engine.
 
-A few changes has been made to the static Snowball code and compiled stemmers:
-
- * Class SnowballProgram is made abstract and contains new abstract method stem() to avoid reflection in Lucene filter class SnowballFilter.
- * All use of StringBuffers has been refactored to StringBuilder for speed.
- * Snowball BSD license header has been added to the Java classes to avoid having RAT adding new ASL headers.
- * Uses Java 7 MethodHandles and fixes method visibility bug: http://article.gmane.org/gmane.comp.search.snowball/1139
-
-If you want to add new stemmers, use the exact revision / Git commit above to generate the Java class, place it
-in src/java/org/tartarus/snowball/ext, and finally execute "ant patch-snowball". The latter will change the APIs
-of the generated class to make it compatible. Already patched classes are not modified.
-The Arabic stemmer has been generated from https://github.com/snowballstem/snowball/blob/master/algorithms/arabic.sbl
-using the latest version of snowball and patched manually.
+The snowball tree needs patches applied to properly generate efficient code for lucene.
+You can find the most recent patch on https://issues.apache.org/jira/browse/LUCENE-9220
 
 IMPORTANT NOTICE ON BACKWARDS COMPATIBILITY!
 
diff --git a/lucene/analysis/common/build.xml b/lucene/analysis/common/build.xml
index ed9f029..c3d4fcc 100644
--- a/lucene/analysis/common/build.xml
+++ b/lucene/analysis/common/build.xml
@@ -29,8 +29,6 @@
 
   <import file="../analysis-module-build.xml"/>
 
-  <property name="snowball.programs.dir" location="src/java/org/tartarus/snowball/ext"/>
-
   <property name="unicode-props-file" location="src/java/org/apache/lucene/analysis/util/UnicodeProps.java"/>
 
   <!-- Because of a bug in JFlex's ant task, HTMLStripCharFilter has to be generated last.   -->
@@ -124,14 +122,4 @@
 
   <target name="regenerate" depends="jflex,unicode-data"/>
 
-  <target name="patch-snowball" description="Patches all snowball programs in '${snowball.programs.dir}' to make them work with MethodHandles">
-      <fileset id="snowball.programs" dir="${snowball.programs.dir}" includes="*Stemmer.java"/>
-      <replaceregexp match="^public class \w+Stemmer\b" replace="@SuppressWarnings(&quot;unused&quot;) \0" flags="m" encoding="UTF-8">
-        <fileset refid="snowball.programs"/>
-      </replaceregexp>
-      <replaceregexp match="private final static \w+Stemmer methodObject\b.*$" replace="/* patched */ private static final java.lang.invoke.MethodHandles.Lookup methodObject = java.lang.invoke.MethodHandles.lookup();" flags="m" encoding="UTF-8">
-        <fileset refid="snowball.programs"/>
-      </replaceregexp>
-      <fixcrlf srcdir="${snowball.programs.dir}" includes="*Stemmer.java" tab="remove" tablength="2" encoding="UTF-8" javafiles="yes" fixlast="yes"/>
-  </target>
 </project>
diff --git a/lucene/analysis/common/src/java/org/apache/lucene/analysis/snowball/SnowballFilter.java b/lucene/analysis/common/src/java/org/apache/lucene/analysis/snowball/SnowballFilter.java
index ceec615..2749879 100644
--- a/lucene/analysis/common/src/java/org/apache/lucene/analysis/snowball/SnowballFilter.java
+++ b/lucene/analysis/common/src/java/org/apache/lucene/analysis/snowball/SnowballFilter.java
@@ -25,7 +25,7 @@ import org.apache.lucene.analysis.TokenStream;
 import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
 import org.apache.lucene.analysis.tokenattributes.KeywordAttribute;
 import org.apache.lucene.analysis.tr.TurkishLowerCaseFilter; // javadoc @link
-import org.tartarus.snowball.SnowballProgram;
+import org.tartarus.snowball.SnowballStemmer;
 
 /**
  * A filter that stems words using a Snowball-generated stemmer.
@@ -51,12 +51,12 @@ import org.tartarus.snowball.SnowballProgram;
  */
 public final class SnowballFilter extends TokenFilter {
 
-  private final SnowballProgram stemmer;
+  private final SnowballStemmer stemmer;
 
   private final CharTermAttribute termAtt = addAttribute(CharTermAttribute.class);
   private final KeywordAttribute keywordAttr = addAttribute(KeywordAttribute.class);
 
-  public SnowballFilter(TokenStream input, SnowballProgram stemmer) {
+  public SnowballFilter(TokenStream input, SnowballStemmer stemmer) {
     super(input);
     this.stemmer = stemmer;
   }
@@ -76,8 +76,8 @@ public final class SnowballFilter extends TokenFilter {
     //Class.forName is frowned upon in place of the ResourceLoader but in this case,
     // the factory will use the other constructor so that the program is already loaded.
     try {
-      Class<? extends SnowballProgram> stemClass =
-        Class.forName("org.tartarus.snowball.ext." + name + "Stemmer").asSubclass(SnowballProgram.class);
+      Class<? extends SnowballStemmer> stemClass =
+        Class.forName("org.tartarus.snowball.ext." + name + "Stemmer").asSubclass(SnowballStemmer.class);
       stemmer = stemClass.getConstructor().newInstance();
     } catch (Exception e) {
       throw new IllegalArgumentException("Invalid stemmer class specified: " + name, e);
diff --git a/lucene/analysis/common/src/java/org/apache/lucene/analysis/snowball/SnowballPorterFilterFactory.java b/lucene/analysis/common/src/java/org/apache/lucene/analysis/snowball/SnowballPorterFilterFactory.java
index f61d732..633ebc5 100644
--- a/lucene/analysis/common/src/java/org/apache/lucene/analysis/snowball/SnowballPorterFilterFactory.java
+++ b/lucene/analysis/common/src/java/org/apache/lucene/analysis/snowball/SnowballPorterFilterFactory.java
@@ -27,7 +27,7 @@ import org.apache.lucene.analysis.miscellaneous.SetKeywordMarkerFilter;
 import org.apache.lucene.analysis.util.ResourceLoader;
 import org.apache.lucene.analysis.util.ResourceLoaderAware;
 import org.apache.lucene.analysis.util.TokenFilterFactory;
-import org.tartarus.snowball.SnowballProgram;
+import org.tartarus.snowball.SnowballStemmer;
 
 /**
  * Factory for {@link SnowballFilter}, with configurable language
@@ -54,7 +54,7 @@ public class SnowballPorterFilterFactory extends TokenFilterFactory implements R
 
   private final String language;
   private final String wordFiles;
-  private Class<? extends SnowballProgram> stemClass;
+  private Class<? extends SnowballStemmer> stemClass;
   private CharArraySet protectedWords = null;
   
   /** Creates a new SnowballPorterFilterFactory */
@@ -70,7 +70,7 @@ public class SnowballPorterFilterFactory extends TokenFilterFactory implements R
   @Override
   public void inform(ResourceLoader loader) throws IOException {
     String className = "org.tartarus.snowball.ext." + language + "Stemmer";
-    stemClass = loader.newInstance(className, SnowballProgram.class).getClass();
+    stemClass = loader.newInstance(className, SnowballStemmer.class).getClass();
 
     if (wordFiles != null) {
       protectedWords = getWordSet(loader, wordFiles, false);
@@ -79,7 +79,7 @@ public class SnowballPorterFilterFactory extends TokenFilterFactory implements R
 
   @Override
   public TokenFilter create(TokenStream input) {
-    SnowballProgram program;
+    SnowballStemmer program;
     try {
       program = stemClass.getConstructor().newInstance();
     } catch (Exception e) {
diff --git a/lucene/analysis/common/src/java/org/tartarus/snowball/Among.java b/lucene/analysis/common/src/java/org/tartarus/snowball/Among.java
index 964e0c8..0596d05 100644
--- a/lucene/analysis/common/src/java/org/tartarus/snowball/Among.java
+++ b/lucene/analysis/common/src/java/org/tartarus/snowball/Among.java
@@ -1,34 +1,34 @@
 /*
+   Copyright (c) 2001, Dr Martin Porter
+   Copyright (c) 2004,2005, Richard Boulton
+   Copyright (c) 2013, Yoshiki Shibukawa
+   Copyright (c) 2006,2007,2009,2010,2011,2014-2019, Olly Betts
+   All rights reserved.
 
-Copyright (c) 2001, Dr Martin Porter
-Copyright (c) 2002, Richard Boulton
-All rights reserved.
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
 
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice,
-    * this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-    * notice, this list of conditions and the following disclaimer in the
-    * documentation and/or other materials provided with the distribution.
-    * Neither the name of the copyright holders nor the names of its contributors
-    * may be used to endorse or promote products derived from this software
-    * without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- */
+   1. Redistributions of source code must retain the above copyright notice,
+   this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+   3. Neither the name of the Snowball project nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
 
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+   ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+   ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   */
 package org.tartarus.snowball;
 
 import java.lang.invoke.MethodHandle;
@@ -37,47 +37,41 @@ import java.lang.invoke.MethodType;
 import java.util.Locale;
 
 /**
- * This is the rev 502 of the Snowball SVN trunk,
- * now located at <a target="_blank" href="https://github.com/snowballstem/snowball/tree/e103b5c257383ee94a96e7fc58cab3c567bf079b">GitHub</a>,
- * but modified:
- * <ul>
- * <li>made abstract and introduced abstract method stem to avoid expensive reflection in filter class.
- * <li>refactored StringBuffers to StringBuilder
- * <li>uses char[] as buffer instead of StringBuffer/StringBuilder
- * <li>eq_s,eq_s_b,insert,replace_s take CharSequence like eq_v and eq_v_b
- * <li>use MethodHandles and fix <a target="_blank" href="http://article.gmane.org/gmane.comp.search.snowball/1139">method visibility bug</a>.
- * </ul>
+ * Internal class used by Snowball stemmers
  */
-public final class Among {
-  
-  public Among(String s, int substring_i, int result,
-               String methodname, MethodHandles.Lookup methodobject) {
-    this.s_size = s.length();
+public class Among {
+  public Among (String s, int substring_i, int result) {
     this.s = s.toCharArray();
     this.substring_i = substring_i;
     this.result = result;
-    if (methodname.isEmpty()) {
-      this.method = null;
-    } else {
-      final Class<? extends SnowballProgram> clazz = methodobject.lookupClass().asSubclass(SnowballProgram.class);
+    this.method = null;
+  }
+
+  public Among (String s, int substring_i, int result, String methodname,
+      MethodHandles.Lookup methodobject) {
+    this.s = s.toCharArray();
+    this.substring_i = substring_i;
+    this.result = result;
+    final Class<? extends SnowballProgram> clazz = methodobject.lookupClass().asSubclass(SnowballProgram.class);
+    if (methodname.length() > 0) {
       try {
         this.method = methodobject.findVirtual(clazz, methodname, MethodType.methodType(boolean.class))
-            .asType(MethodType.methodType(boolean.class, SnowballProgram.class));
+          .asType(MethodType.methodType(boolean.class, SnowballProgram.class));
       } catch (NoSuchMethodException | IllegalAccessException e) {
         throw new RuntimeException(String.format(Locale.ENGLISH,
-            "Snowball program '%s' is broken, cannot access method: boolean %s()",
-            clazz.getSimpleName(), methodname
-        ), e);
+              "Snowball program '%s' is broken, cannot access method: boolean %s()",
+              clazz.getSimpleName(), methodname
+              ), e);
       }
+    } else {
+      this.method = null;
     }
   }
 
-  final int s_size; /* search string */
   final char[] s; /* search string */
   final int substring_i; /* index to longest matching substring */
-  final int result;      /* result of the lookup */
-  
+  final int result; /* result of the lookup */
+
   // Make sure this is not accessible outside package for Java security reasons!
   final MethodHandle method; /* method to use if substring matches */
-  
-}
\ No newline at end of file
+};
diff --git a/lucene/analysis/common/src/java/org/tartarus/snowball/SnowballProgram.java b/lucene/analysis/common/src/java/org/tartarus/snowball/SnowballProgram.java
index c31065f..a532b4e 100644
--- a/lucene/analysis/common/src/java/org/tartarus/snowball/SnowballProgram.java
+++ b/lucene/analysis/common/src/java/org/tartarus/snowball/SnowballProgram.java
@@ -1,407 +1,370 @@
 /*
-
-Copyright (c) 2001, Dr Martin Porter
-Copyright (c) 2002, Richard Boulton
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice,
-    * this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-    * notice, this list of conditions and the following disclaimer in the
-    * documentation and/or other materials provided with the distribution.
-    * Neither the name of the copyright holders nor the names of its contributors
-    * may be used to endorse or promote products derived from this software
-    * without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- */
+   Copyright (c) 2001, Dr Martin Porter
+   Copyright (c) 2004,2005, Richard Boulton
+   Copyright (c) 2013, Yoshiki Shibukawa
+   Copyright (c) 2006,2007,2009,2010,2011,2014-2019, Olly Betts
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+
+   1. Redistributions of source code must retain the above copyright notice,
+   this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+   3. Neither the name of the Snowball project nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+   ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+   ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   */
 
 package org.tartarus.snowball;
-
 import java.lang.reflect.UndeclaredThrowableException;
-
-import org.apache.lucene.util.ArrayUtil;
+import java.io.Serializable;
 
 /**
- * This is the rev 502 of the Snowball SVN trunk,
- * now located at <a target="_blank" href="https://github.com/snowballstem/snowball/tree/e103b5c257383ee94a96e7fc58cab3c567bf079b">GitHub</a>,
- * but modified:
- * <ul>
- * <li>made abstract and introduced abstract method stem to avoid expensive reflection in filter class.
- * <li>refactored StringBuffers to StringBuilder
- * <li>uses char[] as buffer instead of StringBuffer/StringBuilder
- * <li>eq_s,eq_s_b,insert,replace_s take CharSequence like eq_v and eq_v_b
- * <li>use MethodHandles and fix <a target="_blank" href="http://article.gmane.org/gmane.comp.search.snowball/1139">method visibility bug</a>.
- * </ul>
+ * Base class for a snowball stemmer
  */
-public abstract class SnowballProgram {
-
-    protected SnowballProgram()
-    {
-      current = new char[8];
-      setCurrent("");
-    }
-
-    public abstract boolean stem();
-
-    /**
-     * Set the current string.
-     */
-    public void setCurrent(String value)
-    {
-      current = value.toCharArray();
-      cursor = 0;
-      limit = value.length();
-      limit_backward = 0;
-      bra = cursor;
-      ket = limit;
-    }
+public class SnowballProgram implements Serializable {
+  protected SnowballProgram()
+  {
+    current = new char[8];
+    setCurrent("");
+  }
 
-    /**
-     * Get the current string.
-     */
-    public String getCurrent()
-    {
-      return new String(current, 0, limit);
-    }
-    
-    /**
-     * Set the current string.
-     * @param text character array containing input
-     * @param length valid length of text.
-     */
-    public void setCurrent(char text[], int length) {
-      current = text;
-      cursor = 0;
-      limit = length;
-      limit_backward = 0;
-      bra = cursor;
-      ket = limit;
-    }
+  static final long serialVersionUID = 2016072500L;
+
+  /**
+   * Set the current string.
+   */
+  public void setCurrent(String value)
+  {
+    current = value.toCharArray();
+    cursor = 0;
+    limit = value.length();
+    limit_backward = 0;
+    bra = cursor;
+    ket = limit;
+  }
 
-    /**
-     * Get the current buffer containing the stem.
-     * <p>
-     * NOTE: this may be a reference to a different character array than the
-     * one originally provided with setCurrent, in the exceptional case that 
-     * stemming produced a longer intermediate or result string. 
-     * </p>
-     * <p>
-     * It is necessary to use {@link #getCurrentBufferLength()} to determine
-     * the valid length of the returned buffer. For example, many words are
-     * stemmed simply by subtracting from the length to remove suffixes.
-     * </p>
-     * @see #getCurrentBufferLength()
-     */
-    public char[] getCurrentBuffer() {
-      return current;
-    }
-    
-    /**
-     * Get the valid length of the character array in 
-     * {@link #getCurrentBuffer()}. 
-     * @return valid length of the array.
-     */
-    public int getCurrentBufferLength() {
-      return limit;
-    }
+  /**
+   * Get the current string.
+   */
+  public String getCurrent()
+  {
+    return new String(current, 0, limit);
+  }
 
-    // current string
-    private char current[];
+  /**
+   * Set the current string.
+   * @param text character array containing input
+   * @param length valid length of text.
+   */
+  public void setCurrent(char text[], int length) {
+    current = text;
+    cursor = 0;
+    limit = length;
+    limit_backward = 0;
+    bra = cursor;
+    ket = limit;
+  }
 
-    protected int cursor;
-    protected int limit;
-    protected int limit_backward;
-    protected int bra;
-    protected int ket;
+  /**
+   * Get the current buffer containing the stem.
+   * <p>
+   * NOTE: this may be a reference to a different character array than the
+   * one originally provided with setCurrent, in the exceptional case that
+   * stemming produced a longer intermediate or result string.
+   * </p>
+   * <p>
+   * It is necessary to use {@link #getCurrentBufferLength()} to determine
+   * the valid length of the returned buffer. For example, many words are
+   * stemmed simply by subtracting from the length to remove suffixes.
+   * </p>
+   * @see #getCurrentBufferLength()
+   */
+  public char[] getCurrentBuffer() {
+    return current;
+  }
 
-    protected void copy_from(SnowballProgram other)
-    {
-      current          = other.current;
-      cursor           = other.cursor;
-      limit            = other.limit;
-      limit_backward   = other.limit_backward;
-      bra              = other.bra;
-      ket              = other.ket;
-    }
+  /**
+   * Get the valid length of the character array in
+   * {@link #getCurrentBuffer()}.
+   * @return valid length of the array.
+   */
+  public int getCurrentBufferLength() {
+    return limit;
+  }
 
-    protected boolean in_grouping(char [] s, int min, int max)
-    {
-      if (cursor >= limit) return false;
-      char ch = current[cursor];
-      if (ch > max || ch < min) return false;
-      ch -= min;
-      if ((s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return false;
-      cursor++;
-      return true;
-    }
+  // current string
+  private char current[];
+
+  protected int cursor;
+  protected int limit;
+  protected int limit_backward;
+  protected int bra;
+  protected int ket;
+
+  public SnowballProgram(SnowballProgram other) {
+    current          = other.current;
+    cursor           = other.cursor;
+    limit            = other.limit;
+    limit_backward   = other.limit_backward;
+    bra              = other.bra;
+    ket              = other.ket;
+  }
 
-    protected boolean in_grouping_b(char [] s, int min, int max)
-    {
-      if (cursor <= limit_backward) return false;
-      char ch = current[cursor - 1];
-      if (ch > max || ch < min) return false;
-      ch -= min;
-      if ((s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return false;
-      cursor--;
-      return true;
-    }
+  protected void copy_from(SnowballProgram other)
+  {
+    current          = other.current;
+    cursor           = other.cursor;
+    limit            = other.limit;
+    limit_backward   = other.limit_backward;
+    bra              = other.bra;
+    ket              = other.ket;
+  }
 
-    protected boolean out_grouping(char [] s, int min, int max)
-    {
-      if (cursor >= limit) return false;
-      char ch = current[cursor];
-      if (ch > max || ch < min) {
-          cursor++;
-          return true;
-      }
-      ch -= min;
-      if ((s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) {
-          cursor ++;
-          return true;
-      }
-      return false;
-    }
+  protected boolean in_grouping(char [] s, int min, int max)
+  {
+    if (cursor >= limit) return false;
+    char ch = current[cursor];
+    if (ch > max || ch < min) return false;
+    ch -= min;
+    if ((s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return false;
+    cursor++;
+    return true;
+  }
 
-    protected boolean out_grouping_b(char [] s, int min, int max)
-    {
-      if (cursor <= limit_backward) return false;
-      char ch = current[cursor - 1];
-      if (ch > max || ch < min) {
-          cursor--;
-          return true;
-      }
-      ch -= min;
-      if ((s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) {
-          cursor--;
-          return true;
-      }
-      return false;
-    }
+  protected boolean in_grouping_b(char [] s, int min, int max)
+  {
+    if (cursor <= limit_backward) return false;
+    char ch = current[cursor - 1];
+    if (ch > max || ch < min) return false;
+    ch -= min;
+    if ((s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return false;
+    cursor--;
+    return true;
+  }
 
-    protected boolean in_range(int min, int max)
-    {
-      if (cursor >= limit) return false;
-      char ch = current[cursor];
-      if (ch > max || ch < min) return false;
+  protected boolean out_grouping(char [] s, int min, int max)
+  {
+    if (cursor >= limit) return false;
+    char ch = current[cursor];
+    if (ch > max || ch < min) {
       cursor++;
       return true;
     }
-
-    protected boolean in_range_b(int min, int max)
-    {
-      if (cursor <= limit_backward) return false;
-      char ch = current[cursor - 1];
-      if (ch > max || ch < min) return false;
-      cursor--;
-      return true;
-    }
-
-    protected boolean out_range(int min, int max)
-    {
-      if (cursor >= limit) return false;
-      char ch = current[cursor];
-      if (!(ch > max || ch < min)) return false;
+    ch -= min;
+    if ((s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) {
       cursor++;
       return true;
     }
+    return false;
+  }
 
-    protected boolean out_range_b(int min, int max)
-    {
-      if (cursor <= limit_backward) return false;
-      char ch = current[cursor - 1];
-      if(!(ch > max || ch < min)) return false;
+  protected boolean out_grouping_b(char [] s, int min, int max)
+  {
+    if (cursor <= limit_backward) return false;
+    char ch = current[cursor - 1];
+    if (ch > max || ch < min) {
       cursor--;
       return true;
     }
-
-    protected boolean eq_s(int s_size, CharSequence s)
-    {
-      if (limit - cursor < s_size) return false;
-      int i;
-      for (i = 0; i != s_size; i++) {
-          if (current[cursor + i] != s.charAt(i)) return false;
-      }
-      cursor += s_size;
-      return true;
-    }
-
-    protected boolean eq_s_b(int s_size, CharSequence s)
-    {
-      if (cursor - limit_backward < s_size) return false;
-      int i;
-      for (i = 0; i != s_size; i++) {
-          if (current[cursor - s_size + i] != s.charAt(i)) return false;
-      }
-      cursor -= s_size;
+    ch -= min;
+    if ((s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) {
+      cursor--;
       return true;
     }
+    return false;
+  }
 
-    protected boolean eq_v(CharSequence s)
-    {
-      return eq_s(s.length(), s);
+  protected boolean eq_s(CharSequence s)
+  {
+    if (limit - cursor < s.length()) return false;
+    int i;
+    for (i = 0; i != s.length(); i++) {
+      if (current[cursor + i] != s.charAt(i)) return false;
     }
+    cursor += s.length();
+    return true;
+  }
 
-    protected boolean eq_v_b(CharSequence s)
-    {
-      return eq_s_b(s.length(), s);
+  protected boolean eq_s_b(CharSequence s)
+  {
+    if (cursor - limit_backward < s.length()) return false;
+    int i;
+    for (i = 0; i != s.length(); i++) {
+      if (current[cursor - s.length() + i] != s.charAt(i)) return false;
     }
+    cursor -= s.length();
+    return true;
+  }
 
-    protected int find_among(Among v[], int v_size)
-    {
-      int i = 0;
-      int j = v_size;
-
-      int c = cursor;
-      int l = limit;
-
-      int common_i = 0;
-      int common_j = 0;
-
-      boolean first_key_inspected = false;
-
-      while (true) {
-        int k = i + ((j - i) >> 1);
-        int diff = 0;
-        int common = common_i < common_j ? common_i : common_j; // smaller
-        Among w = v[k];
-        int i2;
-        for (i2 = common; i2 < w.s_size; i2++) {
-          if (c + common == l) {
-            diff = -1;
-            break;
-          }
-          diff = current[c + common] - w.s[i2];
-          if (diff != 0) break;
-          common++;
-        }
-        if (diff < 0) {
-          j = k;
-          common_j = common;
-        } else {
-          i = k;
-          common_i = common;
+  protected int find_among(Among v[])
+  {
+    int i = 0;
+    int j = v.length;
+
+    int c = cursor;
+    int l = limit;
+
+    int common_i = 0;
+    int common_j = 0;
+
+    boolean first_key_inspected = false;
+
+    while (true) {
+      int k = i + ((j - i) >> 1);
+      int diff = 0;
+      int common = common_i < common_j ? common_i : common_j; // smaller
+      Among w = v[k];
+      int i2;
+      for (i2 = common; i2 < w.s.length; i2++) {
+        if (c + common == l) {
+          diff = -1;
+          break;
         }
-        if (j - i <= 1) {
-          if (i > 0) break; // v->s has been inspected
-          if (j == i) break; // only one item in v
+        diff = current[c + common] - w.s[i2];
+        if (diff != 0) break;
+        common++;
+      }
+      if (diff < 0) {
+        j = k;
+        common_j = common;
+      } else {
+        i = k;
+        common_i = common;
+      }
+      if (j - i <= 1) {
+        if (i > 0) break; // v->s has been inspected
+        if (j == i) break; // only one item in v
 
-          // - but now we need to go round once more to get
-          // v->s inspected. This looks messy, but is actually
-          // the optimal approach.
+        // - but now we need to go round once more to get
+        // v->s inspected. This looks messy, but is actually
+        // the optimal approach.
 
-          if (first_key_inspected) break;
-          first_key_inspected = true;
-        }
+        if (first_key_inspected) break;
+        first_key_inspected = true;
       }
-      while (true) {
-        Among w = v[i];
-        if (common_i >= w.s_size) {
-          cursor = c + w.s_size;
-          if (w.method == null) return w.result;
-          boolean res = false;
-          try {
-            res = (boolean) w.method.invokeExact(this);
-          } catch (Error | RuntimeException e) {
-            throw e;
-          } catch (Throwable e) {
-            throw new UndeclaredThrowableException(e);
-          }
-          cursor = c + w.s_size;
-          if (res) return w.result;
+    }
+    while (true) {
+      Among w = v[i];
+      if (common_i >= w.s.length) {
+        cursor = c + w.s.length;
+        if (w.method == null) return w.result;
+        boolean res = false;
+        try {
+          res = (boolean) w.method.invokeExact(this);
+        } catch (Error | RuntimeException e) {
+          throw e;
+        } catch (Throwable e) {
+          throw new UndeclaredThrowableException(e);
         }
-        i = w.substring_i;
-        if (i < 0) return 0;
+        cursor = c + w.s.length;
+        if (res) return w.result;
       }
+      i = w.substring_i;
+      if (i < 0) return 0;
     }
+  }
 
   // find_among_b is for backwards processing. Same comments apply
-    protected int find_among_b(Among v[], int v_size)
-    {
-  int i = 0;
-  int j = v_size;
-
-  int c = cursor;
-  int lb = limit_backward;
-
-  int common_i = 0;
-  int common_j = 0;
-
-  boolean first_key_inspected = false;
-
-      while (true) {
-        int k = i + ((j - i) >> 1);
-        int diff = 0;
-        int common = common_i < common_j ? common_i : common_j;
-        Among w = v[k];
-        int i2;
-        for (i2 = w.s_size - 1 - common; i2 >= 0; i2--) {
-          if (c - common == lb) {
-            diff = -1;
-            break;
-          }
-          diff = current[c - 1 - common] - w.s[i2];
-          if (diff != 0) break;
-          common++;
-        }
-        if (diff < 0) {
-          j = k;
-          common_j = common;
-        } else {
-          i = k;
-          common_i = common;
-        }
-        if (j - i <= 1) {
-          if (i > 0) break;
-          if (j == i) break;
-          if (first_key_inspected) break;
-          first_key_inspected = true;
+  protected int find_among_b(Among v[])
+  {
+    int i = 0;
+    int j = v.length;
+
+    int c = cursor;
+    int lb = limit_backward;
+
+    int common_i = 0;
+    int common_j = 0;
+
+    boolean first_key_inspected = false;
+
+    while (true) {
+      int k = i + ((j - i) >> 1);
+      int diff = 0;
+      int common = common_i < common_j ? common_i : common_j;
+      Among w = v[k];
+      int i2;
+      for (i2 = w.s.length - 1 - common; i2 >= 0; i2--) {
+        if (c - common == lb) {
+          diff = -1;
+          break;
         }
+        diff = current[c - 1 - common] - w.s[i2];
+        if (diff != 0) break;
+        common++;
       }
-      while (true) {
-        Among w = v[i];
-        if (common_i >= w.s_size) {
-          cursor = c - w.s_size;
-          if (w.method == null) return w.result;
-
-          boolean res = false;
-          try {
-            res = (boolean) w.method.invokeExact(this);
-          } catch (Error | RuntimeException e) {
-            throw e;
-          } catch (Throwable e) {
-            throw new UndeclaredThrowableException(e);
-          }
-          cursor = c - w.s_size;
-          if (res) return w.result;
+      if (diff < 0) {
+        j = k;
+        common_j = common;
+      } else {
+        i = k;
+        common_i = common;
+      }
+      if (j - i <= 1) {
+        if (i > 0) break;
+        if (j == i) break;
+        if (first_key_inspected) break;
+        first_key_inspected = true;
+      }
+    }
+    while (true) {
+      Among w = v[i];
+      if (common_i >= w.s.length) {
+        cursor = c - w.s.length;
+        if (w.method == null) return w.result;
+
+        boolean res = false;
+        try {
+          res = (boolean) w.method.invokeExact(this);
+        } catch (Error | RuntimeException e) {
+          throw e;
+        } catch (Throwable e) {
+          throw new UndeclaredThrowableException(e);
         }
-        i = w.substring_i;
-        if (i < 0) return 0;
+        cursor = c - w.s.length;
+        if (res) return w.result;
       }
+      i = w.substring_i;
+      if (i < 0) return 0;
     }
+  }
+
+  // mini version of ArrayUtil.oversize from lucene, specialized to chars
+  static int oversize(int minTargetSize) {
+    int extra = minTargetSize >> 3;
+    if (extra < 3) {
+      extra = 3;
+    }
+    int newSize = minTargetSize + extra;
+    return (newSize + 3) & 0x7ffffffc;
+  }
 
   /* to replace chars between c_bra and c_ket in current by the
-     * chars in s.
-     */
-  protected int replace_s(int c_bra, int c_ket, CharSequence s) {
+   * chars in s.
+   */
+  protected int replace_s(int c_bra, int c_ket, CharSequence s)
+  {
     final int adjustment = s.length() - (c_ket - c_bra);
     final int newLength = limit + adjustment;
     //resize if necessary
     if (newLength > current.length) {
-      char newBuffer[] = new char[ArrayUtil.oversize(newLength, Character.BYTES)];
+      char newBuffer[] = new char[oversize(newLength)];
       System.arraycopy(current, 0, newBuffer, 0, limit);
       current = newBuffer;
     }
@@ -423,73 +386,69 @@ public abstract class SnowballProgram {
     return adjustment;
   }
 
-  protected void slice_check() {
+  protected void slice_check()
+  {
     if (bra < 0 ||
         bra > ket ||
-        ket > limit) {
+        ket > limit)
+    {
       throw new IllegalArgumentException("faulty slice operation: bra=" + bra + ",ket=" + ket + ",limit=" + limit);
-      // FIXME: report error somehow.
-      /*
-      fprintf(stderr, "faulty slice operation:\n");
-      debug(z, -1, 0);
-      exit(1);
-      */
     }
   }
 
-  protected void slice_from(CharSequence s) {
+  protected void slice_from(CharSequence s)
+  {
     slice_check();
     replace_s(bra, ket, s);
   }
 
-  protected void slice_del() {
-    slice_from((CharSequence) "");
+  protected void slice_del()
+  {
+    slice_from("");
   }
 
   protected void insert(int c_bra, int c_ket, CharSequence s)
-    {
-      int adjustment = replace_s(c_bra, c_ket, s);
-      if (c_bra <= bra) bra += adjustment;
-      if (c_bra <= ket) ket += adjustment;
-    }
+  {
+    int adjustment = replace_s(c_bra, c_ket, s);
+    if (c_bra <= bra) bra += adjustment;
+    if (c_bra <= ket) ket += adjustment;
+  }
 
-    /* Copy the slice into the supplied StringBuffer */
-    protected StringBuilder slice_to(StringBuilder s)
-    {
-      slice_check();
-      int len = ket - bra;
-      s.setLength(0);
-      s.append(current, bra, len);
-      return s;
-    }
+  /* Copy the slice into the supplied StringBuilder */
+  protected void slice_to(StringBuilder s)
+  {
+    slice_check();
+    int len = ket - bra;
+    s.setLength(0);
+    s.append(current, bra, len);
+  }
 
-    protected StringBuilder assign_to(StringBuilder s)
-    {
-      s.setLength(0);
-      s.append(current, 0, limit);
-      return s;
-    }
+  protected void assign_to(StringBuilder s)
+  {
+    s.setLength(0);
+    s.append(current, 0, limit);
+  }
 
-/*
-extern void debug(struct SN_env * z, int number, int line_count)
-{   int i;
-    int limit = SIZE(z->p);
-    //if (number >= 0) printf("%3d (line %4d): '", number, line_count);
-    if (number >= 0) printf("%3d (line %4d): [%d]'", number, line_count,limit);
-    for (i = 0; i <= limit; i++)
-    {   if (z->lb == i) printf("{");
-        if (z->bra == i) printf("[");
-        if (z->c == i) printf("|");
-        if (z->ket == i) printf("]");
-        if (z->l == i) printf("}");
-        if (i < limit)
-        {   int ch = z->p[i];
-            if (ch == 0) ch = '#';
-            printf("%c", ch);
-        }
-    }
-    printf("'\n");
-}
-*/
-};
+  /*
+     extern void debug(struct SN_env * z, int number, int line_count)
+     {   int i;
+     int limit = SIZE(z->p);
+  //if (number >= 0) printf("%3d (line %4d): '", number, line_count);
+  if (number >= 0) printf("%3d (line %4d): [%d]'", number, line_count,limit);
+  for (i = 0; i <= limit; i++)
+  {   if (z->lb == i) printf("{");
+  if (z->bra == i) printf("[");
+  if (z->c == i) printf("|");
+  if (z->ket == i) printf("]");
+  if (z->l == i) printf("}");
+  if (i < limit)
+  {   int ch = z->p[i];
+  if (ch == 0) ch = '#';
+  printf("%c", ch);
+  }
+  }
+  printf("'\n");
+     }
+     */
 
+};
diff --git a/lucene/analysis/common/src/java/org/tartarus/snowball/SnowballStemmer.java b/lucene/analysis/common/src/java/org/tartarus/snowball/SnowballStemmer.java
new file mode 100644
index 0000000..9c91b1d
--- /dev/null
+++ b/lucene/analysis/common/src/java/org/tartarus/snowball/SnowballStemmer.java
@@ -0,0 +1,42 @@
+/*
+   Copyright (c) 2001, Dr Martin Porter
+   Copyright (c) 2004,2005, Richard Boulton
+   Copyright (c) 2013, Yoshiki Shibukawa
+   Copyright (c) 2006,2007,2009,2010,2011,2014-2019, Olly Betts
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+
+   1. Redistributions of source code must retain the above copyright notice,
+   this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+   3. Neither the name of the Snowball project nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+   ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+   ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   */
+
+package org.tartarus.snowball;
+
+/**
+ * Parent class of all snowball stemmers, which must implement <code>stem</code>
+ */
+public abstract class SnowballStemmer extends SnowballProgram {
+  public abstract boolean stem();
+
+  static final long serialVersionUID = 2016072500L;
+};
diff --git a/lucene/analysis/common/src/java/org/tartarus/snowball/ext/ArabicStemmer.java b/lucene/analysis/common/src/java/org/tartarus/snowball/ext/ArabicStemmer.java
index 2b907b2..03be077 100644
--- a/lucene/analysis/common/src/java/org/tartarus/snowball/ext/ArabicStemmer.java
+++ b/lucene/analysis/common/src/java/org/tartarus/snowball/ext/ArabicStemmer.java
@@ -1,1912 +1,1363 @@
-// This file was generated automatically by the Snowball to Java compiler
-// http://snowballstem.org/
+// Generated by Snowball 2.0.0 - https://snowballstem.org/
 
 package org.tartarus.snowball.ext;
 
 import org.tartarus.snowball.Among;
 
 /**
- * This class was automatically generated by a Snowball to Java compiler
- * It implements the stemming algorithm defined by a snowball script.
+ * This class implements the stemming algorithm defined by a snowball script.
+ * <p>
+ * Generated by Snowball 2.0.0 - https://snowballstem.org/
+ * </p>
  */
+@SuppressWarnings("unused")
+public class ArabicStemmer extends org.tartarus.snowball.SnowballStemmer {
 
-@SuppressWarnings("unused") public class ArabicStemmer extends org.tartarus.snowball.SnowballProgram {
+  private static final long serialVersionUID = 1L;
+  private static final java.lang.invoke.MethodHandles.Lookup methodObject = java.lang.invoke.MethodHandles.lookup();
 
-    private static final long serialVersionUID = 1L; 
+  private final static Among a_0[] = {
+    new Among("\u0640", -1, 1),
+    new Among("\u064B", -1, 1),
+    new Among("\u064C", -1, 1),
+    new Among("\u064D", -1, 1),
+    new Among("\u064E", -1, 1),
+    new Among("\u064F", -1, 1),
+    new Among("\u0650", -1, 1),
+    new Among("\u0651", -1, 1),
+    new Among("\u0652", -1, 1),
+    new Among("\u0660", -1, 2),
+    new Among("\u0661", -1, 3),
+    new Among("\u0662", -1, 4),
+    new Among("\u0663", -1, 5),
+    new Among("\u0664", -1, 6),
+    new Among("\u0665", -1, 7),
+    new Among("\u0666", -1, 8),
+    new Among("\u0667", -1, 9),
+    new Among("\u0668", -1, 10),
+    new Among("\u0669", -1, 11),
+    new Among("\uFE80", -1, 12),
+    new Among("\uFE81", -1, 16),
+    new Among("\uFE82", -1, 16),
+    new Among("\uFE83", -1, 13),
+    new Among("\uFE84", -1, 13),
+    new Among("\uFE85", -1, 17),
+    new Among("\uFE86", -1, 17),
+    new Among("\uFE87", -1, 14),
+    new Among("\uFE88", -1, 14),
+    new Among("\uFE89", -1, 15),
+    new Among("\uFE8A", -1, 15),
+    new Among("\uFE8B", -1, 15),
+    new Among("\uFE8C", -1, 15),
+    new Among("\uFE8D", -1, 18),
+    new Among("\uFE8E", -1, 18),
+    new Among("\uFE8F", -1, 19),
+    new Among("\uFE90", -1, 19),
+    new Among("\uFE91", -1, 19),
+    new Among("\uFE92", -1, 19),
+    new Among("\uFE93", -1, 20),
+    new Among("\uFE94", -1, 20),
+    new Among("\uFE95", -1, 21),
+    new Among("\uFE96", -1, 21),
+    new Among("\uFE97", -1, 21),
+    new Among("\uFE98", -1, 21),
+    new Among("\uFE99", -1, 22),
+    new Among("\uFE9A", -1, 22),
+    new Among("\uFE9B", -1, 22),
+    new Among("\uFE9C", -1, 22),
+    new Among("\uFE9D", -1, 23),
+    new Among("\uFE9E", -1, 23),
+    new Among("\uFE9F", -1, 23),
+    new Among("\uFEA0", -1, 23),
+    new Among("\uFEA1", -1, 24),
+    new Among("\uFEA2", -1, 24),
+    new Among("\uFEA3", -1, 24),
+    new Among("\uFEA4", -1, 24),
+    new Among("\uFEA5", -1, 25),
+    new Among("\uFEA6", -1, 25),
+    new Among("\uFEA7", -1, 25),
+    new Among("\uFEA8", -1, 25),
+    new Among("\uFEA9", -1, 26),
+    new Among("\uFEAA", -1, 26),
+    new Among("\uFEAB", -1, 27),
+    new Among("\uFEAC", -1, 27),
+    new Among("\uFEAD", -1, 28),
+    new Among("\uFEAE", -1, 28),
+    new Among("\uFEAF", -1, 29),
+    new Among("\uFEB0", -1, 29),
+    new Among("\uFEB1", -1, 30),
+    new Among("\uFEB2", -1, 30),
+    new Among("\uFEB3", -1, 30),
+    new Among("\uFEB4", -1, 30),
+    new Among("\uFEB5", -1, 31),
+    new Among("\uFEB6", -1, 31),
+    new Among("\uFEB7", -1, 31),
+    new Among("\uFEB8", -1, 31),
+    new Among("\uFEB9", -1, 32),
+    new Among("\uFEBA", -1, 32),
+    new Among("\uFEBB", -1, 32),
+    new Among("\uFEBC", -1, 32),
+    new Among("\uFEBD", -1, 33),
+    new Among("\uFEBE", -1, 33),
+    new Among("\uFEBF", -1, 33),
+    new Among("\uFEC0", -1, 33),
+    new Among("\uFEC1", -1, 34),
+    new Among("\uFEC2", -1, 34),
+    new Among("\uFEC3", -1, 34),
+    new Among("\uFEC4", -1, 34),
+    new Among("\uFEC5", -1, 35),
+    new Among("\uFEC6", -1, 35),
+    new Among("\uFEC7", -1, 35),
+    new Among("\uFEC8", -1, 35),
+    new Among("\uFEC9", -1, 36),
+    new Among("\uFECA", -1, 36),
+    new Among("\uFECB", -1, 36),
+    new Among("\uFECC", -1, 36),
+    new Among("\uFECD", -1, 37),
+    new Among("\uFECE", -1, 37),
+    new Among("\uFECF", -1, 37),
+    new Among("\uFED0", -1, 37),
+    new Among("\uFED1", -1, 38),
+    new Among("\uFED2", -1, 38),
+    new Among("\uFED3", -1, 38),
+    new Among("\uFED4", -1, 38),
+    new Among("\uFED5", -1, 39),
+    new Among("\uFED6", -1, 39),
+    new Among("\uFED7", -1, 39),
+    new Among("\uFED8", -1, 39),
+    new Among("\uFED9", -1, 40),
+    new Among("\uFEDA", -1, 40),
+    new Among("\uFEDB", -1, 40),
+    new Among("\uFEDC", -1, 40),
+    new Among("\uFEDD", -1, 41),
+    new Among("\uFEDE", -1, 41),
+    new Among("\uFEDF", -1, 41),
+    new Among("\uFEE0", -1, 41),
+    new Among("\uFEE1", -1, 42),
+    new Among("\uFEE2", -1, 42),
+    new Among("\uFEE3", -1, 42),
+    new Among("\uFEE4", -1, 42),
+    new Among("\uFEE5", -1, 43),
+    new Among("\uFEE6", -1, 43),
+    new Among("\uFEE7", -1, 43),
+    new Among("\uFEE8", -1, 43),
+    new Among("\uFEE9", -1, 44),
+    new Among("\uFEEA", -1, 44),
+    new Among("\uFEEB", -1, 44),
+    new Among("\uFEEC", -1, 44),
+    new Among("\uFEED", -1, 45),
+    new Among("\uFEEE", -1, 45),
+    new Among("\uFEEF", -1, 46),
+    new Among("\uFEF0", -1, 46),
+    new Among("\uFEF1", -1, 47),
+    new Among("\uFEF2", -1, 47),
+    new Among("\uFEF3", -1, 47),
+    new Among("\uFEF4", -1, 47),
+    new Among("\uFEF5", -1, 51),
+    new Among("\uFEF6", -1, 51),
+    new Among("\uFEF7", -1, 49),
+    new Among("\uFEF8", -1, 49),
+    new Among("\uFEF9", -1, 50),
+    new Among("\uFEFA", -1, 50),
+    new Among("\uFEFB", -1, 48),
+    new Among("\uFEFC", -1, 48)
+  };
 
- /* patched */ private static final java.lang.invoke.MethodHandles.Lookup methodObject = java.lang.invoke.MethodHandles.lookup();
+  private final static Among a_1[] = {
+    new Among("\u0622", -1, 1),
+    new Among("\u0623", -1, 1),
+    new Among("\u0624", -1, 1),
+    new Among("\u0625", -1, 1),
+    new Among("\u0626", -1, 1)
+  };
 
-    private final static Among a_0[] = {
-        new Among("\u0640", -1, 2, "", methodObject),
-        new Among("\u064B", -1, 1, "", methodObject),
-        new Among("\u064C", -1, 1, "", methodObject),
-        new Among("\u064D", -1, 1, "", methodObject),
-        new Among("\u064E", -1, 1, "", methodObject),
-        new Among("\u064F", -1, 1, "", methodObject),
-        new Among("\u0650", -1, 1, "", methodObject),
-        new Among("\u0651", -1, 1, "", methodObject),
-        new Among("\u0652", -1, 1, "", methodObject),
-        new Among("\u0660", -1, 3, "", methodObject),
-        new Among("\u0661", -1, 4, "", methodObject),
-        new Among("\u0662", -1, 5, "", methodObject),
-        new Among("\u0663", -1, 6, "", methodObject),
-        new Among("\u0664", -1, 7, "", methodObject),
-        new Among("\u0665", -1, 8, "", methodObject),
-        new Among("\u0666", -1, 9, "", methodObject),
-        new Among("\u0667", -1, 10, "", methodObject),
-        new Among("\u0668", -1, 11, "", methodObject),
-        new Among("\u0669", -1, 12, "", methodObject),
-        new Among("\uFE80", -1, 13, "", methodObject),
-        new Among("\uFE81", -1, 17, "", methodObject),
-        new Among("\uFE82", -1, 17, "", methodObject),
-        new Among("\uFE83", -1, 14, "", methodObject),
-        new Among("\uFE84", -1, 14, "", methodObject),
-        new Among("\uFE85", -1, 18, "", methodObject),
-        new Among("\uFE86", -1, 18, "", methodObject),
-        new Among("\uFE87", -1, 15, "", methodObject),
-        new Among("\uFE88", -1, 15, "", methodObject),
-        new Among("\uFE89", -1, 16, "", methodObject),
-        new Among("\uFE8A", -1, 16, "", methodObject),
-        new Among("\uFE8B", -1, 16, "", methodObject),
-        new Among("\uFE8C", -1, 16, "", methodObject),
-        new Among("\uFE8D", -1, 19, "", methodObject),
-        new Among("\uFE8E", -1, 19, "", methodObject),
-        new Among("\uFE8F", -1, 20, "", methodObject),
-        new Among("\uFE90", -1, 20, "", methodObject),
-        new Among("\uFE91", -1, 20, "", methodObject),
-        new Among("\uFE92", -1, 20, "", methodObject),
-        new Among("\uFE93", -1, 21, "", methodObject),
-        new Among("\uFE94", -1, 21, "", methodObject),
-        new Among("\uFE95", -1, 22, "", methodObject),
-        new Among("\uFE96", -1, 22, "", methodObject),
-        new Among("\uFE97", -1, 22, "", methodObject),
-        new Among("\uFE98", -1, 22, "", methodObject),
-        new Among("\uFE99", -1, 23, "", methodObject),
-        new Among("\uFE9A", -1, 23, "", methodObject),
-        new Among("\uFE9B", -1, 23, "", methodObject),
-        new Among("\uFE9C", -1, 23, "", methodObject),
-        new Among("\uFE9D", -1, 24, "", methodObject),
-        new Among("\uFE9E", -1, 24, "", methodObject),
-        new Among("\uFE9F", -1, 24, "", methodObject),
-        new Among("\uFEA0", -1, 24, "", methodObject),
-        new Among("\uFEA1", -1, 25, "", methodObject),
-        new Among("\uFEA2", -1, 25, "", methodObject),
-        new Among("\uFEA3", -1, 25, "", methodObject),
-        new Among("\uFEA4", -1, 25, "", methodObject),
-        new Among("\uFEA5", -1, 26, "", methodObject),
-        new Among("\uFEA6", -1, 26, "", methodObject),
-        new Among("\uFEA7", -1, 26, "", methodObject),
-        new Among("\uFEA8", -1, 26, "", methodObject),
-        new Among("\uFEA9", -1, 27, "", methodObject),
-        new Among("\uFEAA", -1, 27, "", methodObject),
-        new Among("\uFEAB", -1, 28, "", methodObject),
-        new Among("\uFEAC", -1, 28, "", methodObject),
-        new Among("\uFEAD", -1, 29, "", methodObject),
-        new Among("\uFEAE", -1, 29, "", methodObject),
-        new Among("\uFEAF", -1, 30, "", methodObject),
-        new Among("\uFEB0", -1, 30, "", methodObject),
-        new Among("\uFEB1", -1, 31, "", methodObject),
-        new Among("\uFEB2", -1, 31, "", methodObject),
-        new Among("\uFEB3", -1, 31, "", methodObject),
-        new Among("\uFEB4", -1, 31, "", methodObject),
-        new Among("\uFEB5", -1, 32, "", methodObject),
-        new Among("\uFEB6", -1, 32, "", methodObject),
-        new Among("\uFEB7", -1, 32, "", methodObject),
-        new Among("\uFEB8", -1, 32, "", methodObject),
-        new Among("\uFEB9", -1, 33, "", methodObject),
-        new Among("\uFEBA", -1, 33, "", methodObject),
-        new Among("\uFEBB", -1, 33, "", methodObject),
-        new Among("\uFEBC", -1, 33, "", methodObject),
-        new Among("\uFEBD", -1, 34, "", methodObject),
-        new Among("\uFEBE", -1, 34, "", methodObject),
-        new Among("\uFEBF", -1, 34, "", methodObject),
-        new Among("\uFEC0", -1, 34, "", methodObject),
-        new Among("\uFEC1", -1, 35, "", methodObject),
-        new Among("\uFEC2", -1, 35, "", methodObject),
-        new Among("\uFEC3", -1, 35, "", methodObject),
-        new Among("\uFEC4", -1, 35, "", methodObject),
-        new Among("\uFEC5", -1, 36, "", methodObject),
-        new Among("\uFEC6", -1, 36, "", methodObject),
-        new Among("\uFEC7", -1, 36, "", methodObject),
-        new Among("\uFEC8", -1, 36, "", methodObject),
-        new Among("\uFEC9", -1, 37, "", methodObject),
-        new Among("\uFECA", -1, 37, "", methodObject),
-        new Among("\uFECB", -1, 37, "", methodObject),
-        new Among("\uFECC", -1, 37, "", methodObject),
-        new Among("\uFECD", -1, 38, "", methodObject),
-        new Among("\uFECE", -1, 38, "", methodObject),
-        new Among("\uFECF", -1, 38, "", methodObject),
-        new Among("\uFED0", -1, 38, "", methodObject),
-        new Among("\uFED1", -1, 39, "", methodObject),
-        new Among("\uFED2", -1, 39, "", methodObject),
-        new Among("\uFED3", -1, 39, "", methodObject),
-        new Among("\uFED4", -1, 39, "", methodObject),
-        new Among("\uFED5", -1, 40, "", methodObject),
-        new Among("\uFED6", -1, 40, "", methodObject),
-        new Among("\uFED7", -1, 40, "", methodObject),
-        new Among("\uFED8", -1, 40, "", methodObject),
-        new Among("\uFED9", -1, 41, "", methodObject),
-        new Among("\uFEDA", -1, 41, "", methodObject),
-        new Among("\uFEDB", -1, 41, "", methodObject),
-        new Among("\uFEDC", -1, 41, "", methodObject),
-        new Among("\uFEDD", -1, 42, "", methodObject),
-        new Among("\uFEDE", -1, 42, "", methodObject),
-        new Among("\uFEDF", -1, 42, "", methodObject),
-        new Among("\uFEE0", -1, 42, "", methodObject),
-        new Among("\uFEE1", -1, 43, "", methodObject),
-        new Among("\uFEE2", -1, 43, "", methodObject),
-        new Among("\uFEE3", -1, 43, "", methodObject),
-        new Among("\uFEE4", -1, 43, "", methodObject),
-        new Among("\uFEE5", -1, 44, "", methodObject),
-        new Among("\uFEE6", -1, 44, "", methodObject),
-        new Among("\uFEE7", -1, 44, "", methodObject),
-        new Among("\uFEE8", -1, 44, "", methodObject),
-        new Among("\uFEE9", -1, 45, "", methodObject),
-        new Among("\uFEEA", -1, 45, "", methodObject),
-        new Among("\uFEEB", -1, 45, "", methodObject),
-        new Among("\uFEEC", -1, 45, "", methodObject),
-        new Among("\uFEED", -1, 46, "", methodObject),
-        new Among("\uFEEE", -1, 46, "", methodObject),
-        new Among("\uFEEF", -1, 47, "", methodObject),
-        new Among("\uFEF0", -1, 47, "", methodObject),
-        new Among("\uFEF1", -1, 48, "", methodObject),
-        new Among("\uFEF2", -1, 48, "", methodObject),
-        new Among("\uFEF3", -1, 48, "", methodObject),
-        new Among("\uFEF4", -1, 48, "", methodObject),
-        new Among("\uFEF5", -1, 52, "", methodObject),
-        new Among("\uFEF6", -1, 52, "", methodObject),
-        new Among("\uFEF7", -1, 50, "", methodObject),
-        new Among("\uFEF8", -1, 50, "", methodObject),
-        new Among("\uFEF9", -1, 51, "", methodObject),
-        new Among("\uFEFA", -1, 51, "", methodObject),
-        new Among("\uFEFB", -1, 49, "", methodObject),
-        new Among("\uFEFC", -1, 49, "", methodObject)
-    };
+  private final static Among a_2[] = {
+    new Among("\u0622", -1, 1),
+    new Among("\u0623", -1, 1),
+    new Among("\u0624", -1, 2),
+    new Among("\u0625", -1, 1),
+    new Among("\u0626", -1, 3)
+  };
 
-    private final static Among a_1[] = {
-        new Among("\u0622", -1, 1, "", methodObject),
-        new Among("\u0623", -1, 1, "", methodObject),
-        new Among("\u0624", -1, 2, "", methodObject),
-        new Among("\u0625", -1, 1, "", methodObject),
-        new Among("\u0626", -1, 3, "", methodObject)
-    };
+  private final static Among a_3[] = {
+    new Among("\u0627\u0644", -1, 2),
+    new Among("\u0628\u0627\u0644", -1, 1),
+    new Among("\u0643\u0627\u0644", -1, 1),
+    new Among("\u0644\u0644", -1, 2)
+  };
 
-    private final static Among a_2[] = {
-        new Among("\u0622", -1, 1, "", methodObject),
-        new Among("\u0623", -1, 1, "", methodObject),
-        new Among("\u0624", -1, 2, "", methodObject),
-        new Among("\u0625", -1, 1, "", methodObject),
-        new Among("\u0626", -1, 3, "", methodObject)
-    };
+  private final static Among a_4[] = {
+    new Among("\u0623\u0622", -1, 2),
+    new Among("\u0623\u0623", -1, 1),
+    new Among("\u0623\u0624", -1, 1),
+    new Among("\u0623\u0625", -1, 4),
+    new Among("\u0623\u0627", -1, 3)
+  };
 
-    private final static Among a_3[] = {
-        new Among("\u0627\u0644", -1, 2, "", methodObject),
-        new Among("\u0628\u0627\u0644", -1, 1, "", methodObject),
-        new Among("\u0643\u0627\u0644", -1, 1, "", methodObject),
-        new Among("\u0644\u0644", -1, 2, "", methodObject)
-    };
+  private final static Among a_5[] = {
+    new Among("\u0641", -1, 1),
+    new Among("\u0648", -1, 1)
+  };
 
-    private final static Among a_4[] = {
-        new Among("\u0623\u0622", -1, 2, "", methodObject),
-        new Among("\u0623\u0623", -1, 1, "", methodObject),
-        new Among("\u0623\u0624", -1, 3, "", methodObject),
-        new Among("\u0623\u0625", -1, 5, "", methodObject),
-        new Among("\u0623\u0627", -1, 4, "", methodObject)
-    };
+  private final static Among a_6[] = {
+    new Among("\u0627\u0644", -1, 2),
+    new Among("\u0628\u0627\u0644", -1, 1),
+    new Among("\u0643\u0627\u0644", -1, 1),
+    new Among("\u0644\u0644", -1, 2)
+  };
 
-    private final static Among a_5[] = {
-        new Among("\u0641", -1, 1, "", methodObject),
-        new Among("\u0648", -1, 2, "", methodObject)
-    };
+  private final static Among a_7[] = {
+    new Among("\u0628", -1, 1),
+    new Among("\u0628\u0628", 0, 2),
+    new Among("\u0643\u0643", -1, 3)
+  };
 
-    private final static Among a_6[] = {
-        new Among("\u0627\u0644", -1, 2, "", methodObject),
-        new Among("\u0628\u0627\u0644", -1, 1, "", methodObject),
-        new Among("\u0643\u0627\u0644", -1, 1, "", methodObject),
-        new Among("\u0644\u0644", -1, 2, "", methodObject)
-    };
+  private final static Among a_8[] = {
+    new Among("\u0633\u0623", -1, 4),
+    new Among("\u0633\u062A", -1, 2),
+    new Among("\u0633\u0646", -1, 3),
+    new Among("\u0633\u064A", -1, 1)
+  };
 
-    private final static Among a_7[] = {
-        new Among("\u0628", -1, 1, "", methodObject),
-        new Among("\u0628\u0628", 0, 2, "", methodObject),
-        new Among("\u0643\u0643", -1, 3, "", methodObject)
-    };
+  private final static Among a_9[] = {
+    new Among("\u062A\u0633\u062A", -1, 1),
+    new Among("\u0646\u0633\u062A", -1, 1),
+    new Among("\u064A\u0633\u062A", -1, 1)
+  };
 
-    private final static Among a_8[] = {
-        new Among("\u0633\u0623", -1, 4, "", methodObject),
-        new Among("\u0633\u062A", -1, 2, "", methodObject),
-        new Among("\u0633\u0646", -1, 3, "", methodObject),
-        new Among("\u0633\u064A", -1, 1, "", methodObject)
-    };
+  private final static Among a_10[] = {
+    new Among("\u0643\u0645\u0627", -1, 3),
+    new Among("\u0647\u0645\u0627", -1, 3),
+    new Among("\u0646\u0627", -1, 2),
+    new Among("\u0647\u0627", -1, 2),
+    new Among("\u0643", -1, 1),
+    new Among("\u0643\u0645", -1, 2),
+    new Among("\u0647\u0645", -1, 2),
+    new Among("\u0647\u0646", -1, 2),
+    new Among("\u0647", -1, 1),
+    new Among("\u064A", -1, 1)
+  };
 
-    private final static Among a_9[] = {
-        new Among("\u062A\u0633\u062A", -1, 1, "", methodObject),
-        new Among("\u0646\u0633\u062A", -1, 1, "", methodObject),
-        new Among("\u064A\u0633\u062A", -1, 1, "", methodObject)
-    };
+  private final static Among a_11[] = {
+    new Among("\u0646", -1, 1)
+  };
 
-    private final static Among a_10[] = {
-        new Among("\u0643\u0645\u0627", -1, 3, "", methodObject),
-        new Among("\u0647\u0645\u0627", -1, 3, "", methodObject),
-        new Among("\u0646\u0627", -1, 2, "", methodObject),
-        new Among("\u0647\u0627", -1, 2, "", methodObject),
-        new Among("\u0643", -1, 1, "", methodObject),
-        new Among("\u0643\u0645", -1, 2, "", methodObject),
-        new Among("\u0647\u0645", -1, 2, "", methodObject),
-        new Among("\u0647\u0646", -1, 2, "", methodObject),
-        new Among("\u0647", -1, 1, "", methodObject),
-        new Among("\u064A", -1, 1, "", methodObject)
-    };
+  private final static Among a_12[] = {
+    new Among("\u0627", -1, 1),
+    new Among("\u0648", -1, 1),
+    new Among("\u064A", -1, 1)
+  };
 
-    private final static Among a_11[] = {
-        new Among("\u0646", -1, 1, "", methodObject)
-    };
+  private final static Among a_13[] = {
+    new Among("\u0627\u062A", -1, 1)
+  };
 
-    private final static Among a_12[] = {
-        new Among("\u0627", -1, 1, "", methodObject),
-        new Among("\u0648", -1, 1, "", methodObject),
-        new Among("\u064A", -1, 1, "", methodObject)
-    };
+  private final static Among a_14[] = {
+    new Among("\u062A", -1, 1)
+  };
 
-    private final static Among a_13[] = {
-        new Among("\u0627\u062A", -1, 1, "", methodObject)
-    };
+  private final static Among a_15[] = {
+    new Among("\u0629", -1, 1)
+  };
 
-    private final static Among a_14[] = {
-        new Among("\u062A", -1, 1, "", methodObject)
-    };
+  private final static Among a_16[] = {
+    new Among("\u064A", -1, 1)
+  };
 
-    private final static Among a_15[] = {
-        new Among("\u0629", -1, 1, "", methodObject)
-    };
+  private final static Among a_17[] = {
+    new Among("\u0643\u0645\u0627", -1, 3),
+    new Among("\u0647\u0645\u0627", -1, 3),
+    new Among("\u0646\u0627", -1, 2),
+    new Among("\u0647\u0627", -1, 2),
+    new Among("\u0643", -1, 1),
+    new Among("\u0643\u0645", -1, 2),
+    new Among("\u0647\u0645", -1, 2),
+    new Among("\u0643\u0646", -1, 2),
+    new Among("\u0647\u0646", -1, 2),
+    new Among("\u0647", -1, 1),
+    new Among("\u0643\u0645\u0648", -1, 3),
+    new Among("\u0646\u064A", -1, 2)
+  };
 
-    private final static Among a_16[] = {
-        new Among("\u064A", -1, 1, "", methodObject)
-    };
+  private final static Among a_18[] = {
+    new Among("\u0627", -1, 1),
+    new Among("\u062A\u0627", 0, 2),
+    new Among("\u062A\u0645\u0627", 0, 4),
+    new Among("\u0646\u0627", 0, 2),
+    new Among("\u062A", -1, 1),
+    new Among("\u0646", -1, 1),
+    new Among("\u0627\u0646", 5, 3),
+    new Among("\u062A\u0646", 5, 2),
+    new Among("\u0648\u0646", 5, 3),
+    new Among("\u064A\u0646", 5, 3),
+    new Among("\u064A", -1, 1)
+  };
 
-    private final static Among a_17[] = {
-        new Among("\u0643\u0645\u0627", -1, 3, "", methodObject),
-        new Among("\u0647\u0645\u0627", -1, 3, "", methodObject),
-        new Among("\u0646\u0627", -1, 2, "", methodObject),
-        new Among("\u0647\u0627", -1, 2, "", methodObject),
-        new Among("\u0643", -1, 1, "", methodObject),
-        new Among("\u0643\u0645", -1, 2, "", methodObject),
-        new Among("\u0647\u0645", -1, 2, "", methodObject),
-        new Among("\u0643\u0646", -1, 2, "", methodObject),
-        new Among("\u0647\u0646", -1, 2, "", methodObject),
-        new Among("\u0647", -1, 1, "", methodObject),
-        new Among("\u0643\u0645\u0648", -1, 3, "", methodObject),
-        new Among("\u0646\u064A", -1, 2, "", methodObject)
-    };
+  private final static Among a_19[] = {
+    new Among("\u0648\u0627", -1, 1),
+    new Among("\u062A\u0645", -1, 1)
+  };
 
-    private final static Among a_18[] = {
-        new Among("\u0627", -1, 2, "", methodObject),
-        new Among("\u062A\u0627", 0, 3, "", methodObject),
-        new Among("\u062A\u0645\u0627", 0, 5, "", methodObject),
-        new Among("\u0646\u0627", 0, 3, "", methodObject),
-        new Among("\u062A", -1, 1, "", methodObject),
-        new Among("\u0646", -1, 2, "", methodObject),
-        new Among("\u0627\u0646", 5, 4, "", methodObject),
-        new Among("\u062A\u0646", 5, 3, "", methodObject),
-        new Among("\u0648\u0646", 5, 4, "", methodObject),
-        new Among("\u064A\u0646", 5, 4, "", methodObject),
-        new Among("\u064A", -1, 2, "", methodObject)
-    };
+  private final static Among a_20[] = {
+    new Among("\u0648", -1, 1),
+    new Among("\u062A\u0645\u0648", 0, 2)
+  };
 
-    private final static Among a_19[] = {
-        new Among("\u0648\u0627", -1, 1, "", methodObject),
-        new Among("\u062A\u0645", -1, 1, "", methodObject)
-    };
+  private final static Among a_21[] = {
+    new Among("\u0649", -1, 1)
+  };
 
-    private final static Among a_20[] = {
-        new Among("\u0648", -1, 1, "", methodObject),
-        new Among("\u062A\u0645\u0648", 0, 2, "", methodObject)
-    };
+  private boolean B_is_defined;
+  private boolean B_is_verb;
+  private boolean B_is_noun;
 
-    private final static Among a_21[] = {
-        new Among("\u0649", -1, 1, "", methodObject)
-    };
 
-    private boolean B_is_defined;
-    private boolean B_is_verb;
-    private boolean B_is_noun;
-    private int I_word_len;
-
-
-    private boolean r_Normalize_pre() {
-        int among_var;
-        // (, line 251
-        // loop, line 252
-        for (int v_1 = getCurrent().length(); v_1 > 0; v_1--)
+  private boolean r_Normalize_pre() {
+    int among_var;
+    int v_1 = cursor;
+lab0: {
+        while(true)
         {
-            // (, line 252
-            // or, line 316
-            lab0: do {
-                int v_2 = cursor;
-                lab1: do {
-                    // (, line 253
-                    // [, line 254
-                    bra = cursor;
-                    // substring, line 254
-                    among_var = find_among(a_0, a_0.length);
-                    if (among_var == 0)
-                    {
-                        break lab1;
-                    }
-                    // ], line 254
-                    ket = cursor;
-                    switch (among_var) {
-                        case 0:
-                            break lab1;
-                        case 1:
-                            // (, line 255
-                            // delete, line 255
-                            slice_del();
-                            break;
-                        case 2:
-                            // (, line 256
-                            // delete, line 256
-                            slice_del();
-                            break;
-                        case 3:
-                            // (, line 259
-                            // <-, line 259
-                            slice_from("0");
-                            break;
-                        case 4:
-                            // (, line 260
-                            // <-, line 260
-                            slice_from("1");
-                            break;
-                        case 5:
-                            // (, line 261
-                            // <-, line 261
-                            slice_from("2");
-                            break;
-                        case 6:
-                            // (, line 262
-                            // <-, line 262
-                            slice_from("3");
-                            break;
-                        case 7:
-                            // (, line 263
-                            // <-, line 263
-                            slice_from("4");
-                            break;
-                        case 8:
-                            // (, line 264
-                            // <-, line 264
-                            slice_from("5");
-                            break;
-                        case 9:
-                            // (, line 265
-                            // <-, line 265
-                            slice_from("6");
-                            break;
-                        case 10:
-                            // (, line 266
-                            // <-, line 266
-                            slice_from("7");
-                            break;
-                        case 11:
-                            // (, line 267
-                            // <-, line 267
-                            slice_from("8");
-                            break;
-                        case 12:
-                            // (, line 268
-                            // <-, line 268
-                            slice_from("9");
-                            break;
-                        case 13:
-                            // (, line 271
-                            // <-, line 271
-                            slice_from("\u0621");
-                            break;
-                        case 14:
-                            // (, line 272
-                            // <-, line 272
-                            slice_from("\u0623");
-                            break;
-                        case 15:
-                            // (, line 273
-                            // <-, line 273
-                            slice_from("\u0625");
-                            break;
-                        case 16:
-                            // (, line 274
-                            // <-, line 274
-                            slice_from("\u0626");
-                            break;
-                        case 17:
-                            // (, line 275
-                            // <-, line 275
-                            slice_from("\u0622");
-                            break;
-                        case 18:
-                            // (, line 276
-                            // <-, line 276
-                            slice_from("\u0624");
-                            break;
-                        case 19:
-                            // (, line 277
-                            // <-, line 277
-                            slice_from("\u0627");
-                            break;
-                        case 20:
-                            // (, line 278
-                            // <-, line 278
-                            slice_from("\u0628");
-                            break;
-                        case 21:
-                            // (, line 279
-                            // <-, line 279
-                            slice_from("\u0629");
-                            break;
-                        case 22:
-                            // (, line 280
-                            // <-, line 280
-                            slice_from("\u062A");
-                            break;
-                        case 23:
-                            // (, line 281
-                            // <-, line 281
-                            slice_from("\u062B");
-                            break;
-                        case 24:
-                            // (, line 282
-                            // <-, line 282
-                            slice_from("\u062C");
-                            break;
-                        case 25:
-                            // (, line 283
-                            // <-, line 283
-                            slice_from("\u062D");
-                            break;
-                        case 26:
-                            // (, line 284
-                            // <-, line 284
-                            slice_from("\u062E");
-                            break;
-                        case 27:
-                            // (, line 285
-                            // <-, line 285
-                            slice_from("\u062F");
-                            break;
-                        case 28:
-                            // (, line 286
-                            // <-, line 286
-                            slice_from("\u0630");
-                            break;
-                        case 29:
-                            // (, line 287
-                            // <-, line 287
-                            slice_from("\u0631");
-                            break;
-                        case 30:
-                            // (, line 288
-                            // <-, line 288
-                            slice_from("\u0632");
-                            break;
-                        case 31:
-                            // (, line 289
-                            // <-, line 289
-                            slice_from("\u0633");
-                            break;
-                        case 32:
-                            // (, line 290
-                            // <-, line 290
-                            slice_from("\u0634");
-                            break;
-                        case 33:
-                            // (, line 291
-                            // <-, line 291
-                            slice_from("\u0635");
-                            break;
-                        case 34:
-                            // (, line 292
-                            // <-, line 292
-                            slice_from("\u0636");
-                            break;
-                        case 35:
-                            // (, line 293
-                            // <-, line 293
-                            slice_from("\u0637");
-                            break;
-                        case 36:
-                            // (, line 294
-                            // <-, line 294
-                            slice_from("\u0638");
-                            break;
-                        case 37:
-                            // (, line 295
-                            // <-, line 295
-                            slice_from("\u0639");
-                            break;
-                        case 38:
-                            // (, line 296
-                            // <-, line 296
-                            slice_from("\u063A");
-                            break;
-                        case 39:
-                            // (, line 297
-                            // <-, line 297
-                            slice_from("\u0641");
-                            break;
-                        case 40:
-                            // (, line 298
-                            // <-, line 298
-                            slice_from("\u0642");
-                            break;
-                        case 41:
-                            // (, line 299
-                            // <-, line 299
-                            slice_from("\u0643");
-                            break;
-                        case 42:
-                            // (, line 300
-                            // <-, line 300
-                            slice_from("\u0644");
-                            break;
-                        case 43:
-                            // (, line 301
-                            // <-, line 301
-                            slice_from("\u0645");
-                            break;
-                        case 44:
-                            // (, line 302
-                            // <-, line 302
-                            slice_from("\u0646");
-                            break;
-                        case 45:
-                            // (, line 303
-                            // <-, line 303
-                            slice_from("\u0647");
-                            break;
-                        case 46:
-                            // (, line 304
-                            // <-, line 304
-                            slice_from("\u0648");
-                            break;
-                        case 47:
-                            // (, line 305
-                            // <-, line 305
-                            slice_from("\u0649");
-                            break;
-                        case 48:
-                            // (, line 306
-                            // <-, line 306
-                            slice_from("\u064A");
-                            break;
-                        case 49:
-                            // (, line 309
-                            // <-, line 309
-                            slice_from("\u0644\u0627");
-                            break;
-                        case 50:
-                            // (, line 310
-                            // <-, line 310
-                            slice_from("\u0644\u0623");
-                            break;
-                        case 51:
-                            // (, line 311
-                            // <-, line 311
-                            slice_from("\u0644\u0625");
-                            break;
-                        case 52:
-                            // (, line 312
-                            // <-, line 312
-                            slice_from("\u0644\u0622");
-                            break;
-                    }
-                    break lab0;
-                } while (false);
-                cursor = v_2;
-                // next, line 317
-                if (cursor >= limit)
-                {
-                    return false;
-                }
-                cursor++;
-            } while (false);
-        }
-        return true;
-    }
-
-    private boolean r_Normalize_post() {
-        int among_var;
-        // (, line 321
-        // do, line 323
-        int v_1 = cursor;
-        lab0: do {
-            // (, line 323
-            // backwards, line 325
-            limit_backward = cursor;
-            cursor = limit;
-            // (, line 325
-            // [, line 326
-            ket = cursor;
-            // substring, line 326
-            among_var = find_among_b(a_1, a_1.length);
-            if (among_var == 0)
-            {
-                break lab0;
-            }
-            // ], line 326
-            bra = cursor;
-            switch (among_var) {
-                case 0:
-                    break lab0;
-                case 1:
-                    // (, line 327
-                    // <-, line 327
-                    slice_from("\u0621");
-                    break;
-                case 2:
-                    // (, line 328
-                    // <-, line 328
-                    slice_from("\u0621");
-                    break;
-                case 3:
-                    // (, line 329
-                    // <-, line 329
-                    slice_from("\u0621");
-                    break;
-            }
-            cursor = limit_backward;
-        } while (false);
-        cursor = v_1;
-        // do, line 334
-        int v_2 = cursor;
-        lab1: do {
-            // loop, line 334
-            for (int v_3 = I_word_len; v_3 > 0; v_3--)
-            {
-                // (, line 334
-                // or, line 343
-                lab2: do {
-                    int v_4 = cursor;
-                    lab3: do {
-                        // (, line 335
-                        // [, line 337
-                        bra = cursor;
-                        // substring, line 337
-                        among_var = find_among(a_2, a_2.length);
-                        if (among_var == 0)
-                        {
-                            break lab3;
-                        }
-                        // ], line 337
-                        ket = cursor;
-                        switch (among_var) {
-                            case 0:
-                                break lab3;
-                            case 1:
-                                // (, line 338
-                                // <-, line 338
-                                slice_from("\u0627");
-                                break;
-                            case 2:
-                                // (, line 339
-                                // <-, line 339
-                                slice_from("\u0648");
-                                break;
-                            case 3:
-                                // (, line 340
-                                // <-, line 340
-                                slice_from("\u064A");
-                                break;
-                        }
-                        break lab2;
-                    } while (false);
-                    cursor = v_4;
-                    // next, line 344
-                    if (cursor >= limit)
-                    {
-                        break lab1;
-                    }
-                    cursor++;
-                } while (false);
-            }
-        } while (false);
-        cursor = v_2;
-        return true;
-    }
-
-    private boolean r_Checks1() {
-        int among_var;
-        // (, line 349
-        I_word_len = getCurrent().length();
-        // [, line 351
+          int v_2 = cursor;
+lab1: {
+lab2: {
+        int v_3 = cursor;
+lab3: {
         bra = cursor;
-        // substring, line 351
-        among_var = find_among(a_3, a_3.length);
+        among_var = find_among(a_0);
         if (among_var == 0)
         {
-            return false;
+          break lab3;
         }
-        // ], line 351
         ket = cursor;
         switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 352
-                if (!(I_word_len > 4))
-                {
-                    return false;
-                }
-                // set is_noun, line 352
-                B_is_noun = true;
-                // unset is_verb, line 352
-                B_is_verb = false;
-                // set is_defined, line 352
-                B_is_defined = true;
-                break;
-            case 2:
-                // (, line 353
-                if (!(I_word_len > 3))
-                {
-                    return false;
-                }
-                // set is_noun, line 353
-                B_is_noun = true;
-                // unset is_verb, line 353
-                B_is_verb = false;
-                // set is_defined, line 353
-                B_is_defined = true;
-                break;
-        }
-        return true;
-    }
-
-    private boolean r_Prefix_Step1() {
-        int among_var;
-        // (, line 359
-        I_word_len = getCurrent().length();
-        // [, line 361
-        bra = cursor;
-        // substring, line 361
-        among_var = find_among(a_4, a_4.length);
-        if (among_var == 0)
-        {
-            return false;
+          case 1:
+            slice_del();
+            break;
+          case 2:
+            slice_from("0");
+            break;
+          case 3:
+            slice_from("1");
+            break;
+          case 4:
+            slice_from("2");
+            break;
+          case 5:
+            slice_from("3");
+            break;
+          case 6:
+            slice_from("4");
+            break;
+          case 7:
+            slice_from("5");
+            break;
+          case 8:
+            slice_from("6");
+            break;
+          case 9:
+            slice_from("7");
+            break;
+          case 10:
+            slice_from("8");
+            break;
+          case 11:
+            slice_from("9");
+            break;
+          case 12:
+            slice_from("\u0621");
+            break;
+          case 13:
+            slice_from("\u0623");
+            break;
+          case 14:
+            slice_from("\u0625");
+            break;
+          case 15:
+            slice_from("\u0626");
+            break;
+          case 16:
+            slice_from("\u0622");
+            break;
+          case 17:
+            slice_from("\u0624");
+            break;
+          case 18:
+            slice_from("\u0627");
+            break;
+          case 19:
+            slice_from("\u0628");
+            break;
+          case 20:
+            slice_from("\u0629");
+            break;
+          case 21:
+            slice_from("\u062A");
+            break;
+          case 22:
+            slice_from("\u062B");
+            break;
+          case 23:
+            slice_from("\u062C");
+            break;
+          case 24:
+            slice_from("\u062D");
+            break;
+          case 25:
+            slice_from("\u062E");
+            break;
+          case 26:
+            slice_from("\u062F");
+            break;
+          case 27:
+            slice_from("\u0630");
+            break;
+          case 28:
+            slice_from("\u0631");
+            break;
+          case 29:
+            slice_from("\u0632");
+            break;
+          case 30:
+            slice_from("\u0633");
+            break;
+          case 31:
+            slice_from("\u0634");
+            break;
+          case 32:
+            slice_from("\u0635");
+            break;
+          case 33:
+            slice_from("\u0636");
+            break;
+          case 34:
+            slice_from("\u0637");
+            break;
+          case 35:
+            slice_from("\u0638");
+            break;
+          case 36:
+            slice_from("\u0639");
+            break;
+          case 37:
+            slice_from("\u063A");
+            break;
+          case 38:
+            slice_from("\u0641");
+            break;
+          case 39:
+            slice_from("\u0642");
+            break;
+          case 40:
+            slice_from("\u0643");
+            break;
+          case 41:
+            slice_from("\u0644");
+            break;
+          case 42:
+            slice_from("\u0645");
+            break;
+          case 43:
+            slice_from("\u0646");
+            break;
+          case 44:
+            slice_from("\u0647");
+            break;
+          case 45:
+            slice_from("\u0648");
+            break;
+          case 46:
+            slice_from("\u0649");
+            break;
+          case 47:
+            slice_from("\u064A");
+            break;
+          case 48:
+            slice_from("\u0644\u0627");
+            break;
+          case 49:
+            slice_from("\u0644\u0623");
+            break;
+          case 50:
+            slice_from("\u0644\u0625");
+            break;
+          case 51:
+            slice_from("\u0644\u0622");
+            break;
         }
-        // ], line 361
-        ket = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 362
-                if (!(I_word_len > 3))
-                {
-                    return false;
-                }
-                // <-, line 362
-                slice_from("\u0623");
-                break;
-            case 2:
-                // (, line 363
-                if (!(I_word_len > 3))
-                {
-                    return false;
-                }
-                // <-, line 363
-                slice_from("\u0622");
-                break;
-            case 3:
-                // (, line 364
-                if (!(I_word_len > 3))
-                {
-                    return false;
-                }
-                // <-, line 364
-                slice_from("\u0623");
-                break;
-            case 4:
-                // (, line 365
-                if (!(I_word_len > 3))
-                {
-                    return false;
-                }
-                // <-, line 365
-                slice_from("\u0627");
-                break;
-            case 5:
-                // (, line 366
-                if (!(I_word_len > 3))
-                {
-                    return false;
-                }
-                // <-, line 366
-                slice_from("\u0625");
-                break;
+        break lab2;
+}
+cursor = v_3;
+if (cursor >= limit)
+{
+  break lab1;
+}
+cursor++;
+}
+continue;
+}
+cursor = v_2;
+break;
         }
-        return true;
-    }
+}
+cursor = v_1;
+return true;
+  }
 
-    private boolean r_Prefix_Step2() {
-        int among_var;
-        // (, line 371
-        I_word_len = getCurrent().length();
-        // not, line 373
-        {
-            int v_1 = cursor;
-            lab0: do {
-                // literal, line 373
-                if (!(eq_s("\u0641\u0627".length(),"\u0641\u0627")))
-                {
-                    break lab0;
-                }
-                return false;
-            } while (false);
-            cursor = v_1;
-        }
-        // not, line 374
+private boolean r_Normalize_post() {
+  int among_var;
+  int v_1 = cursor;
+lab0: {
+        limit_backward = cursor;
+        cursor = limit;
+        ket = cursor;
+        if (find_among_b(a_1) == 0)
         {
-            int v_2 = cursor;
-            lab1: do {
-                // literal, line 374
-                if (!(eq_s("\u0648\u0627".length(),"\u0648\u0627")))
-                {
-                    break lab1;
-                }
-                return false;
-            } while (false);
-            cursor = v_2;
+          break lab0;
         }
-        // [, line 375
         bra = cursor;
-        // substring, line 375
-        among_var = find_among(a_5, a_5.length);
-        if (among_var == 0)
+        slice_from("\u0621");
+        cursor = limit_backward;
+}
+cursor = v_1;
+int v_2 = cursor;
+lab1: {
+        while(true)
         {
-            return false;
-        }
-        // ], line 375
-        ket = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 376
-                if (!(I_word_len > 3))
-                {
-                    return false;
-                }
-                // delete, line 376
-                slice_del();
-                break;
-            case 2:
-                // (, line 377
-                if (!(I_word_len > 3))
-                {
-                    return false;
-                }
-                // delete, line 377
-                slice_del();
-                break;
-        }
-        return true;
-    }
-
-    private boolean r_Prefix_Step3a_Noun() {
-        int among_var;
-        // (, line 381
-        I_word_len = getCurrent().length();
-        // [, line 383
+          int v_3 = cursor;
+lab2: {
+lab3: {
+        int v_4 = cursor;
+lab4: {
         bra = cursor;
-        // substring, line 383
-        among_var = find_among(a_6, a_6.length);
+        among_var = find_among(a_2);
         if (among_var == 0)
         {
-            return false;
+          break lab4;
         }
-        // ], line 383
         ket = cursor;
         switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 384
-                if (!(I_word_len > 5))
-                {
-                    return false;
-                }
-                // delete, line 384
-                slice_del();
-                break;
-            case 2:
-                // (, line 385
-                if (!(I_word_len > 4))
-                {
-                    return false;
-                }
-                // delete, line 385
-                slice_del();
-                break;
+          case 1:
+            slice_from("\u0627");
+            break;
+          case 2:
+            slice_from("\u0648");
+            break;
+          case 3:
+            slice_from("\u064A");
+            break;
         }
-        return true;
-    }
+        break lab3;
+}
+cursor = v_4;
+if (cursor >= limit)
+{
+  break lab2;
+}
+cursor++;
+}
+continue;
+}
+cursor = v_3;
+break;
+        }
+}
+cursor = v_2;
+return true;
+}
+
+private boolean r_Checks1() {
+  int among_var;
+  bra = cursor;
+  among_var = find_among(a_3);
+  if (among_var == 0)
+  {
+    return false;
+  }
+  ket = cursor;
+  switch (among_var) {
+    case 1:
+      if (!(limit > 4))
+      {
+        return false;
+      }
+      B_is_noun = true;
+      B_is_verb = false;
+      B_is_defined = true;
+      break;
+    case 2:
+      if (!(limit > 3))
+      {
+        return false;
+      }
+      B_is_noun = true;
+      B_is_verb = false;
+      B_is_defined = true;
+      break;
+  }
+  return true;
+}
+
+private boolean r_Prefix_Step1() {
+  int among_var;
+  bra = cursor;
+  among_var = find_among(a_4);
+  if (among_var == 0)
+  {
+    return false;
+  }
+  ket = cursor;
+  switch (among_var) {
+    case 1:
+      if (!(limit > 3))
+      {
+        return false;
+      }
+      slice_from("\u0623");
+      break;
+    case 2:
+      if (!(limit > 3))
+      {
+        return false;
+      }
+      slice_from("\u0622");
+      break;
+    case 3:
+      if (!(limit > 3))
+      {
+        return false;
+      }
+      slice_from("\u0627");
+      break;
+    case 4:
+      if (!(limit > 3))
+      {
+        return false;
+      }
+      slice_from("\u0625");
+      break;
+  }
+  return true;
+}
 
-    private boolean r_Prefix_Step3b_Noun() {
-        int among_var;
-        // (, line 389
-        I_word_len = getCurrent().length();
-        // not, line 391
+private boolean r_Prefix_Step2() {
+  {
+    int v_1 = cursor;
+lab0: {
+        if (!(eq_s("\u0641\u0627")))
         {
-            int v_1 = cursor;
-            lab0: do {
-                // literal, line 391
-                if (!(eq_s("\u0628\u0627".length(),"\u0628\u0627")))
-                {
-                    break lab0;
-                }
-                return false;
-            } while (false);
-            cursor = v_1;
+          break lab0;
         }
-        // [, line 392
-        bra = cursor;
-        // substring, line 392
-        among_var = find_among(a_7, a_7.length);
-        if (among_var == 0)
+        return false;
+}
+cursor = v_1;
+  }
+{
+  int v_2 = cursor;
+lab1: {
+        if (!(eq_s("\u0648\u0627")))
         {
-            return false;
-        }
-        // ], line 392
-        ket = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 393
-                if (!(I_word_len > 3))
-                {
-                    return false;
-                }
-                // delete, line 393
-                slice_del();
-                break;
-            case 2:
-                // (, line 395
-                if (!(I_word_len > 3))
-                {
-                    return false;
-                }
-                // <-, line 395
-                slice_from("\u0628");
-                break;
-            case 3:
-                // (, line 396
-                if (!(I_word_len > 3))
-                {
-                    return false;
-                }
-                // <-, line 396
-                slice_from("\u0643");
-                break;
+          break lab1;
         }
-        return true;
-    }
+        return false;
+}
+cursor = v_2;
+}
+bra = cursor;
+if (find_among(a_5) == 0)
+{
+  return false;
+}
+ket = cursor;
+if (!(limit > 3))
+{
+  return false;
+}
+slice_del();
+return true;
+}
 
-    private boolean r_Prefix_Step3_Verb() {
-        int among_var;
-        // (, line 401
-        I_word_len = getCurrent().length();
-        // [, line 403
-        bra = cursor;
-        // substring, line 403
-        among_var = find_among(a_8, a_8.length);
-        if (among_var == 0)
-        {
-            return false;
-        }
-        // ], line 403
-        ket = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 405
-                if (!(I_word_len > 4))
-                {
-                    return false;
-                }
-                // <-, line 405
-                slice_from("\u064A");
-                break;
-            case 2:
-                // (, line 406
-                if (!(I_word_len > 4))
-                {
-                    return false;
-                }
-                // <-, line 406
-                slice_from("\u062A");
-                break;
-            case 3:
-                // (, line 407
-                if (!(I_word_len > 4))
-                {
-                    return false;
-                }
-                // <-, line 407
-                slice_from("\u0646");
-                break;
-            case 4:
-                // (, line 408
-                if (!(I_word_len > 4))
-                {
-                    return false;
-                }
-                // <-, line 408
-                slice_from("\u0623");
-                break;
-        }
-        return true;
-    }
+private boolean r_Prefix_Step3a_Noun() {
+  int among_var;
+  bra = cursor;
+  among_var = find_among(a_6);
+  if (among_var == 0)
+  {
+    return false;
+  }
+  ket = cursor;
+  switch (among_var) {
+    case 1:
+      if (!(limit > 5))
+      {
+        return false;
+      }
+      slice_del();
+      break;
+    case 2:
+      if (!(limit > 4))
+      {
+        return false;
+      }
+      slice_del();
+      break;
+  }
+  return true;
+}
 
-    private boolean r_Prefix_Step4_Verb() {
-        int among_var;
-        // (, line 412
-        I_word_len = getCurrent().length();
-        // [, line 414
-        bra = cursor;
-        // substring, line 414
-        among_var = find_among(a_9, a_9.length);
-        if (among_var == 0)
+private boolean r_Prefix_Step3b_Noun() {
+  int among_var;
+  {
+    int v_1 = cursor;
+lab0: {
+        if (!(eq_s("\u0628\u0627")))
         {
-            return false;
+          break lab0;
         }
-        // ], line 414
-        ket = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 415
-                if (!(I_word_len > 4))
-                {
-                    return false;
-                }
-                // set is_verb, line 415
-                B_is_verb = true;
-                // unset is_noun, line 415
-                B_is_noun = false;
-                // <-, line 415
-                slice_from("\u0627\u0633\u062A");
-                break;
-        }
-        return true;
+        return false;
+}
+cursor = v_1;
+  }
+bra = cursor;
+among_var = find_among(a_7);
+if (among_var == 0)
+{
+  return false;
+}
+ket = cursor;
+switch (among_var) {
+  case 1:
+    if (!(limit > 3))
+    {
+      return false;
     }
-
-    private boolean r_Suffix_Noun_Step1a() {
-        int among_var;
-        // (, line 422
-        I_word_len = getCurrent().length();
-        // [, line 424
-        ket = cursor;
-        // substring, line 424
-        among_var = find_among_b(a_10, a_10.length);
-        if (among_var == 0)
-        {
-            return false;
-        }
-        // ], line 424
-        bra = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 425
-                if (!(I_word_len >= 4))
-                {
-                    return false;
-                }
-                // delete, line 425
-                slice_del();
-                break;
-            case 2:
-                // (, line 426
-                if (!(I_word_len >= 5))
-                {
-                    return false;
-                }
-                // delete, line 426
-                slice_del();
-                break;
-            case 3:
-                // (, line 427
-                if (!(I_word_len >= 6))
-                {
-                    return false;
-                }
-                // delete, line 427
-                slice_del();
-                break;
-        }
-        return true;
+    slice_del();
+    break;
+  case 2:
+    if (!(limit > 3))
+    {
+      return false;
     }
-
-    private boolean r_Suffix_Noun_Step1b() {
-        int among_var;
-        // (, line 430
-        I_word_len = getCurrent().length();
-        // [, line 432
-        ket = cursor;
-        // substring, line 432
-        among_var = find_among_b(a_11, a_11.length);
-        if (among_var == 0)
-        {
-            return false;
-        }
-        // ], line 432
-        bra = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 433
-                if (!(I_word_len > 5))
-                {
-                    return false;
-                }
-                // delete, line 433
-                slice_del();
-                break;
-        }
-        return true;
+    slice_from("\u0628");
+    break;
+  case 3:
+    if (!(limit > 3))
+    {
+      return false;
     }
+    slice_from("\u0643");
+    break;
+}
+return true;
+}
 
-    private boolean r_Suffix_Noun_Step2a() {
-        int among_var;
-        // (, line 437
-        I_word_len = getCurrent().length();
-        // [, line 439
-        ket = cursor;
-        // substring, line 439
-        among_var = find_among_b(a_12, a_12.length);
-        if (among_var == 0)
-        {
-            return false;
-        }
-        // ], line 439
-        bra = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 440
-                if (!(I_word_len > 4))
-                {
-                    return false;
-                }
-                // delete, line 440
-                slice_del();
-                break;
-        }
-        return true;
-    }
+private boolean r_Prefix_Step3_Verb() {
+  int among_var;
+  bra = cursor;
+  among_var = find_among(a_8);
+  if (among_var == 0)
+  {
+    return false;
+  }
+  ket = cursor;
+  switch (among_var) {
+    case 1:
+      if (!(limit > 4))
+      {
+        return false;
+      }
+      slice_from("\u064A");
+      break;
+    case 2:
+      if (!(limit > 4))
+      {
+        return false;
+      }
+      slice_from("\u062A");
+      break;
+    case 3:
+      if (!(limit > 4))
+      {
+        return false;
+      }
+      slice_from("\u0646");
+      break;
+    case 4:
+      if (!(limit > 4))
+      {
+        return false;
+      }
+      slice_from("\u0623");
+      break;
+  }
+  return true;
+}
 
-    private boolean r_Suffix_Noun_Step2b() {
-        int among_var;
-        // (, line 444
-        I_word_len = getCurrent().length();
-        // [, line 446
-        ket = cursor;
-        // substring, line 446
-        among_var = find_among_b(a_13, a_13.length);
-        if (among_var == 0)
-        {
-            return false;
-        }
-        // ], line 446
-        bra = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 447
-                if (!(I_word_len >= 5))
-                {
-                    return false;
-                }
-                // delete, line 447
-                slice_del();
-                break;
-        }
-        return true;
-    }
+private boolean r_Prefix_Step4_Verb() {
+  bra = cursor;
+  if (find_among(a_9) == 0)
+  {
+    return false;
+  }
+  ket = cursor;
+  if (!(limit > 4))
+  {
+    return false;
+  }
+  B_is_verb = true;
+  B_is_noun = false;
+  slice_from("\u0627\u0633\u062A");
+  return true;
+}
 
-    private boolean r_Suffix_Noun_Step2c1() {
-        int among_var;
-        // (, line 451
-        I_word_len = getCurrent().length();
-        // [, line 453
-        ket = cursor;
-        // substring, line 453
-        among_var = find_among_b(a_14, a_14.length);
-        if (among_var == 0)
-        {
-            return false;
-        }
-        // ], line 453
-        bra = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 454
-                if (!(I_word_len >= 4))
-                {
-                    return false;
-                }
-                // delete, line 454
-                slice_del();
-                break;
-        }
-        return true;
-    }
+private boolean r_Suffix_Noun_Step1a() {
+  int among_var;
+  ket = cursor;
+  among_var = find_among_b(a_10);
+  if (among_var == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  switch (among_var) {
+    case 1:
+      if (!(limit >= 4))
+      {
+        return false;
+      }
+      slice_del();
+      break;
+    case 2:
+      if (!(limit >= 5))
+      {
+        return false;
+      }
+      slice_del();
+      break;
+    case 3:
+      if (!(limit >= 6))
+      {
+        return false;
+      }
+      slice_del();
+      break;
+  }
+  return true;
+}
 
-    private boolean r_Suffix_Noun_Step2c2() {
-        int among_var;
-        // (, line 457
-        I_word_len = getCurrent().length();
-        // [, line 459
-        ket = cursor;
-        // substring, line 459
-        among_var = find_among_b(a_15, a_15.length);
-        if (among_var == 0)
-        {
-            return false;
-        }
-        // ], line 459
-        bra = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 460
-                if (!(I_word_len >= 4))
-                {
-                    return false;
-                }
-                // delete, line 460
-                slice_del();
-                break;
-        }
-        return true;
-    }
+private boolean r_Suffix_Noun_Step1b() {
+  ket = cursor;
+  if (find_among_b(a_11) == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  if (!(limit > 5))
+  {
+    return false;
+  }
+  slice_del();
+  return true;
+}
 
-    private boolean r_Suffix_Noun_Step3() {
-        int among_var;
-        // (, line 463
-        I_word_len = getCurrent().length();
-        // [, line 465
-        ket = cursor;
-        // substring, line 465
-        among_var = find_among_b(a_16, a_16.length);
-        if (among_var == 0)
-        {
-            return false;
-        }
-        // ], line 465
-        bra = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 466
-                if (!(I_word_len >= 3))
-                {
-                    return false;
-                }
-                // delete, line 466
-                slice_del();
-                break;
-        }
-        return true;
-    }
+private boolean r_Suffix_Noun_Step2a() {
+  ket = cursor;
+  if (find_among_b(a_12) == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  if (!(limit > 4))
+  {
+    return false;
+  }
+  slice_del();
+  return true;
+}
 
-    private boolean r_Suffix_Verb_Step1() {
-        int among_var;
-        // (, line 470
-        I_word_len = getCurrent().length();
-        // [, line 472
-        ket = cursor;
-        // substring, line 472
-        among_var = find_among_b(a_17, a_17.length);
-        if (among_var == 0)
-        {
-            return false;
-        }
-        // ], line 472
-        bra = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 473
-                if (!(I_word_len >= 4))
-                {
-                    return false;
-                }
-                // delete, line 473
-                slice_del();
-                break;
-            case 2:
-                // (, line 474
-                if (!(I_word_len >= 5))
-                {
-                    return false;
-                }
-                // delete, line 474
-                slice_del();
-                break;
-            case 3:
-                // (, line 475
-                if (!(I_word_len >= 6))
-                {
-                    return false;
-                }
-                // delete, line 475
-                slice_del();
-                break;
-        }
-        return true;
-    }
+private boolean r_Suffix_Noun_Step2b() {
+  ket = cursor;
+  if (find_among_b(a_13) == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  if (!(limit >= 5))
+  {
+    return false;
+  }
+  slice_del();
+  return true;
+}
 
-    private boolean r_Suffix_Verb_Step2a() {
-        int among_var;
-        // (, line 478
-        I_word_len = getCurrent().length();
-        // [, line 480
-        ket = cursor;
-        // substring, line 480
-        among_var = find_among_b(a_18, a_18.length);
-        if (among_var == 0)
+private boolean r_Suffix_Noun_Step2c1() {
+  ket = cursor;
+  if (find_among_b(a_14) == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  if (!(limit >= 4))
+  {
+    return false;
+  }
+  slice_del();
+  return true;
+}
+
+private boolean r_Suffix_Noun_Step2c2() {
+  ket = cursor;
+  if (find_among_b(a_15) == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  if (!(limit >= 4))
+  {
+    return false;
+  }
+  slice_del();
+  return true;
+}
+
+private boolean r_Suffix_Noun_Step3() {
+  ket = cursor;
+  if (find_among_b(a_16) == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  if (!(limit >= 3))
+  {
+    return false;
+  }
+  slice_del();
+  return true;
+}
+
+private boolean r_Suffix_Verb_Step1() {
+  int among_var;
+  ket = cursor;
+  among_var = find_among_b(a_17);
+  if (among_var == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  switch (among_var) {
+    case 1:
+      if (!(limit >= 4))
+      {
+        return false;
+      }
+      slice_del();
+      break;
+    case 2:
+      if (!(limit >= 5))
+      {
+        return false;
+      }
+      slice_del();
+      break;
+    case 3:
+      if (!(limit >= 6))
+      {
+        return false;
+      }
+      slice_del();
+      break;
+  }
+  return true;
+}
+
+private boolean r_Suffix_Verb_Step2a() {
+  int among_var;
+  ket = cursor;
+  among_var = find_among_b(a_18);
+  if (among_var == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  switch (among_var) {
+    case 1:
+      if (!(limit >= 4))
+      {
+        return false;
+      }
+      slice_del();
+      break;
+    case 2:
+      if (!(limit >= 5))
+      {
+        return false;
+      }
+      slice_del();
+      break;
+    case 3:
+      if (!(limit > 5))
+      {
+        return false;
+      }
+      slice_del();
+      break;
+    case 4:
+      if (!(limit >= 6))
+      {
+        return false;
+      }
+      slice_del();
+      break;
+  }
+  return true;
+}
+
+private boolean r_Suffix_Verb_Step2b() {
+  ket = cursor;
+  if (find_among_b(a_19) == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  if (!(limit >= 5))
+  {
+    return false;
+  }
+  slice_del();
+  return true;
+}
+
+private boolean r_Suffix_Verb_Step2c() {
+  int among_var;
+  ket = cursor;
+  among_var = find_among_b(a_20);
+  if (among_var == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  switch (among_var) {
+    case 1:
+      if (!(limit >= 4))
+      {
+        return false;
+      }
+      slice_del();
+      break;
+    case 2:
+      if (!(limit >= 6))
+      {
+        return false;
+      }
+      slice_del();
+      break;
+  }
+  return true;
+}
+
+private boolean r_Suffix_All_alef_maqsura() {
+  ket = cursor;
+  if (find_among_b(a_21) == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  slice_from("\u064A");
+  return true;
+}
+
+public boolean stem() {
+  B_is_noun = true;
+  B_is_verb = true;
+  B_is_defined = false;
+  int v_1 = cursor;
+  r_Checks1();
+  cursor = v_1;
+  r_Normalize_pre();
+  limit_backward = cursor;
+  cursor = limit;
+  int v_3 = limit - cursor;
+lab0: {
+lab1: {
+        int v_4 = limit - cursor;
+lab2: {
+        if (!(B_is_verb))
         {
-            return false;
-        }
-        // ], line 480
-        bra = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 481
-                if (!(I_word_len >= 4))
-                {
-                    return false;
-                }
-                // delete, line 481
-                slice_del();
-                break;
-            case 2:
-                // (, line 482
-                if (!(I_word_len >= 4))
-                {
-                    return false;
-                }
-                // delete, line 482
-                slice_del();
-                break;
-            case 3:
-                // (, line 483
-                if (!(I_word_len >= 5))
-                {
-                    return false;
-                }
-                // delete, line 483
-                slice_del();
-                break;
-            case 4:
-                // (, line 484
-                if (!(I_word_len > 5))
-                {
-                    return false;
-                }
-                // delete, line 484
-                slice_del();
-                break;
-            case 5:
-                // (, line 485
-                if (!(I_word_len >= 6))
-                {
-                    return false;
-                }
-                // delete, line 485
-                slice_del();
-                break;
+          break lab2;
         }
-        return true;
-    }
-
-    private boolean r_Suffix_Verb_Step2b() {
-        int among_var;
-        // (, line 489
-        I_word_len = getCurrent().length();
-        // [, line 491
-        ket = cursor;
-        // substring, line 491
-        among_var = find_among_b(a_19, a_19.length);
-        if (among_var == 0)
+lab3: {
+        int v_5 = limit - cursor;
+lab4: {
         {
-            return false;
+          int v_6 = 1;
+          while(true)
+          {
+            int v_7 = limit - cursor;
+lab5: {
+        if (!r_Suffix_Verb_Step1())
+        {
+          break lab5;
         }
-        // ], line 491
-        bra = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 492
-                if (!(I_word_len >= 5))
-                {
-                    return false;
-                }
-                // delete, line 492
-                slice_del();
-                break;
+        v_6--;
+        continue;
+}
+cursor = limit - v_7;
+break;
+          }
+if (v_6 > 0)
+{
+  break lab4;
+}
         }
-        return true;
-    }
-
-    private boolean r_Suffix_Verb_Step2c() {
-        int among_var;
-        // (, line 497
-        I_word_len = getCurrent().length();
-        // [, line 499
-        ket = cursor;
-        // substring, line 499
-        among_var = find_among_b(a_20, a_20.length);
-        if (among_var == 0)
+lab6: {
+        int v_8 = limit - cursor;
+lab7: {
+        if (!r_Suffix_Verb_Step2a())
         {
-            return false;
+          break lab7;
         }
-        // ], line 499
-        bra = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 500
-                if (!(I_word_len >= 4))
-                {
-                    return false;
-                }
-                // delete, line 500
-                slice_del();
-                break;
-            case 2:
-                // (, line 501
-                if (!(I_word_len >= 6))
-                {
-                    return false;
-                }
-                // delete, line 501
-                slice_del();
-                break;
-        }
-        return true;
-    }
-
-    private boolean r_Suffix_All_alef_maqsura() {
-        int among_var;
-        // (, line 505
-        I_word_len = getCurrent().length();
-        // [, line 507
-        ket = cursor;
-        // substring, line 507
-        among_var = find_among_b(a_21, a_21.length);
-        if (among_var == 0)
+        break lab6;
+}
+cursor = limit - v_8;
+lab8: {
+        if (!r_Suffix_Verb_Step2c())
         {
-            return false;
+          break lab8;
         }
-        // ], line 507
-        bra = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 508
-                // <-, line 508
-                slice_from("\u064A");
-                break;
+        break lab6;
+}
+cursor = limit - v_8;
+if (cursor <= limit_backward)
+{
+  break lab4;
+}
+cursor--;
+}
+break lab3;
+}
+cursor = limit - v_5;
+lab9: {
+        if (!r_Suffix_Verb_Step2b())
+        {
+          break lab9;
         }
-        return true;
-    }
-
-    public boolean stem() {
-        // (, line 515
-        // set is_noun, line 517
-        B_is_noun = true;
-        // set is_verb, line 518
-        B_is_verb = true;
-        // unset is_defined, line 519
-        B_is_defined = false;
-        // do, line 522
-        int v_1 = cursor;
-        lab0: do {
-            // call Checks1, line 522
-            if (!r_Checks1())
-            {
-                break lab0;
-            }
-        } while (false);
-        cursor = v_1;
-        // do, line 525
-        int v_2 = cursor;
-        lab1: do {
-            // call Normalize_pre, line 525
-            if (!r_Normalize_pre())
-            {
-                break lab1;
-            }
-        } while (false);
-        cursor = v_2;
-        // backwards, line 528
-        limit_backward = cursor;
-        cursor = limit;
-        // (, line 528
-        // do, line 530
-        int v_3 = limit - cursor;
-        lab2: do {
-            // (, line 530
-            // or, line 544
-            lab3: do {
-                int v_4 = limit - cursor;
-                lab4: do {
-                    // (, line 532
-                    // Boolean test is_verb, line 533
-                    if (!(B_is_verb))
-                    {
-                        break lab4;
-                    }
-                    // (, line 534
-                    // or, line 539
-                    lab5: do {
-                        int v_5 = limit - cursor;
-                        lab6: do {
-                            // (, line 535
-                            // (, line 536
-                            // atleast, line 536
-                            {
-                                int v_6 = 1;
-                                // atleast, line 536
-                                replab7: while(true)
-                                {
-                                    int v_7 = limit - cursor;
-                                    lab8: do {
-                                        // call Suffix_Verb_Step1, line 536
-                                        if (!r_Suffix_Verb_Step1())
-                                        {
-                                            break lab8;
-                                        }
-                                        v_6--;
-                                        continue replab7;
-                                    } while (false);
-                                    cursor = limit - v_7;
-                                    break replab7;
-                                }
-                                if (v_6 > 0)
-                                {
-                                    break lab6;
-                                }
-                            }
-                            // (, line 537
-                            // or, line 537
-                            lab9: do {
-                                int v_8 = limit - cursor;
-                                lab10: do {
-                                    // call Suffix_Verb_Step2a, line 537
-                                    if (!r_Suffix_Verb_Step2a())
-                                    {
-                                        break lab10;
-                                    }
-                                    break lab9;
-                                } while (false);
-                                cursor = limit - v_8;
-                                lab11: do {
-                                    // call Suffix_Verb_Step2c, line 537
-                                    if (!r_Suffix_Verb_Step2c())
-                                    {
-                                        break lab11;
-                                    }
-                                    break lab9;
-                                } while (false);
-                                cursor = limit - v_8;
-                                // next, line 537
-                                if (cursor <= limit_backward)
-                                {
-                                    break lab6;
-                                }
-                                cursor--;
-                            } while (false);
-                            break lab5;
-                        } while (false);
-                        cursor = limit - v_5;
-                        lab12: do {
-                            // call Suffix_Verb_Step2b, line 539
-                            if (!r_Suffix_Verb_Step2b())
-                            {
-                                break lab12;
-                            }
-                            break lab5;
-                        } while (false);
-                        cursor = limit - v_5;
-                        // call Suffix_Verb_Step2a, line 540
-                        if (!r_Suffix_Verb_Step2a())
-                        {
-                            break lab4;
-                        }
-                    } while (false);
-                    break lab3;
-                } while (false);
-                cursor = limit - v_4;
-                lab13: do {
-                    // (, line 544
-                    // Boolean test is_noun, line 545
-                    if (!(B_is_noun))
-                    {
-                        break lab13;
-                    }
-                    // (, line 546
-                    // try, line 548
-                    int v_9 = limit - cursor;
-                    lab14: do {
-                        // (, line 548
-                        // or, line 550
-                        lab15: do {
-                            int v_10 = limit - cursor;
-                            lab16: do {
-                                // call Suffix_Noun_Step2c2, line 549
-                                if (!r_Suffix_Noun_Step2c2())
-                                {
-                                    break lab16;
-                                }
-                                break lab15;
-                            } while (false);
-                            cursor = limit - v_10;
-                            lab17: do {
-                                // (, line 550
-                                // not, line 550
-                                lab18: do {
-                                    // Boolean test is_defined, line 550
-                                    if (!(B_is_defined))
-                                    {
-                                        break lab18;
-                                    }
-                                    break lab17;
-                                } while (false);
-                                // call Suffix_Noun_Step1a, line 550
-                                if (!r_Suffix_Noun_Step1a())
-                                {
-                                    break lab17;
-                                }
-                                // (, line 550
-                                // or, line 552
-                                lab19: do {
-                                    int v_12 = limit - cursor;
-                                    lab20: do {
-                                        // call Suffix_Noun_Step2a, line 551
-                                        if (!r_Suffix_Noun_Step2a())
-                                        {
-                                            break lab20;
-                                        }
-                                        break lab19;
-                                    } while (false);
-                                    cursor = limit - v_12;
-                                    lab21: do {
-                                        // call Suffix_Noun_Step2b, line 552
-                                        if (!r_Suffix_Noun_Step2b())
-                                        {
-                                            break lab21;
-                                        }
-                                        break lab19;
-                                    } while (false);
-                                    cursor = limit - v_12;
-                                    lab22: do {
-                                        // call Suffix_Noun_Step2c1, line 553
-                                        if (!r_Suffix_Noun_Step2c1())
-                                        {
-                                            break lab22;
-                                        }
-                                        break lab19;
-                                    } while (false);
-                                    cursor = limit - v_12;
-                                    // next, line 554
-                                    if (cursor <= limit_backward)
-                                    {
-                                        break lab17;
-                                    }
-                                    cursor--;
-                                } while (false);
-                                break lab15;
-                            } while (false);
-                            cursor = limit - v_10;
-                            lab23: do {
-                                // (, line 555
-                                // call Suffix_Noun_Step1b, line 555
-                                if (!r_Suffix_Noun_Step1b())
-                                {
-                                    break lab23;
-                                }
-                                // (, line 555
-                                // or, line 557
-                                lab24: do {
-                                    int v_13 = limit - cursor;
-                                    lab25: do {
-                                        // call Suffix_Noun_Step2a, line 556
-                                        if (!r_Suffix_Noun_Step2a())
-                                        {
-                                            break lab25;
-                                        }
-                                        break lab24;
-                                    } while (false);
-                                    cursor = limit - v_13;
-                                    lab26: do {
-                                        // call Suffix_Noun_Step2b, line 557
-                                        if (!r_Suffix_Noun_Step2b())
-                                        {
-                                            break lab26;
-                                        }
-                                        break lab24;
-                                    } while (false);
-                                    cursor = limit - v_13;
-                                    // call Suffix_Noun_Step2c1, line 558
-                                    if (!r_Suffix_Noun_Step2c1())
-                                    {
-                                        break lab23;
-                                    }
-                                } while (false);
-                                break lab15;
-                            } while (false);
-                            cursor = limit - v_10;
-                            lab27: do {
-                                // (, line 559
-                                // not, line 559
-                                lab28: do {
-                                    // Boolean test is_defined, line 559
-                                    if (!(B_is_defined))
-                                    {
-                                        break lab28;
-                                    }
-                                    break lab27;
-                                } while (false);
-                                // call Suffix_Noun_Step2a, line 559
-                                if (!r_Suffix_Noun_Step2a())
-                                {
-                                    break lab27;
-                                }
-                                break lab15;
-                            } while (false);
-                            cursor = limit - v_10;
-                            // (, line 560
-                            // call Suffix_Noun_Step2b, line 560
-                            if (!r_Suffix_Noun_Step2b())
-                            {
-                                cursor = limit - v_9;
-                                break lab14;
-                            }
-                        } while (false);
-                    } while (false);
-                    // call Suffix_Noun_Step3, line 562
-                    if (!r_Suffix_Noun_Step3())
-                    {
-                        break lab13;
-                    }
-                    break lab3;
-                } while (false);
-                cursor = limit - v_4;
-                // call Suffix_All_alef_maqsura, line 568
-                if (!r_Suffix_All_alef_maqsura())
-                {
-                    break lab2;
-                }
-            } while (false);
-        } while (false);
-        cursor = limit - v_3;
-        cursor = limit_backward;
-        // do, line 573
-        int v_15 = cursor;
-        lab29: do {
-            // (, line 573
-            // try, line 574
-            int v_16 = cursor;
-            lab30: do {
-                // call Prefix_Step1, line 574
-                if (!r_Prefix_Step1())
-                {
-                    cursor = v_16;
-                    break lab30;
-                }
-            } while (false);
-            // try, line 575
-            int v_17 = cursor;
-            lab31: do {
-                // call Prefix_Step2, line 575
-                if (!r_Prefix_Step2())
-                {
-                    cursor = v_17;
-                    break lab31;
-                }
-            } while (false);
-            // (, line 576
-            // or, line 577
-            lab32: do {
-                int v_18 = cursor;
-                lab33: do {
-                    // call Prefix_Step3a_Noun, line 576
-                    if (!r_Prefix_Step3a_Noun())
-                    {
-                        break lab33;
-                    }
-                    break lab32;
-                } while (false);
-                cursor = v_18;
-                lab34: do {
-                    // (, line 577
-                    // Boolean test is_noun, line 577
-                    if (!(B_is_noun))
-                    {
-                        break lab34;
-                    }
-                    // call Prefix_Step3b_Noun, line 577
-                    if (!r_Prefix_Step3b_Noun())
-                    {
-                        break lab34;
-                    }
-                    break lab32;
-                } while (false);
-                cursor = v_18;
-                // (, line 578
-                // Boolean test is_verb, line 578
-                if (!(B_is_verb))
-                {
-                    break lab29;
-                }
-                // try, line 578
-                int v_19 = cursor;
-                lab35: do {
-                    // call Prefix_Step3_Verb, line 578
-                    if (!r_Prefix_Step3_Verb())
-                    {
-                        cursor = v_19;
-                        break lab35;
-                    }
-                } while (false);
-                // call Prefix_Step4_Verb, line 578
-                if (!r_Prefix_Step4_Verb())
-                {
-                    break lab29;
-                }
-            } while (false);
-        } while (false);
-        cursor = v_15;
-        // do, line 583
-        int v_20 = cursor;
-        lab36: do {
-            // call Normalize_post, line 583
-            if (!r_Normalize_post())
-            {
-                break lab36;
-            }
-        } while (false);
-        cursor = v_20;
-        return true;
-    }
+        break lab3;
+}
+cursor = limit - v_5;
+if (!r_Suffix_Verb_Step2a())
+{
+  break lab2;
+}
+}
+break lab1;
+}
+cursor = limit - v_4;
+lab10: {
+         if (!(B_is_noun))
+         {
+           break lab10;
+         }
+         int v_9 = limit - cursor;
+lab11: {
+lab12: {
+         int v_10 = limit - cursor;
+lab13: {
+         if (!r_Suffix_Noun_Step2c2())
+         {
+           break lab13;
+         }
+         break lab12;
+}
+cursor = limit - v_10;
+lab14: {
+lab15: {
+         if (!(B_is_defined))
+         {
+           break lab15;
+         }
+         break lab14;
+}
+if (!r_Suffix_Noun_Step1a())
+{
+  break lab14;
+}
+lab16: {
+         int v_12 = limit - cursor;
+lab17: {
+         if (!r_Suffix_Noun_Step2a())
+         {
+           break lab17;
+         }
+         break lab16;
+}
+cursor = limit - v_12;
+lab18: {
+         if (!r_Suffix_Noun_Step2b())
+         {
+           break lab18;
+         }
+         break lab16;
+}
+cursor = limit - v_12;
+lab19: {
+         if (!r_Suffix_Noun_Step2c1())
+         {
+           break lab19;
+         }
+         break lab16;
+}
+cursor = limit - v_12;
+if (cursor <= limit_backward)
+{
+  break lab14;
+}
+cursor--;
+}
+break lab12;
+}
+cursor = limit - v_10;
+lab20: {
+         if (!r_Suffix_Noun_Step1b())
+         {
+           break lab20;
+         }
+lab21: {
+         int v_13 = limit - cursor;
+lab22: {
+         if (!r_Suffix_Noun_Step2a())
+         {
+           break lab22;
+         }
+         break lab21;
+}
+cursor = limit - v_13;
+lab23: {
+         if (!r_Suffix_Noun_Step2b())
+         {
+           break lab23;
+         }
+         break lab21;
+}
+cursor = limit - v_13;
+if (!r_Suffix_Noun_Step2c1())
+{
+  break lab20;
+}
+}
+break lab12;
+}
+cursor = limit - v_10;
+lab24: {
+lab25: {
+         if (!(B_is_defined))
+         {
+           break lab25;
+         }
+         break lab24;
+}
+if (!r_Suffix_Noun_Step2a())
+{
+  break lab24;
+}
+break lab12;
+}
+cursor = limit - v_10;
+if (!r_Suffix_Noun_Step2b())
+{
+  cursor = limit - v_9;
+  break lab11;
+}
+}
+}
+if (!r_Suffix_Noun_Step3())
+{
+  break lab10;
+}
+break lab1;
+}
+cursor = limit - v_4;
+if (!r_Suffix_All_alef_maqsura())
+{
+  break lab0;
+}
+}
+}
+cursor = limit - v_3;
+cursor = limit_backward;
+int v_15 = cursor;
+lab26: {
+         int v_16 = cursor;
+lab27: {
+         if (!r_Prefix_Step1())
+         {
+           cursor = v_16;
+           break lab27;
+         }
+}
+int v_17 = cursor;
+lab28: {
+         if (!r_Prefix_Step2())
+         {
+           cursor = v_17;
+           break lab28;
+         }
+}
+lab29: {
+         int v_18 = cursor;
+lab30: {
+         if (!r_Prefix_Step3a_Noun())
+         {
+           break lab30;
+         }
+         break lab29;
+}
+cursor = v_18;
+lab31: {
+         if (!(B_is_noun))
+         {
+           break lab31;
+         }
+         if (!r_Prefix_Step3b_Noun())
+         {
+           break lab31;
+         }
+         break lab29;
+}
+cursor = v_18;
+if (!(B_is_verb))
+{
+  break lab26;
+}
+int v_19 = cursor;
+lab32: {
+         if (!r_Prefix_Step3_Verb())
+         {
+           cursor = v_19;
+           break lab32;
+         }
+}
+if (!r_Prefix_Step4_Verb())
+{
+  break lab26;
+}
+}
+}
+cursor = v_15;
+r_Normalize_post();
+return true;
+}
 
-    public boolean equals( Object o ) {
-        return o instanceof ArabicStemmer;
-    }
+@Override
+public boolean equals( Object o ) {
+  return o instanceof ArabicStemmer;
+}
 
-    public int hashCode() {
-        return ArabicStemmer.class.getName().hashCode();
-    }
+@Override
+public int hashCode() {
+  return ArabicStemmer.class.getName().hashCode();
+}
 
 
 
 }
+
diff --git a/lucene/analysis/common/src/java/org/tartarus/snowball/ext/ArmenianStemmer.java b/lucene/analysis/common/src/java/org/tartarus/snowball/ext/ArmenianStemmer.java
index d11d859..552a980 100644
--- a/lucene/analysis/common/src/java/org/tartarus/snowball/ext/ArmenianStemmer.java
+++ b/lucene/analysis/common/src/java/org/tartarus/snowball/ext/ArmenianStemmer.java
@@ -1,517 +1,394 @@
-// This file was generated automatically by the Snowball to Java compiler
+// Generated by Snowball 2.0.0 - https://snowballstem.org/
 
 package org.tartarus.snowball.ext;
 
 import org.tartarus.snowball.Among;
-import org.tartarus.snowball.SnowballProgram;
 
- /**
-  * This class was automatically generated by a Snowball to Java compiler 
-  * It implements the stemming algorithm defined by a snowball script.
-  */
+/**
+ * This class implements the stemming algorithm defined by a snowball script.
+ * <p>
+ * Generated by Snowball 2.0.0 - https://snowballstem.org/
+ * </p>
+ */
+@SuppressWarnings("unused")
+public class ArmenianStemmer extends org.tartarus.snowball.SnowballStemmer {
 
-@SuppressWarnings("unused") public class ArmenianStemmer extends SnowballProgram {
+  private static final long serialVersionUID = 1L;
+  private static final java.lang.invoke.MethodHandles.Lookup methodObject = java.lang.invoke.MethodHandles.lookup();
 
-private static final long serialVersionUID = 1L;
+  private final static Among a_0[] = {
+    new Among("\u0580\u0578\u0580\u0564", -1, 1),
+    new Among("\u0565\u0580\u0578\u0580\u0564", 0, 1),
+    new Among("\u0561\u056C\u056B", -1, 1),
+    new Among("\u0561\u056F\u056B", -1, 1),
+    new Among("\u0578\u0580\u0561\u056F", -1, 1),
+    new Among("\u0565\u0572", -1, 1),
+    new Among("\u0561\u056F\u0561\u0576", -1, 1),
+    new Among("\u0561\u0580\u0561\u0576", -1, 1),
+    new Among("\u0565\u0576", -1, 1),
+    new Among("\u0565\u056F\u0565\u0576", 8, 1),
+    new Among("\u0565\u0580\u0565\u0576", 8, 1),
+    new Among("\u0578\u0580\u0567\u0576", -1, 1),
+    new Among("\u056B\u0576", -1, 1),
+    new Among("\u0563\u056B\u0576", 12, 1),
+    new Among("\u0578\u057E\u056B\u0576", 12, 1),
+    new Among("\u056C\u0561\u0575\u0576", -1, 1),
+    new Among("\u057E\u0578\u0582\u0576", -1, 1),
+    new Among("\u057A\u0565\u057D", -1, 1),
+    new Among("\u056B\u057E", -1, 1),
+    new Among("\u0561\u057F", -1, 1),
+    new Among("\u0561\u057E\u0565\u057F", -1, 1),
+    new Among("\u056F\u0578\u057F", -1, 1),
+    new Among("\u0562\u0561\u0580", -1, 1)
+  };
 
-        /* patched */ private static final java.lang.invoke.MethodHandles.Lookup methodObject = java.lang.invoke.MethodHandles.lookup();
+  private final static Among a_1[] = {
+    new Among("\u0561", -1, 1),
+    new Among("\u0561\u0581\u0561", 0, 1),
+    new Among("\u0565\u0581\u0561", 0, 1),
+    new Among("\u057E\u0565", -1, 1),
+    new Among("\u0561\u0581\u0580\u056B", -1, 1),
+    new Among("\u0561\u0581\u056B", -1, 1),
+    new Among("\u0565\u0581\u056B", -1, 1),
+    new Among("\u057E\u0565\u0581\u056B", 6, 1),
+    new Among("\u0561\u056C", -1, 1),
+    new Among("\u0568\u0561\u056C", 8, 1),
+    new Among("\u0561\u0576\u0561\u056C", 8, 1),
+    new Among("\u0565\u0576\u0561\u056C", 8, 1),
+    new Among("\u0561\u0581\u0576\u0561\u056C", 8, 1),
+    new Among("\u0565\u056C", -1, 1),
+    new Among("\u0568\u0565\u056C", 13, 1),
+    new Among("\u0576\u0565\u056C", 13, 1),
+    new Among("\u0581\u0576\u0565\u056C", 15, 1),
+    new Among("\u0565\u0581\u0576\u0565\u056C", 16, 1),
+    new Among("\u0579\u0565\u056C", 13, 1),
+    new Among("\u057E\u0565\u056C", 13, 1),
+    new Among("\u0561\u0581\u057E\u0565\u056C", 19, 1),
+    new Among("\u0565\u0581\u057E\u0565\u056C", 19, 1),
+    new Among("\u057F\u0565\u056C", 13, 1),
+    new Among("\u0561\u057F\u0565\u056C", 22, 1),
+    new Among("\u0578\u057F\u0565\u056C", 22, 1),
+    new Among("\u056F\u0578\u057F\u0565\u056C", 24, 1),
+    new Among("\u057E\u0561\u056E", -1, 1),
+    new Among("\u0578\u0582\u0574", -1, 1),
+    new Among("\u057E\u0578\u0582\u0574", 27, 1),
+    new Among("\u0561\u0576", -1, 1),
+    new Among("\u0581\u0561\u0576", 29, 1),
+    new Among("\u0561\u0581\u0561\u0576", 30, 1),
+    new Among("\u0561\u0581\u0580\u056B\u0576", -1, 1),
+    new Among("\u0561\u0581\u056B\u0576", -1, 1),
+    new Among("\u0565\u0581\u056B\u0576", -1, 1),
+    new Among("\u057E\u0565\u0581\u056B\u0576", 34, 1),
+    new Among("\u0561\u056C\u056B\u057D", -1, 1),
+    new Among("\u0565\u056C\u056B\u057D", -1, 1),
+    new Among("\u0561\u057E", -1, 1),
+    new Among("\u0561\u0581\u0561\u057E", 38, 1),
+    new Among("\u0565\u0581\u0561\u057E", 38, 1),
+    new Among("\u0561\u056C\u0578\u057E", -1, 1),
+    new Among("\u0565\u056C\u0578\u057E", -1, 1),
+    new Among("\u0561\u0580", -1, 1),
+    new Among("\u0561\u0581\u0561\u0580", 43, 1),
+    new Among("\u0565\u0581\u0561\u0580", 43, 1),
+    new Among("\u0561\u0581\u0580\u056B\u0580", -1, 1),
+    new Among("\u0561\u0581\u056B\u0580", -1, 1),
+    new Among("\u0565\u0581\u056B\u0580", -1, 1),
+    new Among("\u057E\u0565\u0581\u056B\u0580", 48, 1),
+    new Among("\u0561\u0581", -1, 1),
+    new Among("\u0565\u0581", -1, 1),
+    new Among("\u0561\u0581\u0580\u0565\u0581", 51, 1),
+    new Among("\u0561\u056C\u0578\u0582\u0581", -1, 1),
+    new Among("\u0565\u056C\u0578\u0582\u0581", -1, 1),
+    new Among("\u0561\u056C\u0578\u0582", -1, 1),
+    new Among("\u0565\u056C\u0578\u0582", -1, 1),
+    new Among("\u0561\u0584", -1, 1),
+    new Among("\u0581\u0561\u0584", 57, 1),
+    new Among("\u0561\u0581\u0561\u0584", 58, 1),
+    new Among("\u0561\u0581\u0580\u056B\u0584", -1, 1),
+    new Among("\u0561\u0581\u056B\u0584", -1, 1),
+    new Among("\u0565\u0581\u056B\u0584", -1, 1),
+    new Among("\u057E\u0565\u0581\u056B\u0584", 62, 1),
+    new Among("\u0561\u0576\u0584", -1, 1),
+    new Among("\u0581\u0561\u0576\u0584", 64, 1),
+    new Among("\u0561\u0581\u0561\u0576\u0584", 65, 1),
+    new Among("\u0561\u0581\u0580\u056B\u0576\u0584", -1, 1),
+    new Among("\u0561\u0581\u056B\u0576\u0584", -1, 1),
+    new Among("\u0565\u0581\u056B\u0576\u0584", -1, 1),
+    new Among("\u057E\u0565\u0581\u056B\u0576\u0584", 69, 1)
+  };
 
-                private final static Among a_0[] = {
-                    new Among ( "\u0580\u0578\u0580\u0564", -1, 1, "", methodObject ),
-                    new Among ( "\u0565\u0580\u0578\u0580\u0564", 0, 1, "", methodObject ),
-                    new Among ( "\u0561\u056C\u056B", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u056F\u056B", -1, 1, "", methodObject ),
-                    new Among ( "\u0578\u0580\u0561\u056F", -1, 1, "", methodObject ),
-                    new Among ( "\u0565\u0572", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u056F\u0561\u0576", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0580\u0561\u0576", -1, 1, "", methodObject ),
-                    new Among ( "\u0565\u0576", -1, 1, "", methodObject ),
-                    new Among ( "\u0565\u056F\u0565\u0576", 8, 1, "", methodObject ),
-                    new Among ( "\u0565\u0580\u0565\u0576", 8, 1, "", methodObject ),
-                    new Among ( "\u0578\u0580\u0567\u0576", -1, 1, "", methodObject ),
-                    new Among ( "\u056B\u0576", -1, 1, "", methodObject ),
-                    new Among ( "\u0563\u056B\u0576", 12, 1, "", methodObject ),
-                    new Among ( "\u0578\u057E\u056B\u0576", 12, 1, "", methodObject ),
-                    new Among ( "\u056C\u0561\u0575\u0576", -1, 1, "", methodObject ),
-                    new Among ( "\u057E\u0578\u0582\u0576", -1, 1, "", methodObject ),
-                    new Among ( "\u057A\u0565\u057D", -1, 1, "", methodObject ),
-                    new Among ( "\u056B\u057E", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u057F", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u057E\u0565\u057F", -1, 1, "", methodObject ),
-                    new Among ( "\u056F\u0578\u057F", -1, 1, "", methodObject ),
-                    new Among ( "\u0562\u0561\u0580", -1, 1, "", methodObject )
-                };
+  private final static Among a_2[] = {
+    new Among("\u0578\u0580\u0564", -1, 1),
+    new Among("\u0578\u0582\u0575\u0569", -1, 1),
+    new Among("\u0578\u0582\u0570\u056B", -1, 1),
+    new Among("\u0581\u056B", -1, 1),
+    new Among("\u056B\u056C", -1, 1),
+    new Among("\u0561\u056F", -1, 1),
+    new Among("\u0575\u0561\u056F", 5, 1),
+    new Among("\u0561\u0576\u0561\u056F", 5, 1),
+    new Among("\u056B\u056F", -1, 1),
+    new Among("\u0578\u0582\u056F", -1, 1),
+    new Among("\u0561\u0576", -1, 1),
+    new Among("\u057A\u0561\u0576", 10, 1),
+    new Among("\u057D\u057F\u0561\u0576", 10, 1),
+    new Among("\u0561\u0580\u0561\u0576", 10, 1),
+    new Among("\u0565\u0572\u0567\u0576", -1, 1),
+    new Among("\u0575\u0578\u0582\u0576", -1, 1),
+    new Among("\u0578\u0582\u0569\u0575\u0578\u0582\u0576", 15, 1),
+    new Among("\u0561\u056E\u0578", -1, 1),
+    new Among("\u056B\u0579", -1, 1),
+    new Among("\u0578\u0582\u057D", -1, 1),
+    new Among("\u0578\u0582\u057D\u057F", -1, 1),
+    new Among("\u0563\u0561\u0580", -1, 1),
+    new Among("\u057E\u0578\u0580", -1, 1),
+    new Among("\u0561\u057E\u0578\u0580", 22, 1),
+    new Among("\u0578\u0581", -1, 1),
+    new Among("\u0561\u0576\u0585\u0581", -1, 1),
+    new Among("\u0578\u0582", -1, 1),
+    new Among("\u0584", -1, 1),
+    new Among("\u0579\u0565\u0584", 27, 1),
+    new Among("\u056B\u0584", 27, 1),
+    new Among("\u0561\u056C\u056B\u0584", 29, 1),
+    new Among("\u0561\u0576\u056B\u0584", 29, 1),
+    new Among("\u057E\u0561\u056E\u0584", 27, 1),
+    new Among("\u0578\u0582\u0575\u0584", 27, 1),
+    new Among("\u0565\u0576\u0584", 27, 1),
+    new Among("\u0578\u0576\u0584", 27, 1),
+    new Among("\u0578\u0582\u0576\u0584", 27, 1),
+    new Among("\u0574\u0578\u0582\u0576\u0584", 36, 1),
+    new Among("\u056B\u0579\u0584", 27, 1),
+    new Among("\u0561\u0580\u0584", 27, 1)
+  };
 
-                private final static Among a_1[] = {
-                    new Among ( "\u0561", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u0561", 0, 1, "", methodObject ),
-                    new Among ( "\u0565\u0581\u0561", 0, 1, "", methodObject ),
-                    new Among ( "\u057E\u0565", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u0580\u056B", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u056B", -1, 1, "", methodObject ),
-                    new Among ( "\u0565\u0581\u056B", -1, 1, "", methodObject ),
-                    new Among ( "\u057E\u0565\u0581\u056B", 6, 1, "", methodObject ),
-                    new Among ( "\u0561\u056C", -1, 1, "", methodObject ),
-                    new Among ( "\u0568\u0561\u056C", 8, 1, "", methodObject ),
-                    new Among ( "\u0561\u0576\u0561\u056C", 8, 1, "", methodObject ),
-                    new Among ( "\u0565\u0576\u0561\u056C", 8, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u0576\u0561\u056C", 8, 1, "", methodObject ),
-                    new Among ( "\u0565\u056C", -1, 1, "", methodObject ),
-                    new Among ( "\u0568\u0565\u056C", 13, 1, "", methodObject ),
-                    new Among ( "\u0576\u0565\u056C", 13, 1, "", methodObject ),
-                    new Among ( "\u0581\u0576\u0565\u056C", 15, 1, "", methodObject ),
-                    new Among ( "\u0565\u0581\u0576\u0565\u056C", 16, 1, "", methodObject ),
-                    new Among ( "\u0579\u0565\u056C", 13, 1, "", methodObject ),
-                    new Among ( "\u057E\u0565\u056C", 13, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u057E\u0565\u056C", 19, 1, "", methodObject ),
-                    new Among ( "\u0565\u0581\u057E\u0565\u056C", 19, 1, "", methodObject ),
-                    new Among ( "\u057F\u0565\u056C", 13, 1, "", methodObject ),
-                    new Among ( "\u0561\u057F\u0565\u056C", 22, 1, "", methodObject ),
-                    new Among ( "\u0578\u057F\u0565\u056C", 22, 1, "", methodObject ),
-                    new Among ( "\u056F\u0578\u057F\u0565\u056C", 24, 1, "", methodObject ),
-                    new Among ( "\u057E\u0561\u056E", -1, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u0574", -1, 1, "", methodObject ),
-                    new Among ( "\u057E\u0578\u0582\u0574", 27, 1, "", methodObject ),
-                    new Among ( "\u0561\u0576", -1, 1, "", methodObject ),
-                    new Among ( "\u0581\u0561\u0576", 29, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u0561\u0576", 30, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u0580\u056B\u0576", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u056B\u0576", -1, 1, "", methodObject ),
-                    new Among ( "\u0565\u0581\u056B\u0576", -1, 1, "", methodObject ),
-                    new Among ( "\u057E\u0565\u0581\u056B\u0576", 34, 1, "", methodObject ),
-                    new Among ( "\u0561\u056C\u056B\u057D", -1, 1, "", methodObject ),
-                    new Among ( "\u0565\u056C\u056B\u057D", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u057E", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u0561\u057E", 38, 1, "", methodObject ),
-                    new Among ( "\u0565\u0581\u0561\u057E", 38, 1, "", methodObject ),
-                    new Among ( "\u0561\u056C\u0578\u057E", -1, 1, "", methodObject ),
-                    new Among ( "\u0565\u056C\u0578\u057E", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0580", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u0561\u0580", 43, 1, "", methodObject ),
-                    new Among ( "\u0565\u0581\u0561\u0580", 43, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u0580\u056B\u0580", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u056B\u0580", -1, 1, "", methodObject ),
-                    new Among ( "\u0565\u0581\u056B\u0580", -1, 1, "", methodObject ),
-                    new Among ( "\u057E\u0565\u0581\u056B\u0580", 48, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581", -1, 1, "", methodObject ),
-                    new Among ( "\u0565\u0581", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u0580\u0565\u0581", 51, 1, "", methodObject ),
-                    new Among ( "\u0561\u056C\u0578\u0582\u0581", -1, 1, "", methodObject ),
-                    new Among ( "\u0565\u056C\u0578\u0582\u0581", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u056C\u0578\u0582", -1, 1, "", methodObject ),
-                    new Among ( "\u0565\u056C\u0578\u0582", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0584", -1, 1, "", methodObject ),
-                    new Among ( "\u0581\u0561\u0584", 57, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u0561\u0584", 58, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u0580\u056B\u0584", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u056B\u0584", -1, 1, "", methodObject ),
-                    new Among ( "\u0565\u0581\u056B\u0584", -1, 1, "", methodObject ),
-                    new Among ( "\u057E\u0565\u0581\u056B\u0584", 62, 1, "", methodObject ),
-                    new Among ( "\u0561\u0576\u0584", -1, 1, "", methodObject ),
-                    new Among ( "\u0581\u0561\u0576\u0584", 64, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u0561\u0576\u0584", 65, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u0580\u056B\u0576\u0584", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u056B\u0576\u0584", -1, 1, "", methodObject ),
-                    new Among ( "\u0565\u0581\u056B\u0576\u0584", -1, 1, "", methodObject ),
-                    new Among ( "\u057E\u0565\u0581\u056B\u0576\u0584", 69, 1, "", methodObject )
-                };
+  private final static Among a_3[] = {
+    new Among("\u057D\u0561", -1, 1),
+    new Among("\u057E\u0561", -1, 1),
+    new Among("\u0561\u0574\u0562", -1, 1),
+    new Among("\u0564", -1, 1),
+    new Among("\u0561\u0576\u0564", 3, 1),
+    new Among("\u0578\u0582\u0569\u0575\u0561\u0576\u0564", 4, 1),
+    new Among("\u057E\u0561\u0576\u0564", 4, 1),
+    new Among("\u0578\u057B\u0564", 3, 1),
+    new Among("\u0565\u0580\u0564", 3, 1),
+    new Among("\u0576\u0565\u0580\u0564", 8, 1),
+    new Among("\u0578\u0582\u0564", 3, 1),
+    new Among("\u0568", -1, 1),
+    new Among("\u0561\u0576\u0568", 11, 1),
+    new Among("\u0578\u0582\u0569\u0575\u0561\u0576\u0568", 12, 1),
+    new Among("\u057E\u0561\u0576\u0568", 12, 1),
+    new Among("\u0578\u057B\u0568", 11, 1),
+    new Among("\u0565\u0580\u0568", 11, 1),
+    new Among("\u0576\u0565\u0580\u0568", 16, 1),
+    new Among("\u056B", -1, 1),
+    new Among("\u057E\u056B", 18, 1),
+    new Among("\u0565\u0580\u056B", 18, 1),
+    new Among("\u0576\u0565\u0580\u056B", 20, 1),
+    new Among("\u0561\u0576\u0578\u0582\u0574", -1, 1),
+    new Among("\u0565\u0580\u0578\u0582\u0574", -1, 1),
+    new Among("\u0576\u0565\u0580\u0578\u0582\u0574", 23, 1),
+    new Among("\u0576", -1, 1),
+    new Among("\u0561\u0576", 25, 1),
+    new Among("\u0578\u0582\u0569\u0575\u0561\u0576", 26, 1),
+    new Among("\u057E\u0561\u0576", 26, 1),
+    new Among("\u056B\u0576", 25, 1),
+    new Among("\u0565\u0580\u056B\u0576", 29, 1),
+    new Among("\u0576\u0565\u0580\u056B\u0576", 30, 1),
+    new Among("\u0578\u0582\u0569\u0575\u0561\u0576\u0576", 25, 1),
+    new Among("\u0565\u0580\u0576", 25, 1),
+    new Among("\u0576\u0565\u0580\u0576", 33, 1),
+    new Among("\u0578\u0582\u0576", 25, 1),
+    new Among("\u0578\u057B", -1, 1),
+    new Among("\u0578\u0582\u0569\u0575\u0561\u0576\u057D", -1, 1),
+    new Among("\u057E\u0561\u0576\u057D", -1, 1),
+    new Among("\u0578\u057B\u057D", -1, 1),
+    new Among("\u0578\u057E", -1, 1),
+    new Among("\u0561\u0576\u0578\u057E", 40, 1),
+    new Among("\u057E\u0578\u057E", 40, 1),
+    new Among("\u0565\u0580\u0578\u057E", 40, 1),
+    new Among("\u0576\u0565\u0580\u0578\u057E", 43, 1),
+    new Among("\u0565\u0580", -1, 1),
+    new Among("\u0576\u0565\u0580", 45, 1),
+    new Among("\u0581", -1, 1),
+    new Among("\u056B\u0581", 47, 1),
+    new Among("\u057E\u0561\u0576\u056B\u0581", 48, 1),
+    new Among("\u0578\u057B\u056B\u0581", 48, 1),
+    new Among("\u057E\u056B\u0581", 48, 1),
+    new Among("\u0565\u0580\u056B\u0581", 48, 1),
+    new Among("\u0576\u0565\u0580\u056B\u0581", 52, 1),
+    new Among("\u0581\u056B\u0581", 48, 1),
+    new Among("\u0578\u0581", 47, 1),
+    new Among("\u0578\u0582\u0581", 47, 1)
+  };
 
-                private final static Among a_2[] = {
-                    new Among ( "\u0578\u0580\u0564", -1, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u0575\u0569", -1, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u0570\u056B", -1, 1, "", methodObject ),
-                    new Among ( "\u0581\u056B", -1, 1, "", methodObject ),
-                    new Among ( "\u056B\u056C", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u056F", -1, 1, "", methodObject ),
-                    new Among ( "\u0575\u0561\u056F", 5, 1, "", methodObject ),
-                    new Among ( "\u0561\u0576\u0561\u056F", 5, 1, "", methodObject ),
-                    new Among ( "\u056B\u056F", -1, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u056F", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0576", -1, 1, "", methodObject ),
-                    new Among ( "\u057A\u0561\u0576", 10, 1, "", methodObject ),
-                    new Among ( "\u057D\u057F\u0561\u0576", 10, 1, "", methodObject ),
-                    new Among ( "\u0561\u0580\u0561\u0576", 10, 1, "", methodObject ),
-                    new Among ( "\u0565\u0572\u0567\u0576", -1, 1, "", methodObject ),
-                    new Among ( "\u0575\u0578\u0582\u0576", -1, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u0569\u0575\u0578\u0582\u0576", 15, 1, "", methodObject ),
-                    new Among ( "\u0561\u056E\u0578", -1, 1, "", methodObject ),
-                    new Among ( "\u056B\u0579", -1, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u057D", -1, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u057D\u057F", -1, 1, "", methodObject ),
-                    new Among ( "\u0563\u0561\u0580", -1, 1, "", methodObject ),
-                    new Among ( "\u057E\u0578\u0580", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u057E\u0578\u0580", 22, 1, "", methodObject ),
-                    new Among ( "\u0578\u0581", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0576\u0585\u0581", -1, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582", -1, 1, "", methodObject ),
-                    new Among ( "\u0584", -1, 1, "", methodObject ),
-                    new Among ( "\u0579\u0565\u0584", 27, 1, "", methodObject ),
-                    new Among ( "\u056B\u0584", 27, 1, "", methodObject ),
-                    new Among ( "\u0561\u056C\u056B\u0584", 29, 1, "", methodObject ),
-                    new Among ( "\u0561\u0576\u056B\u0584", 29, 1, "", methodObject ),
-                    new Among ( "\u057E\u0561\u056E\u0584", 27, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u0575\u0584", 27, 1, "", methodObject ),
-                    new Among ( "\u0565\u0576\u0584", 27, 1, "", methodObject ),
-                    new Among ( "\u0578\u0576\u0584", 27, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u0576\u0584", 27, 1, "", methodObject ),
-                    new Among ( "\u0574\u0578\u0582\u0576\u0584", 36, 1, "", methodObject ),
-                    new Among ( "\u056B\u0579\u0584", 27, 1, "", methodObject ),
-                    new Among ( "\u0561\u0580\u0584", 27, 1, "", methodObject )
-                };
+  private static final char g_v[] = {209, 4, 128, 0, 18 };
 
-                private final static Among a_3[] = {
-                    new Among ( "\u057D\u0561", -1, 1, "", methodObject ),
-                    new Among ( "\u057E\u0561", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0574\u0562", -1, 1, "", methodObject ),
-                    new Among ( "\u0564", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0576\u0564", 3, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u0569\u0575\u0561\u0576\u0564", 4, 1, "", methodObject ),
-                    new Among ( "\u057E\u0561\u0576\u0564", 4, 1, "", methodObject ),
-                    new Among ( "\u0578\u057B\u0564", 3, 1, "", methodObject ),
-                    new Among ( "\u0565\u0580\u0564", 3, 1, "", methodObject ),
-                    new Among ( "\u0576\u0565\u0580\u0564", 8, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u0564", 3, 1, "", methodObject ),
-                    new Among ( "\u0568", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0576\u0568", 11, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u0569\u0575\u0561\u0576\u0568", 12, 1, "", methodObject ),
-                    new Among ( "\u057E\u0561\u0576\u0568", 12, 1, "", methodObject ),
-                    new Among ( "\u0578\u057B\u0568", 11, 1, "", methodObject ),
-                    new Among ( "\u0565\u0580\u0568", 11, 1, "", methodObject ),
-                    new Among ( "\u0576\u0565\u0580\u0568", 16, 1, "", methodObject ),
-                    new Among ( "\u056B", -1, 1, "", methodObject ),
-                    new Among ( "\u057E\u056B", 18, 1, "", methodObject ),
-                    new Among ( "\u0565\u0580\u056B", 18, 1, "", methodObject ),
-                    new Among ( "\u0576\u0565\u0580\u056B", 20, 1, "", methodObject ),
-                    new Among ( "\u0561\u0576\u0578\u0582\u0574", -1, 1, "", methodObject ),
-                    new Among ( "\u0565\u0580\u0578\u0582\u0574", -1, 1, "", methodObject ),
-                    new Among ( "\u0576\u0565\u0580\u0578\u0582\u0574", 23, 1, "", methodObject ),
-                    new Among ( "\u0576", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0576", 25, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u0569\u0575\u0561\u0576", 26, 1, "", methodObject ),
-                    new Among ( "\u057E\u0561\u0576", 26, 1, "", methodObject ),
-                    new Among ( "\u056B\u0576", 25, 1, "", methodObject ),
-                    new Among ( "\u0565\u0580\u056B\u0576", 29, 1, "", methodObject ),
-                    new Among ( "\u0576\u0565\u0580\u056B\u0576", 30, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u0569\u0575\u0561\u0576\u0576", 25, 1, "", methodObject ),
-                    new Among ( "\u0565\u0580\u0576", 25, 1, "", methodObject ),
-                    new Among ( "\u0576\u0565\u0580\u0576", 33, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u0576", 25, 1, "", methodObject ),
-                    new Among ( "\u0578\u057B", -1, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u0569\u0575\u0561\u0576\u057D", -1, 1, "", methodObject ),
-                    new Among ( "\u057E\u0561\u0576\u057D", -1, 1, "", methodObject ),
-                    new Among ( "\u0578\u057B\u057D", -1, 1, "", methodObject ),
-                    new Among ( "\u0578\u057E", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0576\u0578\u057E", 40, 1, "", methodObject ),
-                    new Among ( "\u057E\u0578\u057E", 40, 1, "", methodObject ),
-                    new Among ( "\u0565\u0580\u0578\u057E", 40, 1, "", methodObject ),
-                    new Among ( "\u0576\u0565\u0580\u0578\u057E", 43, 1, "", methodObject ),
-                    new Among ( "\u0565\u0580", -1, 1, "", methodObject ),
-                    new Among ( "\u0576\u0565\u0580", 45, 1, "", methodObject ),
-                    new Among ( "\u0581", -1, 1, "", methodObject ),
-                    new Among ( "\u056B\u0581", 47, 1, "", methodObject ),
-                    new Among ( "\u057E\u0561\u0576\u056B\u0581", 48, 1, "", methodObject ),
-                    new Among ( "\u0578\u057B\u056B\u0581", 48, 1, "", methodObject ),
-                    new Among ( "\u057E\u056B\u0581", 48, 1, "", methodObject ),
-                    new Among ( "\u0565\u0580\u056B\u0581", 48, 1, "", methodObject ),
-                    new Among ( "\u0576\u0565\u0580\u056B\u0581", 52, 1, "", methodObject ),
-                    new Among ( "\u0581\u056B\u0581", 48, 1, "", methodObject ),
-                    new Among ( "\u0578\u0581", 47, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u0581", 47, 1, "", methodObject )
-                };
+  private int I_p2;
+  private int I_pV;
 
-                private static final char g_v[] = {209, 4, 128, 0, 18 };
 
-        private int I_p2;
-        private int I_pV;
-
-                private void copy_from(ArmenianStemmer other) {
-                    I_p2 = other.I_p2;
-                    I_pV = other.I_pV;
-                    super.copy_from(other);
-                }
-
-                private boolean r_mark_regions() {
-            int v_1;
-                    // (, line 58
-                    I_pV = limit;
-                    I_p2 = limit;
-                    // do, line 62
-                    v_1 = cursor;
-                    lab0: do {
-                        // (, line 62
-                        // gopast, line 63
-                        golab1: while(true)
-                        {
-                            lab2: do {
-                                if (!(in_grouping(g_v, 1377, 1413)))
-                                {
-                                    break lab2;
-                                }
-                                break golab1;
-                            } while (false);
-                            if (cursor >= limit)
-                            {
-                                break lab0;
-                            }
-                            cursor++;
-                        }
-                        // setmark pV, line 63
-                        I_pV = cursor;
-                        // gopast, line 63
-                        golab3: while(true)
-                        {
-                            lab4: do {
-                                if (!(out_grouping(g_v, 1377, 1413)))
-                                {
-                                    break lab4;
-                                }
-                                break golab3;
-                            } while (false);
-                            if (cursor >= limit)
-                            {
-                                break lab0;
-                            }
-                            cursor++;
-                        }
-                        // gopast, line 64
-                        golab5: while(true)
-                        {
-                            lab6: do {
-                                if (!(in_grouping(g_v, 1377, 1413)))
-                                {
-                                    break lab6;
-                                }
-                                break golab5;
-                            } while (false);
-                            if (cursor >= limit)
-                            {
-                                break lab0;
-                            }
-                            cursor++;
-                        }
-                        // gopast, line 64
-                        golab7: while(true)
-                        {
-                            lab8: do {
-                                if (!(out_grouping(g_v, 1377, 1413)))
-                                {
-                                    break lab8;
-                                }
-                                break golab7;
-                            } while (false);
-                            if (cursor >= limit)
-                            {
-                                break lab0;
-                            }
-                            cursor++;
-                        }
-                        // setmark p2, line 64
-                        I_p2 = cursor;
-                    } while (false);
-                    cursor = v_1;
-                    return true;
-                }
+  private boolean r_mark_regions() {
+    I_pV = limit;
+    I_p2 = limit;
+    int v_1 = cursor;
+lab0: {
+golab1: while(true)
+        {
+lab2: {
+        if (!(in_grouping(g_v, 1377, 1413)))
+        {
+          break lab2;
+        }
+        break golab1;
+}
+if (cursor >= limit)
+{
+  break lab0;
+}
+cursor++;
+        }
+I_pV = cursor;
+golab3: while(true)
+{
+lab4: {
+        if (!(out_grouping(g_v, 1377, 1413)))
+        {
+          break lab4;
+        }
+        break golab3;
+}
+if (cursor >= limit)
+{
+  break lab0;
+}
+cursor++;
+}
+golab5: while(true)
+{
+lab6: {
+        if (!(in_grouping(g_v, 1377, 1413)))
+        {
+          break lab6;
+        }
+        break golab5;
+}
+if (cursor >= limit)
+{
+  break lab0;
+}
+cursor++;
+}
+golab7: while(true)
+{
+lab8: {
+        if (!(out_grouping(g_v, 1377, 1413)))
+        {
+          break lab8;
+        }
+        break golab7;
+}
+if (cursor >= limit)
+{
+  break lab0;
+}
+cursor++;
+}
+I_p2 = cursor;
+}
+cursor = v_1;
+return true;
+  }
 
-                private boolean r_R2() {
-                    if (!(I_p2 <= cursor))
-                    {
-                        return false;
-                    }
-                    return true;
-                }
+private boolean r_R2() {
+  if (!(I_p2 <= cursor))
+  {
+    return false;
+  }
+  return true;
+}
 
-                private boolean r_adjective() {
-            int among_var;
-                    // (, line 72
-                    // [, line 73
-                    ket = cursor;
-                    // substring, line 73
-                    among_var = find_among_b(a_0, 23);
-                    if (among_var == 0)
-                    {
-                        return false;
-                    }
-                    // ], line 73
-                    bra = cursor;
-                    switch(among_var) {
-                        case 0:
-                            return false;
-                        case 1:
-                            // (, line 98
-                            // delete, line 98
-                            slice_del();
-                            break;
-                    }
-                    return true;
-                }
+private boolean r_adjective() {
+  ket = cursor;
+  if (find_among_b(a_0) == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  slice_del();
+  return true;
+}
 
-                private boolean r_verb() {
-            int among_var;
-                    // (, line 102
-                    // [, line 103
-                    ket = cursor;
-                    // substring, line 103
-                    among_var = find_among_b(a_1, 71);
-                    if (among_var == 0)
-                    {
-                        return false;
-                    }
-                    // ], line 103
-                    bra = cursor;
-                    switch(among_var) {
-                        case 0:
-                            return false;
-                        case 1:
-                            // (, line 176
-                            // delete, line 176
-                            slice_del();
-                            break;
-                    }
-                    return true;
-                }
+private boolean r_verb() {
+  ket = cursor;
+  if (find_among_b(a_1) == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  slice_del();
+  return true;
+}
 
-                private boolean r_noun() {
-            int among_var;
-                    // (, line 180
-                    // [, line 181
-                    ket = cursor;
-                    // substring, line 181
-                    among_var = find_among_b(a_2, 40);
-                    if (among_var == 0)
-                    {
-                        return false;
-                    }
-                    // ], line 181
-                    bra = cursor;
-                    switch(among_var) {
-                        case 0:
-                            return false;
-                        case 1:
-                            // (, line 223
-                            // delete, line 223
-                            slice_del();
-                            break;
-                    }
-                    return true;
-                }
+private boolean r_noun() {
+  ket = cursor;
+  if (find_among_b(a_2) == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  slice_del();
+  return true;
+}
 
-                private boolean r_ending() {
-            int among_var;
-                    // (, line 227
-                    // [, line 228
-                    ket = cursor;
-                    // substring, line 228
-                    among_var = find_among_b(a_3, 57);
-                    if (among_var == 0)
-                    {
-                        return false;
-                    }
-                    // ], line 228
-                    bra = cursor;
-                    // call R2, line 228
-                    if (!r_R2())
-                    {
-                        return false;
-                    }
-                    switch(among_var) {
-                        case 0:
-                            return false;
-                        case 1:
-                            // (, line 287
-                            // delete, line 287
-                            slice_del();
-                            break;
-                    }
-                    return true;
-                }
+private boolean r_ending() {
+  ket = cursor;
+  if (find_among_b(a_3) == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  if (!r_R2())
+  {
+    return false;
+  }
+  slice_del();
+  return true;
+}
 
-                @Override
-                public boolean stem() {
-            int v_1;
-            int v_2;
-            int v_3;
-            int v_4;
-            int v_5;
-            int v_6;
-            int v_7;
-                    // (, line 292
-                    // do, line 294
-                    v_1 = cursor;
-                    lab0: do {
-                        // call mark_regions, line 294
-                        if (!r_mark_regions())
-                        {
-                            break lab0;
-                        }
-                    } while (false);
-                    cursor = v_1;
-                    // backwards, line 295
-                    limit_backward = cursor; cursor = limit;
-                    // setlimit, line 295
-                    v_2 = limit - cursor;
-                    // tomark, line 295
-                    if (cursor < I_pV)
-                    {
-                        return false;
-                    }
-                    cursor = I_pV;
-                    v_3 = limit_backward;
-                    limit_backward = cursor;
-                    cursor = limit - v_2;
-                    // (, line 295
-                    // do, line 296
-                    v_4 = limit - cursor;
-                    lab1: do {
-                        // call ending, line 296
-                        if (!r_ending())
-                        {
-                            break lab1;
-                        }
-                    } while (false);
-                    cursor = limit - v_4;
-                    // do, line 297
-                    v_5 = limit - cursor;
-                    lab2: do {
-                        // call verb, line 297
-                        if (!r_verb())
-                        {
-                            break lab2;
-                        }
-                    } while (false);
-                    cursor = limit - v_5;
-                    // do, line 298
-                    v_6 = limit - cursor;
-                    lab3: do {
-                        // call adjective, line 298
-                        if (!r_adjective())
-                        {
-                            break lab3;
-                        }
-                    } while (false);
-                    cursor = limit - v_6;
-                    // do, line 299
-                    v_7 = limit - cursor;
-                    lab4: do {
-                        // call noun, line 299
-                        if (!r_noun())
-                        {
-                            break lab4;
-                        }
-                    } while (false);
-                    cursor = limit - v_7;
-                    limit_backward = v_3;
-                    cursor = limit_backward;                    return true;
-                }
+public boolean stem() {
+  r_mark_regions();
+  limit_backward = cursor;
+  cursor = limit;
+  if (cursor < I_pV)
+  {
+    return false;
+  }
+  int v_3 = limit_backward;
+  limit_backward = I_pV;
+  int v_4 = limit - cursor;
+  r_ending();
+  cursor = limit - v_4;
+  int v_5 = limit - cursor;
+  r_verb();
+  cursor = limit - v_5;
+  int v_6 = limit - cursor;
+  r_adjective();
+  cursor = limit - v_6;
+  int v_7 = limit - cursor;
+  r_noun();
+  cursor = limit - v_7;
+  limit_backward = v_3;
+  cursor = limit_backward;
+  return true;
+}
 
-        @Override
-        public boolean equals( Object o ) {
-            return o instanceof ArmenianStemmer;
-        }
+@Override
+public boolean equals( Object o ) {
+  return o instanceof ArmenianStemmer;
+}
 
-        @Override
-        public int hashCode() {
-            return ArmenianStemmer.class.getName().hashCode();
-        }
+@Override
+public int hashCode() {
+  return ArmenianStemmer.class.getName().hashCode();
+}
 
 
 
diff --git a/lucene/analysis/common/src/java/org/tartarus/snowball/ext/BasqueStemmer.java b/lucene/analysis/common/src/java/org/tartarus/snowball/ext/BasqueStemmer.java
index ce6927d..2152128 100644
--- a/lucene/analysis/common/src/java/org/tartarus/snowball/ext/BasqueStemmer.java
+++ b/lucene/analysis/common/src/java/org/tartarus/snowball/ext/BasqueStemmer.java
@@ -1,940 +1,820 @@
-// This file was generated automatically by the Snowball to Java compiler
+// Generated by Snowball 2.0.0 - https://snowballstem.org/
 
 package org.tartarus.snowball.ext;
 
 import org.tartarus.snowball.Among;
-import org.tartarus.snowball.SnowballProgram;
 
- /**
-  * This class was automatically generated by a Snowball to Java compiler 
-  * It implements the stemming algorithm defined by a snowball script.
-  */
+/**
+ * This class implements the stemming algorithm defined by a snowball script.
+ * <p>
+ * Generated by Snowball 2.0.0 - https://snowballstem.org/
+ * </p>
+ */
+@SuppressWarnings("unused")
+public class BasqueStemmer extends org.tartarus.snowball.SnowballStemmer {
 
-@SuppressWarnings("unused") public class BasqueStemmer extends SnowballProgram {
+  private static final long serialVersionUID = 1L;
+  private static final java.lang.invoke.MethodHandles.Lookup methodObject = java.lang.invoke.MethodHandles.lookup();
 
-private static final long serialVersionUID = 1L;
+  private final static Among a_0[] = {
+    new Among("idea", -1, 1),
+    new Among("bidea", 0, 1),
+    new Among("kidea", 0, 1),
+    new Among("pidea", 0, 1),
+    new Among("kundea", -1, 1),
+    new Among("galea", -1, 1),
+    new Among("tailea", -1, 1),
+    new Among("tzailea", -1, 1),
+    new Among("gunea", -1, 1),
+    new Among("kunea", -1, 1),
+    new Among("tzaga", -1, 1),
+    new Among("gaia", -1, 1),
+    new Among("aldia", -1, 1),
+    new Among("taldia", 12, 1),
+    new Among("karia", -1, 1),
+    new Among("garria", -1, 2),
+    new Among("karria", -1, 1),
+    new Among("ka", -1, 1),
+    new Among("tzaka", 17, 1),
+    new Among("la", -1, 1),
+    new Among("mena", -1, 1),
+    new Among("pena", -1, 1),
+    new Among("kina", -1, 1),
+    new Among("ezina", -1, 1),
+    new Among("tezina", 23, 1),
+    new Among("kuna", -1, 1),
+    new Among("tuna", -1, 1),
+    new Among("kizuna", -1, 1),
+    new Among("era", -1, 1),
+    new Among("bera", 28, 1),
+    new Among("arabera", 29, 4),
+    new Among("kera", 28, 1),
+    new Among("pera", 28, 1),
+    new Among("orra", -1, 1),
+    new Among("korra", 33, 1),
+    new Among("dura", -1, 1),
+    new Among("gura", -1, 1),
+    new Among("kura", -1, 1),
+    new Among("tura", -1, 1),
+    new Among("eta", -1, 1),
+    new Among("keta", 39, 1),
+    new Among("gailua", -1, 1),
+    new Among("eza", -1, 1),
+    new Among("erreza", 42, 1),
+    new Among("tza", -1, 2),
+    new Among("gaitza", 44, 1),
+    new Among("kaitza", 44, 1),
+    new Among("kuntza", 44, 1),
+    new Among("ide", -1, 1),
+    new Among("bide", 48, 1),
+    new Among("kide", 48, 1),
+    new Among("pide", 48, 1),
+    new Among("kunde", -1, 1),
+    new Among("tzake", -1, 1),
+    new Among("tzeke", -1, 1),
+    new Among("le", -1, 1),
+    new Among("gale", 55, 1),
+    new Among("taile", 55, 1),
+    new Among("tzaile", 55, 1),
+    new Among("gune", -1, 1),
+    new Among("kune", -1, 1),
+    new Among("tze", -1, 1),
+    new Among("atze", 61, 1),
+    new Among("gai", -1, 1),
+    new Among("aldi", -1, 1),
+    new Among("taldi", 64, 1),
+    new Among("ki", -1, 1),
+    new Among("ari", -1, 1),
+    new Among("kari", 67, 1),
+    new Among("lari", 67, 1),
+    new Among("tari", 67, 1),
+    new Among("etari", 70, 1),
+    new Among("garri", -1, 2),
+    new Among("karri", -1, 1),
+    new Among("arazi", -1, 1),
+    new Among("tarazi", 74, 1),
+    new Among("an", -1, 1),
+    new Among("ean", 76, 1),
+    new Among("rean", 77, 1),
+    new Among("kan", 76, 1),
+    new Among("etan", 76, 1),
+    new Among("atseden", -1, 3),
+    new Among("men", -1, 1),
+    new Among("pen", -1, 1),
+    new Among("kin", -1, 1),
+    new Among("rekin", 84, 1),
+    new Among("ezin", -1, 1),
+    new Among("tezin", 86, 1),
+    new Among("tun", -1, 1),
+    new Among("kizun", -1, 1),
+    new Among("go", -1, 1),
+    new Among("ago", 90, 1),
+    new Among("tio", -1, 1),
+    new Among("dako", -1, 1),
+    new Among("or", -1, 1),
+    new Among("kor", 94, 1),
+    new Among("tzat", -1, 1),
+    new Among("du", -1, 1),
+    new Among("gailu", -1, 1),
+    new Among("tu", -1, 1),
+    new Among("atu", 99, 1),
+    new Among("aldatu", 100, 1),
+    new Among("tatu", 100, 1),
+    new Among("baditu", 99, 5),
+    new Among("ez", -1, 1),
+    new Among("errez", 104, 1),
+    new Among("tzez", 104, 1),
+    new Among("gaitz", -1, 1),
+    new Among("kaitz", -1, 1)
+  };
 
-        /* patched */ private static final java.lang.invoke.MethodHandles.Lookup methodObject = java.lang.invoke.MethodHandles.lookup();
+  private final static Among a_1[] = {
+    new Among("ada", -1, 1),
+    new Among("kada", 0, 1),
+    new Among("anda", -1, 1),
+    new Among("denda", -1, 1),
+    new Among("gabea", -1, 1),
+    new Among("kabea", -1, 1),
+    new Among("aldea", -1, 1),
+    new Among("kaldea", 6, 1),
+    new Among("taldea", 6, 1),
+    new Among("ordea", -1, 1),
+    new Among("zalea", -1, 1),
+    new Among("tzalea", 10, 1),
+    new Among("gilea", -1, 1),
+    new Among("emea", -1, 1),
+    new Among("kumea", -1, 1),
+    new Among("nea", -1, 1),
+    new Among("enea", 15, 1),
+    new Among("zionea", 15, 1),
+    new Among("unea", 15, 1),
+    new Among("gunea", 18, 1),
+    new Among("pea", -1, 1),
+    new Among("aurrea", -1, 1),
+    new Among("tea", -1, 1),
+    new Among("kotea", 22, 1),
+    new Among("artea", 22, 1),
+    new Among("ostea", 22, 1),
+    new Among("etxea", -1, 1),
+    new Among("ga", -1, 1),
+    new Among("anga", 27, 1),
+    new Among("gaia", -1, 1),
+    new Among("aldia", -1, 1),
+    new Among("taldia", 30, 1),
+    new Among("handia", -1, 1),
+    new Among("mendia", -1, 1),
+    new Among("geia", -1, 1),
+    new Among("egia", -1, 1),
+    new Among("degia", 35, 1),
+    new Among("tegia", 35, 1),
+    new Among("nahia", -1, 1),
+    new Among("ohia", -1, 1),
+    new Among("kia", -1, 1),
+    new Among("tokia", 40, 1),
+    new Among("oia", -1, 1),
+    new Among("koia", 42, 1),
+    new Among("aria", -1, 1),
+    new Among("karia", 44, 1),
+    new Among("laria", 44, 1),
+    new Among("taria", 44, 1),
+    new Among("eria", -1, 1),
+    new Among("keria", 48, 1),
+    new Among("teria", 48, 1),
+    new Among("garria", -1, 2),
+    new Among("larria", -1, 1),
+    new Among("kirria", -1, 1),
+    new Among("duria", -1, 1),
+    new Among("asia", -1, 1),
+    new Among("tia", -1, 1),
+    new Among("ezia", -1, 1),
+    new Among("bizia", -1, 1),
+    new Among("ontzia", -1, 1),
+    new Among("ka", -1, 1),
+    new Among("joka", 60, 3),
+    new Among("aurka", 60, 10),
+    new Among("ska", 60, 1),
+    new Among("xka", 60, 1),
+    new Among("zka", 60, 1),
+    new Among("gibela", -1, 1),
+    new Among("gela", -1, 1),
+    new Among("kaila", -1, 1),
+    new Among("skila", -1, 1),
+    new Among("tila", -1, 1),
+    new Among("ola", -1, 1),
+    new Among("na", -1, 1),
+    new Among("kana", 72, 1),
+    new Among("ena", 72, 1),
+    new Among("garrena", 74, 1),
+    new Among("gerrena", 74, 1),
+    new Among("urrena", 74, 1),
+    new Among("zaina", 72, 1),
+    new Among("tzaina", 78, 1),
+    new Among("kina", 72, 1),
+    new Among("mina", 72, 1),
+    new Among("garna", 72, 1),
+    new Among("una", 72, 1),
+    new Among("duna", 83, 1),
+    new Among("asuna", 83, 1),
+    new Among("tasuna", 85, 1),
+    new Among("ondoa", -1, 1),
+    new Among("kondoa", 87, 1),
+    new Among("ngoa", -1, 1),
+    new Among("zioa", -1, 1),
+    new Among("koa", -1, 1),
+    new Among("takoa", 91, 1),
+    new Among("zkoa", 91, 1),
+    new Among("noa", -1, 1),
+    new Among("zinoa", 94, 1),
+    new Among("aroa", -1, 1),
+    new Among("taroa", 96, 1),
+    new Among("zaroa", 96, 1),
+    new Among("eroa", -1, 1),
+    new Among("oroa", -1, 1),
+    new Among("osoa", -1, 1),
+    new Among("toa", -1, 1),
+    new Among("ttoa", 102, 1),
+    new Among("ztoa", 102, 1),
+    new Among("txoa", -1, 1),
+    new Among("tzoa", -1, 1),
+    new Among("\u00F1oa", -1, 1),
+    new Among("ra", -1, 1),
+    new Among("ara", 108, 1),
+    new Among("dara", 109, 1),
+    new Among("liara", 109, 1),
+    new Among("tiara", 109, 1),
+    new Among("tara", 109, 1),
+    new Among("etara", 113, 1),
+    new Among("tzara", 109, 1),
+    new Among("bera", 108, 1),
+    new Among("kera", 108, 1),
+    new Among("pera", 108, 1),
+    new Among("ora", 108, 2),
+    new Among("tzarra", 108, 1),
+    new Among("korra", 108, 1),
+    new Among("tra", 108, 1),
+    new Among("sa", -1, 1),
+    new Among("osa", 123, 1),
+    new Among("ta", -1, 1),
+    new Among("eta", 125, 1),
+    new Among("keta", 126, 1),
+    new Among("sta", 125, 1),
+    new Among("dua", -1, 1),
+    new Among("mendua", 129, 1),
+    new Among("ordua", 129, 1),
+    new Among("lekua", -1, 1),
+    new Among("burua", -1, 1),
+    new Among("durua", -1, 1),
+    new Among("tsua", -1, 1),
+    new Among("tua", -1, 1),
+    new Among("mentua", 136, 1),
+    new Among("estua", 136, 1),
+    new Among("txua", -1, 1),
+    new Among("zua", -1, 1),
+    new Among("tzua", 140, 1),
+    new Among("za", -1, 1),
+    new Among("eza", 142, 1),
+    new Among("eroza", 142, 1),
+    new Among("tza", 142, 2),
+    new Among("koitza", 145, 1),
+    new Among("antza", 145, 1),
+    new Among("gintza", 145, 1),
+    new Among("kintza", 145, 1),
+    new Among("kuntza", 145, 1),
+    new Among("gabe", -1, 1),
+    new Among("kabe", -1, 1),
+    new Among("kide", -1, 1),
+    new Among("alde", -1, 1),
+    new Among("kalde", 154, 1),
+    new Among("talde", 154, 1),
+    new Among("orde", -1, 1),
+    new Among("ge", -1, 1),
+    new Among("zale", -1, 1),
+    new Among("tzale", 159, 1),
+    new Among("gile", -1, 1),
+    new Among("eme", -1, 1),
+    new Among("kume", -1, 1),
+    new Among("ne", -1, 1),
+    new Among("zione", 164, 1),
+    new Among("une", 164, 1),
+    new Among("gune", 166, 1),
+    new Among("pe", -1, 1),
+    new Among("aurre", -1, 1),
+    new Among("te", -1, 1),
+    new Among("kote", 170, 1),
+    new Among("arte", 170, 1),
+    new Among("oste", 170, 1),
+    new Among("etxe", -1, 1),
+    new Among("gai", -1, 1),
+    new Among("di", -1, 1),
+    new Among("aldi", 176, 1),
+    new Among("taldi", 177, 1),
+    new Among("geldi", 176, 8),
+    new Among("handi", 176, 1),
+    new Among("mendi", 176, 1),
+    new Among("gei", -1, 1),
+    new Among("egi", -1, 1),
+    new Among("degi", 183, 1),
+    new Among("tegi", 183, 1),
+    new Among("nahi", -1, 1),
+    new Among("ohi", -1, 1),
+    new Among("ki", -1, 1),
+    new Among("toki", 188, 1),
+    new Among("oi", -1, 1),
+    new Among("goi", 190, 1),
+    new Among("koi", 190, 1),
+    new Among("ari", -1, 1),
+    new Among("kari", 193, 1),
+    new Among("lari", 193, 1),
+    new Among("tari", 193, 1),
+    new Among("garri", -1, 2),
+    new Among("larri", -1, 1),
+    new Among("kirri", -1, 1),
+    new Among("duri", -1, 1),
+    new Among("asi", -1, 1),
+    new Among("ti", -1, 1),
+    new Among("ontzi", -1, 1),
+    new Among("\u00F1i", -1, 1),
+    new Among("ak", -1, 1),
+    new Among("ek", -1, 1),
+    new Among("tarik", -1, 1),
+    new Among("gibel", -1, 1),
+    new Among("ail", -1, 1),
+    new Among("kail", 209, 1),
+    new Among("kan", -1, 1),
+    new Among("tan", -1, 1),
+    new Among("etan", 212, 1),
+    new Among("en", -1, 4),
+    new Among("ren", 214, 2),
+    new Among("garren", 215, 1),
+    new Among("gerren", 215, 1),
+    new Among("urren", 215, 1),
+    new Among("ten", 214, 4),
+    new Among("tzen", 214, 4),
+    new Among("zain", -1, 1),
+    new Among("tzain", 221, 1),
+    new Among("kin", -1, 1),
+    new Among("min", -1, 1),
+    new Among("dun", -1, 1),
+    new Among("asun", -1, 1),
+    new Among("tasun", 226, 1),
+    new Among("aizun", -1, 1),
+    new Among("ondo", -1, 1),
+    new Among("kondo", 229, 1),
+    new Among("go", -1, 1),
+    new Among("ngo", 231, 1),
+    new Among("zio", -1, 1),
+    new Among("ko", -1, 1),
+    new Among("trako", 234, 5),
+    new Among("tako", 234, 1),
+    new Among("etako", 236, 1),
+    new Among("eko", 234, 1),
+    new Among("tariko", 234, 1),
+    new Among("sko", 234, 1),
+    new Among("tuko", 234, 1),
+    new Among("minutuko", 241, 6),
+    new Among("zko", 234, 1),
+    new Among("no", -1, 1),
+    new Among("zino", 244, 1),
+    new Among("ro", -1, 1),
+    new Among("aro", 246, 1),
+    new Among("igaro", 247, 9),
+    new Among("taro", 247, 1),
+    new Among("zaro", 247, 1),
+    new Among("ero", 246, 1),
+    new Among("giro", 246, 1),
+    new Among("oro", 246, 1),
+    new Among("oso", -1, 1),
+    new Among("to", -1, 1),
+    new Among("tto", 255, 1),
+    new Among("zto", 255, 1),
+    new Among("txo", -1, 1),
+    new Among("tzo", -1, 1),
+    new Among("gintzo", 259, 1),
+    new Among("\u00F1o", -1, 1),
+    new Among("zp", -1, 1),
+    new Among("ar", -1, 1),
+    new Among("dar", 263, 1),
+    new Among("behar", 263, 1),
+    new Among("zehar", 263, 7),
+    new Among("liar", 263, 1),
+    new Among("tiar", 263, 1),
+    new Among("tar", 263, 1),
+    new Among("tzar", 263, 1),
+    new Among("or", -1, 2),
+    new Among("kor", 271, 1),
+    new Among("os", -1, 1),
+    new Among("ket", -1, 1),
+    new Among("du", -1, 1),
+    new Among("mendu", 275, 1),
+    new Among("ordu", 275, 1),
+    new Among("leku", -1, 1),
+    new Among("buru", -1, 2),
+    new Among("duru", -1, 1),
+    new Among("tsu", -1, 1),
+    new Among("tu", -1, 1),
+    new Among("tatu", 282, 4),
+    new Among("mentu", 282, 1),
+    new Among("estu", 282, 1),
+    new Among("txu", -1, 1),
+    new Among("zu", -1, 1),
+    new Among("tzu", 287, 1),
+    new Among("gintzu", 288, 1),
+    new Among("z", -1, 1),
+    new Among("ez", 290, 1),
+    new Among("eroz", 290, 1),
+    new Among("tz", 290, 1),
+    new Among("koitz", 293, 1)
+  };
 
-                private final static Among a_0[] = {
-                    new Among ( "idea", -1, 1, "", methodObject ),
-                    new Among ( "bidea", 0, 1, "", methodObject ),
-                    new Among ( "kidea", 0, 1, "", methodObject ),
-                    new Among ( "pidea", 0, 1, "", methodObject ),
-                    new Among ( "kundea", -1, 1, "", methodObject ),
-                    new Among ( "galea", -1, 1, "", methodObject ),
-                    new Among ( "tailea", -1, 1, "", methodObject ),
-                    new Among ( "tzailea", -1, 1, "", methodObject ),
-                    new Among ( "gunea", -1, 1, "", methodObject ),
-                    new Among ( "kunea", -1, 1, "", methodObject ),
-                    new Among ( "tzaga", -1, 1, "", methodObject ),
-                    new Among ( "gaia", -1, 1, "", methodObject ),
-                    new Among ( "aldia", -1, 1, "", methodObject ),
-                    new Among ( "taldia", 12, 1, "", methodObject ),
-                    new Among ( "karia", -1, 1, "", methodObject ),
-                    new Among ( "garria", -1, 2, "", methodObject ),
-                    new Among ( "karria", -1, 1, "", methodObject ),
-                    new Among ( "ka", -1, 1, "", methodObject ),
-                    new Among ( "tzaka", 17, 1, "", methodObject ),
-                    new Among ( "la", -1, 1, "", methodObject ),
-                    new Among ( "mena", -1, 1, "", methodObject ),
-                    new Among ( "pena", -1, 1, "", methodObject ),
-                    new Among ( "kina", -1, 1, "", methodObject ),
-                    new Among ( "ezina", -1, 1, "", methodObject ),
-                    new Among ( "tezina", 23, 1, "", methodObject ),
-                    new Among ( "kuna", -1, 1, "", methodObject ),
-                    new Among ( "tuna", -1, 1, "", methodObject ),
-                    new Among ( "kizuna", -1, 1, "", methodObject ),
-                    new Among ( "era", -1, 1, "", methodObject ),
-                    new Among ( "bera", 28, 1, "", methodObject ),
-                    new Among ( "arabera", 29, 4, "", methodObject ),
-                    new Among ( "kera", 28, 1, "", methodObject ),
-                    new Among ( "pera", 28, 1, "", methodObject ),
-                    new Among ( "orra", -1, 1, "", methodObject ),
-                    new Among ( "korra", 33, 1, "", methodObject ),
-                    new Among ( "dura", -1, 1, "", methodObject ),
-                    new Among ( "gura", -1, 1, "", methodObject ),
-                    new Among ( "kura", -1, 1, "", methodObject ),
-                    new Among ( "tura", -1, 1, "", methodObject ),
-                    new Among ( "eta", -1, 1, "", methodObject ),
-                    new Among ( "keta", 39, 1, "", methodObject ),
-                    new Among ( "gailua", -1, 1, "", methodObject ),
-                    new Among ( "eza", -1, 1, "", methodObject ),
-                    new Among ( "erreza", 42, 1, "", methodObject ),
-                    new Among ( "tza", -1, 2, "", methodObject ),
-                    new Among ( "gaitza", 44, 1, "", methodObject ),
-                    new Among ( "kaitza", 44, 1, "", methodObject ),
-                    new Among ( "kuntza", 44, 1, "", methodObject ),
-                    new Among ( "ide", -1, 1, "", methodObject ),
-                    new Among ( "bide", 48, 1, "", methodObject ),
-                    new Among ( "kide", 48, 1, "", methodObject ),
-                    new Among ( "pide", 48, 1, "", methodObject ),
-                    new Among ( "kunde", -1, 1, "", methodObject ),
-                    new Among ( "tzake", -1, 1, "", methodObject ),
-                    new Among ( "tzeke", -1, 1, "", methodObject ),
-                    new Among ( "le", -1, 1, "", methodObject ),
-                    new Among ( "gale", 55, 1, "", methodObject ),
-                    new Among ( "taile", 55, 1, "", methodObject ),
-                    new Among ( "tzaile", 55, 1, "", methodObject ),
-                    new Among ( "gune", -1, 1, "", methodObject ),
-                    new Among ( "kune", -1, 1, "", methodObject ),
-                    new Among ( "tze", -1, 1, "", methodObject ),
-                    new Among ( "atze", 61, 1, "", methodObject ),
-                    new Among ( "gai", -1, 1, "", methodObject ),
-                    new Among ( "aldi", -1, 1, "", methodObject ),
-                    new Among ( "taldi", 64, 1, "", methodObject ),
-                    new Among ( "ki", -1, 1, "", methodObject ),
-                    new Among ( "ari", -1, 1, "", methodObject ),
-                    new Among ( "kari", 67, 1, "", methodObject ),
-                    new Among ( "lari", 67, 1, "", methodObject ),
-                    new Among ( "tari", 67, 1, "", methodObject ),
-                    new Among ( "etari", 70, 1, "", methodObject ),
-                    new Among ( "garri", -1, 2, "", methodObject ),
-                    new Among ( "karri", -1, 1, "", methodObject ),
-                    new Among ( "arazi", -1, 1, "", methodObject ),
-                    new Among ( "tarazi", 74, 1, "", methodObject ),
-                    new Among ( "an", -1, 1, "", methodObject ),
-                    new Among ( "ean", 76, 1, "", methodObject ),
-                    new Among ( "rean", 77, 1, "", methodObject ),
-                    new Among ( "kan", 76, 1, "", methodObject ),
-                    new Among ( "etan", 76, 1, "", methodObject ),
-                    new Among ( "atseden", -1, 3, "", methodObject ),
-                    new Among ( "men", -1, 1, "", methodObject ),
-                    new Among ( "pen", -1, 1, "", methodObject ),
-                    new Among ( "kin", -1, 1, "", methodObject ),
-                    new Among ( "rekin", 84, 1, "", methodObject ),
-                    new Among ( "ezin", -1, 1, "", methodObject ),
-                    new Among ( "tezin", 86, 1, "", methodObject ),
-                    new Among ( "tun", -1, 1, "", methodObject ),
-                    new Among ( "kizun", -1, 1, "", methodObject ),
-                    new Among ( "go", -1, 1, "", methodObject ),
-                    new Among ( "ago", 90, 1, "", methodObject ),
-                    new Among ( "tio", -1, 1, "", methodObject ),
-                    new Among ( "dako", -1, 1, "", methodObject ),
-                    new Among ( "or", -1, 1, "", methodObject ),
-                    new Among ( "kor", 94, 1, "", methodObject ),
-                    new Among ( "tzat", -1, 1, "", methodObject ),
-                    new Among ( "du", -1, 1, "", methodObject ),
-                    new Among ( "gailu", -1, 1, "", methodObject ),
-                    new Among ( "tu", -1, 1, "", methodObject ),
-                    new Among ( "atu", 99, 1, "", methodObject ),
-                    new Among ( "aldatu", 100, 1, "", methodObject ),
-                    new Among ( "tatu", 100, 1, "", methodObject ),
-                    new Among ( "baditu", 99, 5, "", methodObject ),
-                    new Among ( "ez", -1, 1, "", methodObject ),
-                    new Among ( "errez", 104, 1, "", methodObject ),
-                    new Among ( "tzez", 104, 1, "", methodObject ),
-                    new Among ( "gaitz", -1, 1, "", methodObject ),
-                    new Among ( "kaitz", -1, 1, "", methodObject )
-                };
+  private final static Among a_2[] = {
+    new Among("zlea", -1, 2),
+    new Among("keria", -1, 1),
+    new Among("la", -1, 1),
+    new Among("era", -1, 1),
+    new Among("dade", -1, 1),
+    new Among("tade", -1, 1),
+    new Among("date", -1, 1),
+    new Among("tate", -1, 1),
+    new Among("gi", -1, 1),
+    new Among("ki", -1, 1),
+    new Among("ik", -1, 1),
+    new Among("lanik", 10, 1),
+    new Among("rik", 10, 1),
+    new Among("larik", 12, 1),
+    new Among("ztik", 10, 1),
+    new Among("go", -1, 1),
+    new Among("ro", -1, 1),
+    new Among("ero", 16, 1),
+    new Among("to", -1, 1)
+  };
 
-                private final static Among a_1[] = {
-                    new Among ( "ada", -1, 1, "", methodObject ),
-                    new Among ( "kada", 0, 1, "", methodObject ),
-                    new Among ( "anda", -1, 1, "", methodObject ),
-                    new Among ( "denda", -1, 1, "", methodObject ),
-                    new Among ( "gabea", -1, 1, "", methodObject ),
-                    new Among ( "kabea", -1, 1, "", methodObject ),
-                    new Among ( "aldea", -1, 1, "", methodObject ),
-                    new Among ( "kaldea", 6, 1, "", methodObject ),
-                    new Among ( "taldea", 6, 1, "", methodObject ),
-                    new Among ( "ordea", -1, 1, "", methodObject ),
-                    new Among ( "zalea", -1, 1, "", methodObject ),
-                    new Among ( "tzalea", 10, 1, "", methodObject ),
-                    new Among ( "gilea", -1, 1, "", methodObject ),
-                    new Among ( "emea", -1, 1, "", methodObject ),
-                    new Among ( "kumea", -1, 1, "", methodObject ),
-                    new Among ( "nea", -1, 1, "", methodObject ),
-                    new Among ( "enea", 15, 1, "", methodObject ),
-                    new Among ( "zionea", 15, 1, "", methodObject ),
-                    new Among ( "unea", 15, 1, "", methodObject ),
-                    new Among ( "gunea", 18, 1, "", methodObject ),
-                    new Among ( "pea", -1, 1, "", methodObject ),
-                    new Among ( "aurrea", -1, 1, "", methodObject ),
-                    new Among ( "tea", -1, 1, "", methodObject ),
-                    new Among ( "kotea", 22, 1, "", methodObject ),
-                    new Among ( "artea", 22, 1, "", methodObject ),
-                    new Among ( "ostea", 22, 1, "", methodObject ),
-                    new Among ( "etxea", -1, 1, "", methodObject ),
-                    new Among ( "ga", -1, 1, "", methodObject ),
-                    new Among ( "anga", 27, 1, "", methodObject ),
-                    new Among ( "gaia", -1, 1, "", methodObject ),
-                    new Among ( "aldia", -1, 1, "", methodObject ),
-                    new Among ( "taldia", 30, 1, "", methodObject ),
-                    new Among ( "handia", -1, 1, "", methodObject ),
-                    new Among ( "mendia", -1, 1, "", methodObject ),
-                    new Among ( "geia", -1, 1, "", methodObject ),
-                    new Among ( "egia", -1, 1, "", methodObject ),
-                    new Among ( "degia", 35, 1, "", methodObject ),
-                    new Among ( "tegia", 35, 1, "", methodObject ),
-                    new Among ( "nahia", -1, 1, "", methodObject ),
-                    new Among ( "ohia", -1, 1, "", methodObject ),
-                    new Among ( "kia", -1, 1, "", methodObject ),
-                    new Among ( "tokia", 40, 1, "", methodObject ),
-                    new Among ( "oia", -1, 1, "", methodObject ),
-                    new Among ( "koia", 42, 1, "", methodObject ),
-                    new Among ( "aria", -1, 1, "", methodObject ),
-                    new Among ( "karia", 44, 1, "", methodObject ),
-                    new Among ( "laria", 44, 1, "", methodObject ),
-                    new Among ( "taria", 44, 1, "", methodObject ),
-                    new Among ( "eria", -1, 1, "", methodObject ),
-                    new Among ( "keria", 48, 1, "", methodObject ),
-                    new Among ( "teria", 48, 1, "", methodObject ),
-                    new Among ( "garria", -1, 2, "", methodObject ),
-                    new Among ( "larria", -1, 1, "", methodObject ),
-                    new Among ( "kirria", -1, 1, "", methodObject ),
-                    new Among ( "duria", -1, 1, "", methodObject ),
-                    new Among ( "asia", -1, 1, "", methodObject ),
-                    new Among ( "tia", -1, 1, "", methodObject ),
-                    new Among ( "ezia", -1, 1, "", methodObject ),
-                    new Among ( "bizia", -1, 1, "", methodObject ),
-                    new Among ( "ontzia", -1, 1, "", methodObject ),
-                    new Among ( "ka", -1, 1, "", methodObject ),
-                    new Among ( "joka", 60, 3, "", methodObject ),
-                    new Among ( "aurka", 60, 10, "", methodObject ),
-                    new Among ( "ska", 60, 1, "", methodObject ),
-                    new Among ( "xka", 60, 1, "", methodObject ),
-                    new Among ( "zka", 60, 1, "", methodObject ),
-                    new Among ( "gibela", -1, 1, "", methodObject ),
-                    new Among ( "gela", -1, 1, "", methodObject ),
-                    new Among ( "kaila", -1, 1, "", methodObject ),
-                    new Among ( "skila", -1, 1, "", methodObject ),
-                    new Among ( "tila", -1, 1, "", methodObject ),
-                    new Among ( "ola", -1, 1, "", methodObject ),
-                    new Among ( "na", -1, 1, "", methodObject ),
-                    new Among ( "kana", 72, 1, "", methodObject ),
-                    new Among ( "ena", 72, 1, "", methodObject ),
-                    new Among ( "garrena", 74, 1, "", methodObject ),
-                    new Among ( "gerrena", 74, 1, "", methodObject ),
-                    new Among ( "urrena", 74, 1, "", methodObject ),
-                    new Among ( "zaina", 72, 1, "", methodObject ),
-                    new Among ( "tzaina", 78, 1, "", methodObject ),
-                    new Among ( "kina", 72, 1, "", methodObject ),
-                    new Among ( "mina", 72, 1, "", methodObject ),
-                    new Among ( "garna", 72, 1, "", methodObject ),
-                    new Among ( "una", 72, 1, "", methodObject ),
-                    new Among ( "duna", 83, 1, "", methodObject ),
-                    new Among ( "asuna", 83, 1, "", methodObject ),
-                    new Among ( "tasuna", 85, 1, "", methodObject ),
-                    new Among ( "ondoa", -1, 1, "", methodObject ),
-                    new Among ( "kondoa", 87, 1, "", methodObject ),
-                    new Among ( "ngoa", -1, 1, "", methodObject ),
-                    new Among ( "zioa", -1, 1, "", methodObject ),
-                    new Among ( "koa", -1, 1, "", methodObject ),
-                    new Among ( "takoa", 91, 1, "", methodObject ),
-                    new Among ( "zkoa", 91, 1, "", methodObject ),
-                    new Among ( "noa", -1, 1, "", methodObject ),
-                    new Among ( "zinoa", 94, 1, "", methodObject ),
-                    new Among ( "aroa", -1, 1, "", methodObject ),
-                    new Among ( "taroa", 96, 1, "", methodObject ),
-                    new Among ( "zaroa", 96, 1, "", methodObject ),
-                    new Among ( "eroa", -1, 1, "", methodObject ),
-                    new Among ( "oroa", -1, 1, "", methodObject ),
-                    new Among ( "osoa", -1, 1, "", methodObject ),
-                    new Among ( "toa", -1, 1, "", methodObject ),
-                    new Among ( "ttoa", 102, 1, "", methodObject ),
-                    new Among ( "ztoa", 102, 1, "", methodObject ),
-                    new Among ( "txoa", -1, 1, "", methodObject ),
-                    new Among ( "tzoa", -1, 1, "", methodObject ),
-                    new Among ( "\u00F1oa", -1, 1, "", methodObject ),
-                    new Among ( "ra", -1, 1, "", methodObject ),
-                    new Among ( "ara", 108, 1, "", methodObject ),
-                    new Among ( "dara", 109, 1, "", methodObject ),
-                    new Among ( "liara", 109, 1, "", methodObject ),
-                    new Among ( "tiara", 109, 1, "", methodObject ),
-                    new Among ( "tara", 109, 1, "", methodObject ),
-                    new Among ( "etara", 113, 1, "", methodObject ),
-                    new Among ( "tzara", 109, 1, "", methodObject ),
-                    new Among ( "bera", 108, 1, "", methodObject ),
-                    new Among ( "kera", 108, 1, "", methodObject ),
-                    new Among ( "pera", 108, 1, "", methodObject ),
-                    new Among ( "ora", 108, 2, "", methodObject ),
-                    new Among ( "tzarra", 108, 1, "", methodObject ),
-                    new Among ( "korra", 108, 1, "", methodObject ),
-                    new Among ( "tra", 108, 1, "", methodObject ),
-                    new Among ( "sa", -1, 1, "", methodObject ),
-                    new Among ( "osa", 123, 1, "", methodObject ),
-                    new Among ( "ta", -1, 1, "", methodObject ),
-                    new Among ( "eta", 125, 1, "", methodObject ),
-                    new Among ( "keta", 126, 1, "", methodObject ),
-                    new Among ( "sta", 125, 1, "", methodObject ),
-                    new Among ( "dua", -1, 1, "", methodObject ),
-                    new Among ( "mendua", 129, 1, "", methodObject ),
-                    new Among ( "ordua", 129, 1, "", methodObject ),
-                    new Among ( "lekua", -1, 1, "", methodObject ),
-                    new Among ( "burua", -1, 1, "", methodObject ),
-                    new Among ( "durua", -1, 1, "", methodObject ),
-                    new Among ( "tsua", -1, 1, "", methodObject ),
-                    new Among ( "tua", -1, 1, "", methodObject ),
-                    new Among ( "mentua", 136, 1, "", methodObject ),
-                    new Among ( "estua", 136, 1, "", methodObject ),
-                    new Among ( "txua", -1, 1, "", methodObject ),
-                    new Among ( "zua", -1, 1, "", methodObject ),
-                    new Among ( "tzua", 140, 1, "", methodObject ),
-                    new Among ( "za", -1, 1, "", methodObject ),
-                    new Among ( "eza", 142, 1, "", methodObject ),
-                    new Among ( "eroza", 142, 1, "", methodObject ),
-                    new Among ( "tza", 142, 2, "", methodObject ),
-                    new Among ( "koitza", 145, 1, "", methodObject ),
-                    new Among ( "antza", 145, 1, "", methodObject ),
-                    new Among ( "gintza", 145, 1, "", methodObject ),
-                    new Among ( "kintza", 145, 1, "", methodObject ),
-                    new Among ( "kuntza", 145, 1, "", methodObject ),
-                    new Among ( "gabe", -1, 1, "", methodObject ),
-                    new Among ( "kabe", -1, 1, "", methodObject ),
-                    new Among ( "kide", -1, 1, "", methodObject ),
-                    new Among ( "alde", -1, 1, "", methodObject ),
-                    new Among ( "kalde", 154, 1, "", methodObject ),
-                    new Among ( "talde", 154, 1, "", methodObject ),
-                    new Among ( "orde", -1, 1, "", methodObject ),
-                    new Among ( "ge", -1, 1, "", methodObject ),
-                    new Among ( "zale", -1, 1, "", methodObject ),
-                    new Among ( "tzale", 159, 1, "", methodObject ),
-                    new Among ( "gile", -1, 1, "", methodObject ),
-                    new Among ( "eme", -1, 1, "", methodObject ),
-                    new Among ( "kume", -1, 1, "", methodObject ),
-                    new Among ( "ne", -1, 1, "", methodObject ),
-                    new Among ( "zione", 164, 1, "", methodObject ),
-                    new Among ( "une", 164, 1, "", methodObject ),
-                    new Among ( "gune", 166, 1, "", methodObject ),
-                    new Among ( "pe", -1, 1, "", methodObject ),
-                    new Among ( "aurre", -1, 1, "", methodObject ),
-                    new Among ( "te", -1, 1, "", methodObject ),
-                    new Among ( "kote", 170, 1, "", methodObject ),
-                    new Among ( "arte", 170, 1, "", methodObject ),
-                    new Among ( "oste", 170, 1, "", methodObject ),
-                    new Among ( "etxe", -1, 1, "", methodObject ),
-                    new Among ( "gai", -1, 1, "", methodObject ),
-                    new Among ( "di", -1, 1, "", methodObject ),
-                    new Among ( "aldi", 176, 1, "", methodObject ),
-                    new Among ( "taldi", 177, 1, "", methodObject ),
-                    new Among ( "geldi", 176, 8, "", methodObject ),
-                    new Among ( "handi", 176, 1, "", methodObject ),
-                    new Among ( "mendi", 176, 1, "", methodObject ),
-                    new Among ( "gei", -1, 1, "", methodObject ),
-                    new Among ( "egi", -1, 1, "", methodObject ),
-                    new Among ( "degi", 183, 1, "", methodObject ),
-                    new Among ( "tegi", 183, 1, "", methodObject ),
-                    new Among ( "nahi", -1, 1, "", methodObject ),
-                    new Among ( "ohi", -1, 1, "", methodObject ),
-                    new Among ( "ki", -1, 1, "", methodObject ),
-                    new Among ( "toki", 188, 1, "", methodObject ),
-                    new Among ( "oi", -1, 1, "", methodObject ),
-                    new Among ( "goi", 190, 1, "", methodObject ),
-                    new Among ( "koi", 190, 1, "", methodObject ),
-                    new Among ( "ari", -1, 1, "", methodObject ),
-                    new Among ( "kari", 193, 1, "", methodObject ),
-                    new Among ( "lari", 193, 1, "", methodObject ),
-                    new Among ( "tari", 193, 1, "", methodObject ),
-                    new Among ( "garri", -1, 2, "", methodObject ),
-                    new Among ( "larri", -1, 1, "", methodObject ),
-                    new Among ( "kirri", -1, 1, "", methodObject ),
-                    new Among ( "duri", -1, 1, "", methodObject ),
-                    new Among ( "asi", -1, 1, "", methodObject ),
-                    new Among ( "ti", -1, 1, "", methodObject ),
-                    new Among ( "ontzi", -1, 1, "", methodObject ),
-                    new Among ( "\u00F1i", -1, 1, "", methodObject ),
-                    new Among ( "ak", -1, 1, "", methodObject ),
-                    new Among ( "ek", -1, 1, "", methodObject ),
-                    new Among ( "tarik", -1, 1, "", methodObject ),
-                    new Among ( "gibel", -1, 1, "", methodObject ),
-                    new Among ( "ail", -1, 1, "", methodObject ),
-                    new Among ( "kail", 209, 1, "", methodObject ),
-                    new Among ( "kan", -1, 1, "", methodObject ),
-                    new Among ( "tan", -1, 1, "", methodObject ),
-                    new Among ( "etan", 212, 1, "", methodObject ),
-                    new Among ( "en", -1, 4, "", methodObject ),
-                    new Among ( "ren", 214, 2, "", methodObject ),
-                    new Among ( "garren", 215, 1, "", methodObject ),
-                    new Among ( "gerren", 215, 1, "", methodObject ),
-                    new Among ( "urren", 215, 1, "", methodObject ),
-                    new Among ( "ten", 214, 4, "", methodObject ),
-                    new Among ( "tzen", 214, 4, "", methodObject ),
-                    new Among ( "zain", -1, 1, "", methodObject ),
-                    new Among ( "tzain", 221, 1, "", methodObject ),
-                    new Among ( "kin", -1, 1, "", methodObject ),
-                    new Among ( "min", -1, 1, "", methodObject ),
-                    new Among ( "dun", -1, 1, "", methodObject ),
-                    new Among ( "asun", -1, 1, "", methodObject ),
-                    new Among ( "tasun", 226, 1, "", methodObject ),
-                    new Among ( "aizun", -1, 1, "", methodObject ),
-                    new Among ( "ondo", -1, 1, "", methodObject ),
-                    new Among ( "kondo", 229, 1, "", methodObject ),
-                    new Among ( "go", -1, 1, "", methodObject ),
-                    new Among ( "ngo", 231, 1, "", methodObject ),
-                    new Among ( "zio", -1, 1, "", methodObject ),
-                    new Among ( "ko", -1, 1, "", methodObject ),
-                    new Among ( "trako", 234, 5, "", methodObject ),
-                    new Among ( "tako", 234, 1, "", methodObject ),
-                    new Among ( "etako", 236, 1, "", methodObject ),
-                    new Among ( "eko", 234, 1, "", methodObject ),
-                    new Among ( "tariko", 234, 1, "", methodObject ),
-                    new Among ( "sko", 234, 1, "", methodObject ),
-                    new Among ( "tuko", 234, 1, "", methodObject ),
-                    new Among ( "minutuko", 241, 6, "", methodObject ),
-                    new Among ( "zko", 234, 1, "", methodObject ),
-                    new Among ( "no", -1, 1, "", methodObject ),
-                    new Among ( "zino", 244, 1, "", methodObject ),
-                    new Among ( "ro", -1, 1, "", methodObject ),
-                    new Among ( "aro", 246, 1, "", methodObject ),
-                    new Among ( "igaro", 247, 9, "", methodObject ),
-                    new Among ( "taro", 247, 1, "", methodObject ),
-                    new Among ( "zaro", 247, 1, "", methodObject ),
-                    new Among ( "ero", 246, 1, "", methodObject ),
-                    new Among ( "giro", 246, 1, "", methodObject ),
-                    new Among ( "oro", 246, 1, "", methodObject ),
-                    new Among ( "oso", -1, 1, "", methodObject ),
-                    new Among ( "to", -1, 1, "", methodObject ),
-                    new Among ( "tto", 255, 1, "", methodObject ),
-                    new Among ( "zto", 255, 1, "", methodObject ),
-                    new Among ( "txo", -1, 1, "", methodObject ),
-                    new Among ( "tzo", -1, 1, "", methodObject ),
-                    new Among ( "gintzo", 259, 1, "", methodObject ),
-                    new Among ( "\u00F1o", -1, 1, "", methodObject ),
-                    new Among ( "zp", -1, 1, "", methodObject ),
-                    new Among ( "ar", -1, 1, "", methodObject ),
-                    new Among ( "dar", 263, 1, "", methodObject ),
-                    new Among ( "behar", 263, 1, "", methodObject ),
-                    new Among ( "zehar", 263, 7, "", methodObject ),
-                    new Among ( "liar", 263, 1, "", methodObject ),
-                    new Among ( "tiar", 263, 1, "", methodObject ),
-                    new Among ( "tar", 263, 1, "", methodObject ),
-                    new Among ( "tzar", 263, 1, "", methodObject ),
-                    new Among ( "or", -1, 2, "", methodObject ),
-                    new Among ( "kor", 271, 1, "", methodObject ),
-                    new Among ( "os", -1, 1, "", methodObject ),
-                    new Among ( "ket", -1, 1, "", methodObject ),
-                    new Among ( "du", -1, 1, "", methodObject ),
-                    new Among ( "mendu", 275, 1, "", methodObject ),
-                    new Among ( "ordu", 275, 1, "", methodObject ),
-                    new Among ( "leku", -1, 1, "", methodObject ),
-                    new Among ( "buru", -1, 2, "", methodObject ),
-                    new Among ( "duru", -1, 1, "", methodObject ),
-                    new Among ( "tsu", -1, 1, "", methodObject ),
-                    new Among ( "tu", -1, 1, "", methodObject ),
-                    new Among ( "tatu", 282, 4, "", methodObject ),
-                    new Among ( "mentu", 282, 1, "", methodObject ),
-                    new Among ( "estu", 282, 1, "", methodObject ),
-                    new Among ( "txu", -1, 1, "", methodObject ),
-                    new Among ( "zu", -1, 1, "", methodObject ),
-                    new Among ( "tzu", 287, 1, "", methodObject ),
-                    new Among ( "gintzu", 288, 1, "", methodObject ),
-                    new Among ( "z", -1, 1, "", methodObject ),
-                    new Among ( "ez", 290, 1, "", methodObject ),
-                    new Among ( "eroz", 290, 1, "", methodObject ),
-                    new Among ( "tz", 290, 1, "", methodObject ),
-                    new Among ( "koitz", 293, 1, "", methodObject )
-                };
+  private static final char g_v[] = {17, 65, 16 };
 
-                private final static Among a_2[] = {
-                    new Among ( "zlea", -1, 2, "", methodObject ),
-                    new Among ( "keria", -1, 1, "", methodObject ),
-                    new Among ( "la", -1, 1, "", methodObject ),
-                    new Among ( "era", -1, 1, "", methodObject ),
-                    new Among ( "dade", -1, 1, "", methodObject ),
-                    new Among ( "tade", -1, 1, "", methodObject ),
-                    new Among ( "date", -1, 1, "", methodObject ),
-                    new Among ( "tate", -1, 1, "", methodObject ),
-                    new Among ( "gi", -1, 1, "", methodObject ),
-                    new Among ( "ki", -1, 1, "", methodObject ),
-                    new Among ( "ik", -1, 1, "", methodObject ),
-                    new Among ( "lanik", 10, 1, "", methodObject ),
-                    new Among ( "rik", 10, 1, "", methodObject ),
-                    new Among ( "larik", 12, 1, "", methodObject ),
-                    new Among ( "ztik", 10, 1, "", methodObject ),
-                    new Among ( "go", -1, 1, "", methodObject ),
-                    new Among ( "ro", -1, 1, "", methodObject ),
-                    new Among ( "ero", 16, 1, "", methodObject ),
-                    new Among ( "to", -1, 1, "", methodObject )
-                };
+  private int I_p2;
+  private int I_p1;
+  private int I_pV;
 
-                private static final char g_v[] = {17, 65, 16 };
 
-        private int I_p2;
-        private int I_p1;
-        private int I_pV;
-
-                private void copy_from(BasqueStemmer other) {
-                    I_p2 = other.I_p2;
-                    I_p1 = other.I_p1;
-                    I_pV = other.I_pV;
-                    super.copy_from(other);
-                }
-
-                private boolean r_mark_regions() {
-            int v_1;
-            int v_2;
-            int v_3;
-            int v_6;
-            int v_8;
-                    // (, line 25
-                    I_pV = limit;
-                    I_p1 = limit;
-                    I_p2 = limit;
-                    // do, line 31
-                    v_1 = cursor;
-                    lab0: do {
-                        // (, line 31
-                        // or, line 33
-                        lab1: do {
-                            v_2 = cursor;
-                            lab2: do {
-                                // (, line 32
-                                if (!(in_grouping(g_v, 97, 117)))
-                                {
-                                    break lab2;
-                                }
-                                // or, line 32
-                                lab3: do {
-                                    v_3 = cursor;
-                                    lab4: do {
-                                        // (, line 32
-                                        if (!(out_grouping(g_v, 97, 117)))
-                                        {
-                                            break lab4;
-                                        }
-                                        // gopast, line 32
-                                        golab5: while(true)
-                                        {
-                                            lab6: do {
-                                                if (!(in_grouping(g_v, 97, 117)))
-                                                {
-                                                    break lab6;
-                                                }
-                                                break golab5;
-                                            } while (false);
-                                            if (cursor >= limit)
-                                            {
-                                                break lab4;
-                                            }
-                                            cursor++;
-                                        }
-                                        break lab3;
-                                    } while (false);
-                                    cursor = v_3;
-                                    // (, line 32
-                                    if (!(in_grouping(g_v, 97, 117)))
-                                    {
-                                        break lab2;
-                                    }
-                                    // gopast, line 32
-                                    golab7: while(true)
-                                    {
-                                        lab8: do {
-                                            if (!(out_grouping(g_v, 97, 117)))
-                                            {
-                                                break lab8;
-                                            }
-                                            break golab7;
-                                        } while (false);
-                                        if (cursor >= limit)
-                                        {
-                                            break lab2;
-                                        }
-                                        cursor++;
-                                    }
-                                } while (false);
-                                break lab1;
-                            } while (false);
-                            cursor = v_2;
-                            // (, line 34
-                            if (!(out_grouping(g_v, 97, 117)))
-                            {
-                                break lab0;
-                            }
-                            // or, line 34
-                            lab9: do {
-                                v_6 = cursor;
-                                lab10: do {
-                                    // (, line 34
-                                    if (!(out_grouping(g_v, 97, 117)))
-                                    {
-                                        break lab10;
-                                    }
-                                    // gopast, line 34
-                                    golab11: while(true)
-                                    {
-                                        lab12: do {
-                                            if (!(in_grouping(g_v, 97, 117)))
-                                            {
-                                                break lab12;
-                                            }
-                                            break golab11;
-                                        } while (false);
-                                        if (cursor >= limit)
-                                        {
-                                            break lab10;
-                                        }
-                                        cursor++;
-                                    }
-                                    break lab9;
-                                } while (false);
-                                cursor = v_6;
-                                // (, line 34
-                                if (!(in_grouping(g_v, 97, 117)))
-                                {
-                                    break lab0;
-                                }
-                                // next, line 34
-                                if (cursor >= limit)
-                                {
-                                    break lab0;
-                                }
-                                cursor++;
-                            } while (false);
-                        } while (false);
-                        // setmark pV, line 35
-                        I_pV = cursor;
-                    } while (false);
-                    cursor = v_1;
-                    // do, line 37
-                    v_8 = cursor;
-                    lab13: do {
-                        // (, line 37
-                        // gopast, line 38
-                        golab14: while(true)
-                        {
-                            lab15: do {
-                                if (!(in_grouping(g_v, 97, 117)))
-                                {
-                                    break lab15;
-                                }
-                                break golab14;
-                            } while (false);
-                            if (cursor >= limit)
-                            {
-                                break lab13;
-                            }
-                            cursor++;
-                        }
-                        // gopast, line 38
-                        golab16: while(true)
-                        {
-                            lab17: do {
-                                if (!(out_grouping(g_v, 97, 117)))
-                                {
-                                    break lab17;
-                                }
-                                break golab16;
-                            } while (false);
-                            if (cursor >= limit)
-                            {
-                                break lab13;
-                            }
-                            cursor++;
-                        }
-                        // setmark p1, line 38
-                        I_p1 = cursor;
-                        // gopast, line 39
-                        golab18: while(true)
-                        {
-                            lab19: do {
-                                if (!(in_grouping(g_v, 97, 117)))
-                                {
-                                    break lab19;
-                                }
-                                break golab18;
-                            } while (false);
-                            if (cursor >= limit)
-                            {
-                                break lab13;
-                            }
-                            cursor++;
-                        }
-                        // gopast, line 39
-                        golab20: while(true)
-                        {
-                            lab21: do {
-                                if (!(out_grouping(g_v, 97, 117)))
-                                {
-                                    break lab21;
-                                }
-                                break golab20;
-                            } while (false);
-                            if (cursor >= limit)
-                            {
-                                break lab13;
-                            }
-                            cursor++;
-                        }
-                        // setmark p2, line 39
-                        I_p2 = cursor;
-                    } while (false);
-                    cursor = v_8;
-                    return true;
-                }
-
-                private boolean r_RV() {
-                    if (!(I_pV <= cursor))
-                    {
-                        return false;
-                    }
-                    return true;
-                }
+  private boolean r_mark_regions() {
+    I_pV = limit;
+    I_p1 = limit;
+    I_p2 = limit;
+    int v_1 = cursor;
+lab0: {
+lab1: {
+        int v_2 = cursor;
+lab2: {
+        if (!(in_grouping(g_v, 97, 117)))
+        {
+          break lab2;
+        }
+lab3: {
+        int v_3 = cursor;
+lab4: {
+        if (!(out_grouping(g_v, 97, 117)))
+        {
+          break lab4;
+        }
+golab5: while(true)
+        {
+lab6: {
+        if (!(in_grouping(g_v, 97, 117)))
+        {
+          break lab6;
+        }
+        break golab5;
+}
+if (cursor >= limit)
+{
+  break lab4;
+}
+cursor++;
+        }
+break lab3;
+}
+cursor = v_3;
+if (!(in_grouping(g_v, 97, 117)))
+{
+  break lab2;
+}
+golab7: while(true)
+{
+lab8: {
+        if (!(out_grouping(g_v, 97, 117)))
+        {
+          break lab8;
+        }
+        break golab7;
+}
+if (cursor >= limit)
+{
+  break lab2;
+}
+cursor++;
+}
+}
+break lab1;
+}
+cursor = v_2;
+if (!(out_grouping(g_v, 97, 117)))
+{
+  break lab0;
+}
+lab9: {
+        int v_6 = cursor;
+lab10: {
+         if (!(out_grouping(g_v, 97, 117)))
+         {
+           break lab10;
+         }
+golab11: while(true)
+         {
+lab12: {
+         if (!(in_grouping(g_v, 97, 117)))
+         {
+           break lab12;
+         }
+         break golab11;
+}
+if (cursor >= limit)
+{
+  break lab10;
+}
+cursor++;
+         }
+break lab9;
+}
+cursor = v_6;
+if (!(in_grouping(g_v, 97, 117)))
+{
+  break lab0;
+}
+if (cursor >= limit)
+{
+  break lab0;
+}
+cursor++;
+}
+}
+I_pV = cursor;
+}
+cursor = v_1;
+int v_8 = cursor;
+lab13: {
+golab14: while(true)
+         {
+lab15: {
+         if (!(in_grouping(g_v, 97, 117)))
+         {
+           break lab15;
+         }
+         break golab14;
+}
+if (cursor >= limit)
+{
+  break lab13;
+}
+cursor++;
+         }
+golab16: while(true)
+{
+lab17: {
+         if (!(out_grouping(g_v, 97, 117)))
+         {
+           break lab17;
+         }
+         break golab16;
+}
+if (cursor >= limit)
+{
+  break lab13;
+}
+cursor++;
+}
+I_p1 = cursor;
+golab18: while(true)
+{
+lab19: {
+         if (!(in_grouping(g_v, 97, 117)))
+         {
+           break lab19;
+         }
+         break golab18;
+}
+if (cursor >= limit)
+{
+  break lab13;
+}
+cursor++;
+}
+golab20: while(true)
+{
+lab21: {
+         if (!(out_grouping(g_v, 97, 117)))
+         {
+           break lab21;
+         }
+         break golab20;
+}
+if (cursor >= limit)
+{
+  break lab13;
+}
+cursor++;
+}
+I_p2 = cursor;
+}
+cursor = v_8;
+return true;
+  }
 
-                private boolean r_R2() {
-                    if (!(I_p2 <= cursor))
-                    {
-                        return false;
-                    }
-                    return true;
-                }
+private boolean r_RV() {
+  if (!(I_pV <= cursor))
+  {
+    return false;
+  }
+  return true;
+}
 
-                private boolean r_R1() {
-                    if (!(I_p1 <= cursor))
-                    {
-                        return false;
-                    }
-                    return true;
-                }
+private boolean r_R2() {
+  if (!(I_p2 <= cursor))
+  {
+    return false;
+  }
+  return true;
+}
 
-                private boolean r_aditzak() {
-            int among_var;
-                    // (, line 49
-                    // [, line 50
-                    ket = cursor;
-                    // substring, line 50
-                    among_var = find_among_b(a_0, 109);
-                    if (among_var == 0)
-                    {
-                        return false;
-                    }
-                    // ], line 50
-                    bra = cursor;
-                    switch(among_var) {
-                        case 0:
-                            return false;
-                        case 1:
-                            // (, line 61
-                            // call RV, line 61
-                            if (!r_RV())
-                            {
-                                return false;
-                            }
-                            // delete, line 61
-                            slice_del();
-                            break;
-                        case 2:
-                            // (, line 63
-                            // call R2, line 63
-                            if (!r_R2())
-                            {
-                                return false;
-                            }
-                            // delete, line 63
-                            slice_del();
-                            break;
-                        case 3:
-                            // (, line 65
-                            // <-, line 65
-                            slice_from("atseden");
-                            break;
-                        case 4:
-                            // (, line 67
-                            // <-, line 67
-                            slice_from("arabera");
-                            break;
-                        case 5:
-                            // (, line 69
-                            // <-, line 69
-                            slice_from("baditu");
-                            break;
-                    }
-                    return true;
-                }
+private boolean r_R1() {
+  if (!(I_p1 <= cursor))
+  {
+    return false;
+  }
+  return true;
+}
 
-                private boolean r_izenak() {
-            int among_var;
-                    // (, line 74
-                    // [, line 75
-                    ket = cursor;
-                    // substring, line 75
-                    among_var = find_among_b(a_1, 295);
-                    if (among_var == 0)
-                    {
-                        return false;
-                    }
-                    // ], line 75
-                    bra = cursor;
-                    switch(among_var) {
-                        case 0:
-                            return false;
-                        case 1:
-                            // (, line 105
-                            // call RV, line 105
-                            if (!r_RV())
-                            {
-                                return false;
-                            }
-                            // delete, line 105
-                            slice_del();
-                            break;
-                        case 2:
-                            // (, line 107
-                            // call R2, line 107
-                            if (!r_R2())
-                            {
-                                return false;
-                            }
-                            // delete, line 107
-                            slice_del();
-                            break;
-                        case 3:
-                            // (, line 109
-                            // <-, line 109
-                            slice_from("jok");
-                            break;
-                        case 4:
-                            // (, line 111
-                            // call R1, line 111
-                            if (!r_R1())
-                            {
-                                return false;
-                            }
-                            // delete, line 111
-                            slice_del();
-                            break;
-                        case 5:
-                            // (, line 113
-                            // <-, line 113
-                            slice_from("tra");
-                            break;
-                        case 6:
-                            // (, line 115
-                            // <-, line 115
-                            slice_from("minutu");
-                            break;
-                        case 7:
-                            // (, line 117
-                            // <-, line 117
-                            slice_from("zehar");
-                            break;
-                        case 8:
-                            // (, line 119
-                            // <-, line 119
-                            slice_from("geldi");
-                            break;
-                        case 9:
-                            // (, line 121
-                            // <-, line 121
-                            slice_from("igaro");
-                            break;
-                        case 10:
-                            // (, line 123
-                            // <-, line 123
-                            slice_from("aurka");
-                            break;
-                    }
-                    return true;
-                }
+private boolean r_aditzak() {
+  int among_var;
+  ket = cursor;
+  among_var = find_among_b(a_0);
+  if (among_var == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  switch (among_var) {
+    case 1:
+      if (!r_RV())
+      {
+        return false;
+      }
+      slice_del();
+      break;
+    case 2:
+      if (!r_R2())
+      {
+        return false;
+      }
+      slice_del();
+      break;
+    case 3:
+      slice_from("atseden");
+      break;
+    case 4:
+      slice_from("arabera");
+      break;
+    case 5:
+      slice_from("baditu");
+      break;
+  }
+  return true;
+}
 
-                private boolean r_adjetiboak() {
-            int among_var;
-                    // (, line 127
-                    // [, line 128
-                    ket = cursor;
-                    // substring, line 128
-                    among_var = find_among_b(a_2, 19);
-                    if (among_var == 0)
-                    {
-                        return false;
-                    }
-                    // ], line 128
-                    bra = cursor;
-                    switch(among_var) {
-                        case 0:
-                            return false;
-                        case 1:
-                            // (, line 131
-                            // call RV, line 131
-                            if (!r_RV())
-                            {
-                                return false;
-                            }
-                            // delete, line 131
-                            slice_del();
-                            break;
-                        case 2:
-                            // (, line 133
-                            // <-, line 133
-                            slice_from("z");
-                            break;
-                    }
-                    return true;
-                }
+private boolean r_izenak() {
+  int among_var;
+  ket = cursor;
+  among_var = find_among_b(a_1);
+  if (among_var == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  switch (among_var) {
+    case 1:
+      if (!r_RV())
+      {
+        return false;
+      }
+      slice_del();
+      break;
+    case 2:
+      if (!r_R2())
+      {
+        return false;
+      }
+      slice_del();
+      break;
+    case 3:
+      slice_from("jok");
+      break;
+    case 4:
+      if (!r_R1())
+      {
+        return false;
+      }
+      slice_del();
+      break;
+    case 5:
+      slice_from("tra");
+      break;
+    case 6:
+      slice_from("minutu");
+      break;
+    case 7:
+      slice_from("zehar");
+      break;
+    case 8:
+      slice_from("geldi");
+      break;
+    case 9:
+      slice_from("igaro");
+      break;
+    case 10:
+      slice_from("aurka");
+      break;
+  }
+  return true;
+}
 
-                @Override
-                public boolean stem() {
-            int v_1;
-            int v_2;
-            int v_3;
-            int v_4;
-                    // (, line 139
-                    // do, line 140
-                    v_1 = cursor;
-                    lab0: do {
-                        // call mark_regions, line 140
-                        if (!r_mark_regions())
-                        {
-                            break lab0;
-                        }
-                    } while (false);
-                    cursor = v_1;
-                    // backwards, line 141
-                    limit_backward = cursor; cursor = limit;
-                    // (, line 141
-                    // repeat, line 142
-                    replab1: while(true)
-                    {
-                        v_2 = limit - cursor;
-                        lab2: do {
-                            // call aditzak, line 142
-                            if (!r_aditzak())
-                            {
-                                break lab2;
-                            }
-                            continue replab1;
-                        } while (false);
-                        cursor = limit - v_2;
-                        break replab1;
-                    }
-                    // repeat, line 143
-                    replab3: while(true)
-                    {
-                        v_3 = limit - cursor;
-                        lab4: do {
-                            // call izenak, line 143
-                            if (!r_izenak())
-                            {
-                                break lab4;
-                            }
-                            continue replab3;
-                        } while (false);
-                        cursor = limit - v_3;
-                        break replab3;
-                    }
-                    // do, line 144
-                    v_4 = limit - cursor;
-                    lab5: do {
-                        // call adjetiboak, line 144
-                        if (!r_adjetiboak())
-                        {
-                            break lab5;
-                        }
-                    } while (false);
-                    cursor = limit - v_4;
-                    cursor = limit_backward;                    return true;
-                }
+private boolean r_adjetiboak() {
+  int among_var;
+  ket = cursor;
+  among_var = find_among_b(a_2);
+  if (among_var == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  switch (among_var) {
+    case 1:
+      if (!r_RV())
+      {
+        return false;
+      }
+      slice_del();
+      break;
+    case 2:
+      slice_from("z");
+      break;
+  }
+  return true;
+}
 
-        @Override
-        public boolean equals( Object o ) {
-            return o instanceof BasqueStemmer;
+public boolean stem() {
+  r_mark_regions();
+  limit_backward = cursor;
+  cursor = limit;
+  while(true)
+  {
+    int v_2 = limit - cursor;
+lab0: {
+        if (!r_aditzak())
+        {
+          break lab0;
         }
-
-        @Override
-        public int hashCode() {
-            return BasqueStemmer.class.getName().hashCode();
+        continue;
+}
+cursor = limit - v_2;
+break;
+  }
+while(true)
+{
+  int v_3 = limit - cursor;
+lab1: {
+        if (!r_izenak())
+        {
+          break lab1;
         }
+        continue;
+}
+cursor = limit - v_3;
+break;
+}
+int v_4 = limit - cursor;
+r_adjetiboak();
+cursor = limit - v_4;
+cursor = limit_backward;
+return true;
+}
+
+@Override
+public boolean equals( Object o ) {
+  return o instanceof BasqueStemmer;
+}
+
+@Override
+public int hashCode() {
+  return BasqueStemmer.class.getName().hashCode();
+}
 
 
 
diff --git a/lucene/analysis/common/src/java/org/tartarus/snowball/ext/CatalanStemmer.java b/lucene/analysis/common/src/java/org/tartarus/snowball/ext/CatalanStemmer.java
index d812ea9..19da21e 100644
--- a/lucene/analysis/common/src/java/org/tartarus/snowball/ext/CatalanStemmer.java
+++ b/lucene/analysis/common/src/java/org/tartarus/snowball/ext/CatalanStemmer.java
@@ -1,1070 +1,900 @@
-// This file was generated automatically by the Snowball to Java compiler
+// Generated by Snowball 2.0.0 - https://snowballstem.org/
 
 package org.tartarus.snowball.ext;
 
 import org.tartarus.snowball.Among;
-import org.tartarus.snowball.SnowballProgram;
 
- /**
-  * This class was automatically generated by a Snowball to Java compiler 
-  * It implements the stemming algorithm defined by a snowball script.
-  */
+/**
+ * This class implements the stemming algorithm defined by a snowball script.
+ * <p>
+ * Generated by Snowball 2.0.0 - https://snowballstem.org/
+ * </p>
+ */
+@SuppressWarnings("unused")
+public class CatalanStemmer extends org.tartarus.snowball.SnowballStemmer {
 
-@SuppressWarnings("unused") public class CatalanStemmer extends SnowballProgram {
+  private static final long serialVersionUID = 1L;
+  private static final java.lang.invoke.MethodHandles.Lookup methodObject = java.lang.invoke.MethodHandles.lookup();
 
-private static final long serialVersionUID = 1L;
+  private final static Among a_0[] = {
+    new Among("", -1, 7),
+    new Among("\u00B7", 0, 6),
+    new Among("\u00E0", 0, 1),
+    new Among("\u00E1", 0, 1),
+    new Among("\u00E8", 0, 2),
+    new Among("\u00E9", 0, 2),
+    new Among("\u00EC", 0, 3),
+    new Among("\u00ED", 0, 3),
+    new Among("\u00EF", 0, 3),
+    new Among("\u00F2", 0, 4),
+    new Among("\u00F3", 0, 4),
+    new Among("\u00FA", 0, 5),
+    new Among("\u00FC", 0, 5)
+  };
 
-        /* patched */ private static final java.lang.invoke.MethodHandles.Lookup methodObject = java.lang.invoke.MethodHandles.lookup();
+  private final static Among a_1[] = {
+    new Among("la", -1, 1),
+    new Among("-la", 0, 1),
+    new Among("sela", 0, 1),
+    new Among("le", -1, 1),
+    new Among("me", -1, 1),
+    new Among("-me", 4, 1),
+    new Among("se", -1, 1),
+    new Among("-te", -1, 1),
+    new Among("hi", -1, 1),
+    new Among("'hi", 8, 1),
+    new Among("li", -1, 1),
+    new Among("-li", 10, 1),
+    new Among("'l", -1, 1),
+    new Among("'m", -1, 1),
+    new Among("-m", -1, 1),
+    new Among("'n", -1, 1),
+    new Among("-n", -1, 1),
+    new Among("ho", -1, 1),
+    new Among("'ho", 17, 1),
+    new Among("lo", -1, 1),
+    new Among("selo", 19, 1),
+    new Among("'s", -1, 1),
+    new Among("las", -1, 1),
+    new Among("selas", 22, 1),
+    new Among("les", -1, 1),
+    new Among("-les", 24, 1),
+    new Among("'ls", -1, 1),
+    new Among("-ls", -1, 1),
+    new Among("'ns", -1, 1),
+    new Among("-ns", -1, 1),
+    new Among("ens", -1, 1),
+    new Among("los", -1, 1),
+    new Among("selos", 31, 1),
+    new Among("nos", -1, 1),
+    new Among("-nos", 33, 1),
+    new Among("vos", -1, 1),
+    new Among("us", -1, 1),
+    new Among("-us", 36, 1),
+    new Among("'t", -1, 1)
+  };
 
-                private final static Among a_0[] = {
-                    new Among ( "", -1, 13, "", methodObject ),
-                    new Among ( "\u00B7", 0, 12, "", methodObject ),
-                    new Among ( "\u00E0", 0, 2, "", methodObject ),
-                    new Among ( "\u00E1", 0, 1, "", methodObject ),
-                    new Among ( "\u00E8", 0, 4, "", methodObject ),
-                    new Among ( "\u00E9", 0, 3, "", methodObject ),
-                    new Among ( "\u00EC", 0, 6, "", methodObject ),
-                    new Among ( "\u00ED", 0, 5, "", methodObject ),
-                    new Among ( "\u00EF", 0, 11, "", methodObject ),
-                    new Among ( "\u00F2", 0, 8, "", methodObject ),
-                    new Among ( "\u00F3", 0, 7, "", methodObject ),
-                    new Among ( "\u00FA", 0, 9, "", methodObject ),
-                    new Among ( "\u00FC", 0, 10, "", methodObject )
-                };
+  private final static Among a_2[] = {
+    new Among("ica", -1, 4),
+    new Among("l\u00F3gica", 0, 3),
+    new Among("enca", -1, 1),
+    new Among("ada", -1, 2),
+    new Among("ancia", -1, 1),
+    new Among("encia", -1, 1),
+    new Among("\u00E8ncia", -1, 1),
+    new Among("\u00EDcia", -1, 1),
+    new Among("logia", -1, 3),
+    new Among("inia", -1, 1),
+    new Among("\u00EDinia", 9, 1),
+    new Among("eria", -1, 1),
+    new Among("\u00E0ria", -1, 1),
+    new Among("at\u00F2ria", -1, 1),
+    new Among("alla", -1, 1),
+    new Among("ella", -1, 1),
+    new Among("\u00EDvola", -1, 1),
+    new Among("ima", -1, 1),
+    new Among("\u00EDssima", 17, 1),
+    new Among("qu\u00EDssima", 18, 5),
+    new Among("ana", -1, 1),
+    new Among("ina", -1, 1),
+    new Among("era", -1, 1),
+    new Among("sfera", 22, 1),
+    new Among("ora", -1, 1),
+    new Among("dora", 24, 1),
+    new Among("adora", 25, 1),
+    new Among("adura", -1, 1),
+    new Among("esa", -1, 1),
+    new Among("osa", -1, 1),
+    new Among("assa", -1, 1),
+    new Among("essa", -1, 1),
+    new Among("issa", -1, 1),
+    new Among("eta", -1, 1),
+    new Among("ita", -1, 1),
+    new Among("ota", -1, 1),
+    new Among("ista", -1, 1),
+    new Among("ialista", 36, 1),
+    new Among("ionista", 36, 1),
+    new Among("iva", -1, 1),
+    new Among("ativa", 39, 1),
+    new Among("n\u00E7a", -1, 1),
+    new Among("log\u00EDa", -1, 3),
+    new Among("ic", -1, 4),
+    new Among("\u00EDstic", 43, 1),
+    new Among("enc", -1, 1),
+    new Among("esc", -1, 1),
+    new Among("ud", -1, 1),
+    new Among("atge", -1, 1),
+    new Among("ble", -1, 1),
+    new Among("able", 49, 1),
+    new Among("ible", 49, 1),
+    new Among("isme", -1, 1),
+    new Among("ialisme", 52, 1),
+    new Among("ionisme", 52, 1),
+    new Among("ivisme", 52, 1),
+    new Among("aire", -1, 1),
+    new Among("icte", -1, 1),
+    new Among("iste", -1, 1),
+    new Among("ici", -1, 1),
+    new Among("\u00EDci", -1, 1),
+    new Among("logi", -1, 3),
+    new Among("ari", -1, 1),
+    new Among("tori", -1, 1),
+    new Among("al", -1, 1),
+    new Among("il", -1, 1),
+    new Among("all", -1, 1),
+    new Among("ell", -1, 1),
+    new Among("\u00EDvol", -1, 1),
+    new Among("isam", -1, 1),
+    new Among("issem", -1, 1),
+    new Among("\u00ECssem", -1, 1),
+    new Among("\u00EDssem", -1, 1),
+    new Among("\u00EDssim", -1, 1),
+    new Among("qu\u00EDssim", 73, 5),
+    new Among("amen", -1, 1),
+    new Among("\u00ECssin", -1, 1),
+    new Among("ar", -1, 1),
+    new Among("ificar", 77, 1),
+    new Among("egar", 77, 1),
+    new Among("ejar", 77, 1),
+    new Among("itar", 77, 1),
+    new Among("itzar", 77, 1),
+    new Among("fer", -1, 1),
+    new Among("or", -1, 1),
+    new Among("dor", 84, 1),
+    new Among("dur", -1, 1),
+    new Among("doras", -1, 1),
+    new Among("ics", -1, 4),
+    new Among("l\u00F3gics", 88, 3),
+    new Among("uds", -1, 1),
+    new Among("nces", -1, 1),
+    new Among("ades", -1, 2),
+    new Among("ancies", -1, 1),
+    new Among("encies", -1, 1),
+    new Among("\u00E8ncies", -1, 1),
+    new Among("\u00EDcies", -1, 1),
+    new Among("logies", -1, 3),
+    new Among("inies", -1, 1),
+    new Among("\u00EDnies", -1, 1),
+    new Among("eries", -1, 1),
+    new Among("\u00E0ries", -1, 1),
+    new Among("at\u00F2ries", -1, 1),
+    new Among("bles", -1, 1),
+    new Among("ables", 103, 1),
+    new Among("ibles", 103, 1),
+    new Among("imes", -1, 1),
+    new Among("\u00EDssimes", 106, 1),
+    new Among("qu\u00EDssimes", 107, 5),
+    new Among("formes", -1, 1),
+    new Among("ismes", -1, 1),
+    new Among("ialismes", 110, 1),
+    new Among("ines", -1, 1),
+    new Among("eres", -1, 1),
+    new Among("ores", -1, 1),
+    new Among("dores", 114, 1),
+    new Among("idores", 115, 1),
+    new Among("dures", -1, 1),
+    new Among("eses", -1, 1),
+    new Among("oses", -1, 1),
+    new Among("asses", -1, 1),
+    new Among("ictes", -1, 1),
+    new Among("ites", -1, 1),
+    new Among("otes", -1, 1),
+    new Among("istes", -1, 1),
+    new Among("ialistes", 124, 1),
+    new Among("ionistes", 124, 1),
+    new Among("iques", -1, 4),
+    new Among("l\u00F3giques", 127, 3),
+    new Among("ives", -1, 1),
+    new Among("atives", 129, 1),
+    new Among("log\u00EDes", -1, 3),
+    new Among("alleng\u00FCes", -1, 1),
+    new Among("icis", -1, 1),
+    new Among("\u00EDcis", -1, 1),
+    new Among("logis", -1, 3),
+    new Among("aris", -1, 1),
+    new Among("toris", -1, 1),
+    new Among("ls", -1, 1),
+    new Among("als", 138, 1),
+    new Among("ells", 138, 1),
+    new Among("ims", -1, 1),
+    new Among("\u00EDssims", 141, 1),
+    new Among("qu\u00EDssims", 142, 5),
+    new Among("ions", -1, 1),
+    new Among("cions", 144, 1),
+    new Among("acions", 145, 2),
+    new Among("esos", -1, 1),
+    new Among("osos", -1, 1),
+    new Among("assos", -1, 1),
+    new Among("issos", -1, 1),
+    new Among("ers", -1, 1),
+    new Among("ors", -1, 1),
+    new Among("dors", 152, 1),
+    new Among("adors", 153, 1),
+    new Among("idors", 153, 1),
+    new Among("ats", -1, 1),
+    new Among("itats", 156, 1),
+    new Among("bilitats", 157, 1),
+    new Among("ivitats", 157, 1),
+    new Among("ativitats", 159, 1),
+    new Among("\u00EFtats", 156, 1),
+    new Among("ets", -1, 1),
+    new Among("ants", -1, 1),
+    new Among("ents", -1, 1),
+    new Among("ments", 164, 1),
+    new Among("aments", 165, 1),
+    new Among("ots", -1, 1),
+    new Among("uts", -1, 1),
+    new Among("ius", -1, 1),
+    new Among("trius", 169, 1),
+    new Among("atius", 169, 1),
+    new Among("\u00E8s", -1, 1),
+    new Among("\u00E9s", -1, 1),
+    new Among("\u00EDs", -1, 1),
+    new Among("d\u00EDs", 174, 1),
+    new Among("\u00F3s", -1, 1),
+    new Among("itat", -1, 1),
+    new Among("bilitat", 177, 1),
+    new Among("ivitat", 177, 1),
+    new Among("ativitat", 179, 1),
+    new Among("\u00EFtat", -1, 1),
+    new Among("et", -1, 1),
+    new Among("ant", -1, 1),
+    new Among("ent", -1, 1),
+    new Among("ient", 184, 1),
+    new Among("ment", 184, 1),
+    new Among("ament", 186, 1),
+    new Among("isament", 187, 1),
+    new Among("ot", -1, 1),
+    new Among("isseu", -1, 1),
+    new Among("\u00ECsseu", -1, 1),
+    new Among("\u00EDsseu", -1, 1),
+    new Among("triu", -1, 1),
+    new Among("\u00EDssiu", -1, 1),
+    new Among("atiu", -1, 1),
+    new Among("\u00F3", -1, 1),
+    new Among("i\u00F3", 196, 1),
+    new Among("ci\u00F3", 197, 1),
+    new Among("aci\u00F3", 198, 1)
+  };
 
-                private final static Among a_1[] = {
-                    new Among ( "la", -1, 1, "", methodObject ),
-                    new Among ( "-la", 0, 1, "", methodObject ),
-                    new Among ( "sela", 0, 1, "", methodObject ),
-                    new Among ( "le", -1, 1, "", methodObject ),
-                    new Among ( "me", -1, 1, "", methodObject ),
-                    new Among ( "-me", 4, 1, "", methodObject ),
-                    new Among ( "se", -1, 1, "", methodObject ),
-                    new Among ( "-te", -1, 1, "", methodObject ),
-                    new Among ( "hi", -1, 1, "", methodObject ),
-                    new Among ( "'hi", 8, 1, "", methodObject ),
-                    new Among ( "li", -1, 1, "", methodObject ),
-                    new Among ( "-li", 10, 1, "", methodObject ),
-                    new Among ( "'l", -1, 1, "", methodObject ),
-                    new Among ( "'m", -1, 1, "", methodObject ),
-                    new Among ( "-m", -1, 1, "", methodObject ),
-                    new Among ( "'n", -1, 1, "", methodObject ),
-                    new Among ( "-n", -1, 1, "", methodObject ),
-                    new Among ( "ho", -1, 1, "", methodObject ),
-                    new Among ( "'ho", 17, 1, "", methodObject ),
-                    new Among ( "lo", -1, 1, "", methodObject ),
-                    new Among ( "selo", 19, 1, "", methodObject ),
-                    new Among ( "'s", -1, 1, "", methodObject ),
-                    new Among ( "las", -1, 1, "", methodObject ),
-                    new Among ( "selas", 22, 1, "", methodObject ),
-                    new Among ( "les", -1, 1, "", methodObject ),
-                    new Among ( "-les", 24, 1, "", methodObject ),
-                    new Among ( "'ls", -1, 1, "", methodObject ),
-                    new Among ( "-ls", -1, 1, "", methodObject ),
-                    new Among ( "'ns", -1, 1, "", methodObject ),
-                    new Among ( "-ns", -1, 1, "", methodObject ),
-                    new Among ( "ens", -1, 1, "", methodObject ),
-                    new Among ( "los", -1, 1, "", methodObject ),
-                    new Among ( "selos", 31, 1, "", methodObject ),
-                    new Among ( "nos", -1, 1, "", methodObject ),
-                    new Among ( "-nos", 33, 1, "", methodObject ),
-                    new Among ( "vos", -1, 1, "", methodObject ),
-                    new Among ( "us", -1, 1, "", methodObject ),
-                    new Among ( "-us", 36, 1, "", methodObject ),
-                    new Among ( "'t", -1, 1, "", methodObject )
-                };
+  private final static Among a_3[] = {
+    new Among("aba", -1, 1),
+    new Among("esca", -1, 1),
+    new Among("isca", -1, 1),
+    new Among("\u00EFsca", -1, 1),
+    new Among("ada", -1, 1),
+    new Among("ida", -1, 1),
+    new Among("uda", -1, 1),
+    new Among("\u00EFda", -1, 1),
+    new Among("ia", -1, 1),
+    new Among("aria", 8, 1),
+    new Among("iria", 8, 1),
+    new Among("ara", -1, 1),
+    new Among("iera", -1, 1),
+    new Among("ira", -1, 1),
+    new Among("adora", -1, 1),
+    new Among("\u00EFra", -1, 1),
+    new Among("ava", -1, 1),
+    new Among("ixa", -1, 1),
+    new Among("itza", -1, 1),
+    new Among("\u00EDa", -1, 1),
+    new Among("ar\u00EDa", 19, 1),
+    new Among("er\u00EDa", 19, 1),
+    new Among("ir\u00EDa", 19, 1),
+    new Among("\u00EFa", -1, 1),
+    new Among("isc", -1, 1),
+    new Among("\u00EFsc", -1, 1),
+    new Among("ad", -1, 1),
+    new Among("ed", -1, 1),
+    new Among("id", -1, 1),
+    new Among("ie", -1, 1),
+    new Among("re", -1, 1),
+    new Among("dre", 30, 1),
+    new Among("ase", -1, 1),
+    new Among("iese", -1, 1),
+    new Among("aste", -1, 1),
+    new Among("iste", -1, 1),
+    new Among("ii", -1, 1),
+    new Among("ini", -1, 1),
+    new Among("esqui", -1, 1),
+    new Among("eixi", -1, 1),
+    new Among("itzi", -1, 1),
+    new Among("am", -1, 1),
+    new Among("em", -1, 1),
+    new Among("arem", 42, 1),
+    new Among("irem", 42, 1),
+    new Among("\u00E0rem", 42, 1),
+    new Among("\u00EDrem", 42, 1),
+    new Among("\u00E0ssem", 42, 1),
+    new Among("\u00E9ssem", 42, 1),
+    new Among("iguem", 42, 1),
+    new Among("\u00EFguem", 42, 1),
+    new Among("avem", 42, 1),
+    new Among("\u00E0vem", 42, 1),
+    new Among("\u00E1vem", 42, 1),
+    new Among("ir\u00ECem", 42, 1),
+    new Among("\u00EDem", 42, 1),
+    new Among("ar\u00EDem", 55, 1),
+    new Among("ir\u00EDem", 55, 1),
+    new Among("assim", -1, 1),
+    new Among("essim", -1, 1),
+    new Among("issim", -1, 1),
+    new Among("\u00E0ssim", -1, 1),
+    new Among("\u00E8ssim", -1, 1),
+    new Among("\u00E9ssim", -1, 1),
+    new Among("\u00EDssim", -1, 1),
+    new Among("\u00EFm", -1, 1),
+    new Among("an", -1, 1),
+    new Among("aban", 66, 1),
+    new Among("arian", 66, 1),
+    new Among("aran", 66, 1),
+    new Among("ieran", 66, 1),
+    new Among("iran", 66, 1),
+    new Among("\u00EDan", 66, 1),
+    new Among("ar\u00EDan", 72, 1),
+    new Among("er\u00EDan", 72, 1),
+    new Among("ir\u00EDan", 72, 1),
+    new Among("en", -1, 1),
+    new Among("ien", 76, 1),
+    new Among("arien", 77, 1),
+    new Among("irien", 77, 1),
+    new Among("aren", 76, 1),
+    new Among("eren", 76, 1),
+    new Among("iren", 76, 1),
+    new Among("\u00E0ren", 76, 1),
+    new Among("\u00EFren", 76, 1),
+    new Among("asen", 76, 1),
+    new Among("iesen", 76, 1),
+    new Among("assen", 76, 1),
+    new Among("essen", 76, 1),
+    new Among("issen", 76, 1),
+    new Among("\u00E9ssen", 76, 1),
+    new Among("\u00EFssen", 76, 1),
+    new Among("esquen", 76, 1),
+    new Among("isquen", 76, 1),
+    new Among("\u00EFsquen", 76, 1),
+    new Among("aven", 76, 1),
+    new Among("ixen", 76, 1),
+    new Among("eixen", 96, 1),
+    new Among("\u00EFxen", 76, 1),
+    new Among("\u00EFen", 76, 1),
+    new Among("in", -1, 1),
+    new Among("inin", 100, 1),
+    new Among("sin", 100, 1),
+    new Among("isin", 102, 1),
+    new Among("assin", 102, 1),
+    new Among("essin", 102, 1),
+    new Among("issin", 102, 1),
+    new Among("\u00EFssin", 102, 1),
+    new Among("esquin", 100, 1),
+    new Among("eixin", 100, 1),
+    new Among("aron", -1, 1),
+    new Among("ieron", -1, 1),
+    new Among("ar\u00E1n", -1, 1),
+    new Among("er\u00E1n", -1, 1),
+    new Among("ir\u00E1n", -1, 1),
+    new Among("i\u00EFn", -1, 1),
+    new Among("ado", -1, 1),
+    new Among("ido", -1, 1),
+    new Among("ando", -1, 2),
+    new Among("iendo", -1, 1),
+    new Among("io", -1, 1),
+    new Among("ixo", -1, 1),
+    new Among("eixo", 121, 1),
+    new Among("\u00EFxo", -1, 1),
+    new Among("itzo", -1, 1),
+    new Among("ar", -1, 1),
+    new Among("tzar", 125, 1),
+    new Among("er", -1, 1),
+    new Among("eixer", 127, 1),
+    new Among("ir", -1, 1),
+    new Among("ador", -1, 1),
+    new Among("as", -1, 1),
+    new Among("abas", 131, 1),
+    new Among("adas", 131, 1),
+    new Among("idas", 131, 1),
+    new Among("aras", 131, 1),
+    new Among("ieras", 131, 1),
+    new Among("\u00EDas", 131, 1),
+    new Among("ar\u00EDas", 137, 1),
+    new Among("er\u00EDas", 137, 1),
+    new Among("ir\u00EDas", 137, 1),
+    new Among("ids", -1, 1),
+    new Among("es", -1, 1),
+    new Among("ades", 142, 1),
+    new Among("ides", 142, 1),
+    new Among("udes", 142, 1),
+    new Among("\u00EFdes", 142, 1),
+    new Among("atges", 142, 1),
+    new Among("ies", 142, 1),
+    new Among("aries", 148, 1),
+    new Among("iries", 148, 1),
+    new Among("ares", 142, 1),
+    new Among("ires", 142, 1),
+    new Among("adores", 142, 1),
+    new Among("\u00EFres", 142, 1),
+    new Among("ases", 142, 1),
+    new Among("ieses", 142, 1),
+    new Among("asses", 142, 1),
+    new Among("esses", 142, 1),
+    new Among("isses", 142, 1),
+    new Among("\u00EFsses", 142, 1),
+    new Among("ques", 142, 1),
+    new Among("esques", 161, 1),
+    new Among("\u00EFsques", 161, 1),
+    new Among("aves", 142, 1),
+    new Among("ixes", 142, 1),
+    new Among("eixes", 165, 1),
+    new Among("\u00EFxes", 142, 1),
+    new Among("\u00EFes", 142, 1),
+    new Among("abais", -1, 1),
+    new Among("arais", -1, 1),
+    new Among("ierais", -1, 1),
+    new Among("\u00EDais", -1, 1),
+    new Among("ar\u00EDais", 172, 1),
+    new Among("er\u00EDais", 172, 1),
+    new Among("ir\u00EDais", 172, 1),
+    new Among("aseis", -1, 1),
+    new Among("ieseis", -1, 1),
+    new Among("asteis", -1, 1),
+    new Among("isteis", -1, 1),
+    new Among("inis", -1, 1),
+    new Among("sis", -1, 1),
+    new Among("isis", 181, 1),
+    new Among("assis", 181, 1),
+    new Among("essis", 181, 1),
+    new Among("issis", 181, 1),
+    new Among("\u00EFssis", 181, 1),
+    new Among("esquis", -1, 1),
+    new Among("eixis", -1, 1),
+    new Among("itzis", -1, 1),
+    new Among("\u00E1is", -1, 1),
+    new Among("ar\u00E9is", -1, 1),
+    new Among("er\u00E9is", -1, 1),
+    new Among("ir\u00E9is", -1, 1),
+    new Among("ams", -1, 1),
+    new Among("ados", -1, 1),
+    new Among("idos", -1, 1),
+    new Among("amos", -1, 1),
+    new Among("\u00E1bamos", 197, 1),
+    new Among("\u00E1ramos", 197, 1),
+    new Among("i\u00E9ramos", 197, 1),
+    new Among("\u00EDamos", 197, 1),
+    new Among("ar\u00EDamos", 201, 1),
+    new Among("er\u00EDamos", 201, 1),
+    new Among("ir\u00EDamos", 201, 1),
+    new Among("aremos", -1, 1),
+    new Among("eremos", -1, 1),
+    new Among("iremos", -1, 1),
+    new Among("\u00E1semos", -1, 1),
+    new Among("i\u00E9semos", -1, 1),
+    new Among("imos", -1, 1),
+    new Among("adors", -1, 1),
+    new Among("ass", -1, 1),
+    new Among("erass", 212, 1),
+    new Among("ess", -1, 1),
+    new Among("ats", -1, 1),
+    new Among("its", -1, 1),
+    new Among("ents", -1, 1),
+    new Among("\u00E0s", -1, 1),
+    new Among("ar\u00E0s", 218, 1),
+    new Among("ir\u00E0s", 218, 1),
+    new Among("ar\u00E1s", -1, 1),
+    new Among("er\u00E1s", -1, 1),
+    new Among("ir\u00E1s", -1, 1),
+    new Among("\u00E9s", -1, 1),
+    new Among("ar\u00E9s", 224, 1),
+    new Among("\u00EDs", -1, 1),
+    new Among("i\u00EFs", -1, 1),
+    new Among("at", -1, 1),
+    new Among("it", -1, 1),
+    new Among("ant", -1, 1),
+    new Among("ent", -1, 1),
+    new Among("int", -1, 1),
+    new Among("ut", -1, 1),
+    new Among("\u00EFt", -1, 1),
+    new Among("au", -1, 1),
+    new Among("erau", 235, 1),
+    new Among("ieu", -1, 1),
+    new Among("ineu", -1, 1),
+    new Among("areu", -1, 1),
+    new Among("ireu", -1, 1),
+    new Among("\u00E0reu", -1, 1),
+    new Among("\u00EDreu", -1, 1),
+    new Among("asseu", -1, 1),
+    new Among("esseu", -1, 1),
+    new Among("eresseu", 244, 1),
+    new Among("\u00E0sseu", -1, 1),
+    new Among("\u00E9sseu", -1, 1),
+    new Among("igueu", -1, 1),
+    new Among("\u00EFgueu", -1, 1),
+    new Among("\u00E0veu", -1, 1),
+    new Among("\u00E1veu", -1, 1),
+    new Among("itzeu", -1, 1),
+    new Among("\u00ECeu", -1, 1),
+    new Among("ir\u00ECeu", 253, 1),
+    new Among("\u00EDeu", -1, 1),
+    new Among("ar\u00EDeu", 255, 1),
+    new Among("ir\u00EDeu", 255, 1),
+    new Among("assiu", -1, 1),
+    new Among("issiu", -1, 1),
+    new Among("\u00E0ssiu", -1, 1),
+    new Among("\u00E8ssiu", -1, 1),
+    new Among("\u00E9ssiu", -1, 1),
+    new Among("\u00EDssiu", -1, 1),
+    new Among("\u00EFu", -1, 1),
+    new Among("ix", -1, 1),
+    new Among("eix", 265, 1),
+    new Among("\u00EFx", -1, 1),
+    new Among("itz", -1, 1),
+    new Among("i\u00E0", -1, 1),
+    new Among("ar\u00E0", -1, 1),
+    new Among("ir\u00E0", -1, 1),
+    new Among("itz\u00E0", -1, 1),
+    new Among("ar\u00E1", -1, 1),
+    new Among("er\u00E1", -1, 1),
+    new Among("ir\u00E1", -1, 1),
+    new Among("ir\u00E8", -1, 1),
+    new Among("ar\u00E9", -1, 1),
+    new Among("er\u00E9", -1, 1),
+    new Among("ir\u00E9", -1, 1),
+    new Among("\u00ED", -1, 1),
+    new Among("i\u00EF", -1, 1),
+    new Among("i\u00F3", -1, 1)
+  };
 
-                private final static Among a_2[] = {
-                    new Among ( "ica", -1, 4, "", methodObject ),
-                    new Among ( "l\u00F3gica", 0, 3, "", methodObject ),
-                    new Among ( "enca", -1, 1, "", methodObject ),
-                    new Among ( "ada", -1, 2, "", methodObject ),
-                    new Among ( "ancia", -1, 1, "", methodObject ),
-                    new Among ( "encia", -1, 1, "", methodObject ),
-                    new Among ( "\u00E8ncia", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDcia", -1, 1, "", methodObject ),
-                    new Among ( "logia", -1, 3, "", methodObject ),
-                    new Among ( "inia", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDinia", 9, 1, "", methodObject ),
-                    new Among ( "eria", -1, 1, "", methodObject ),
-                    new Among ( "\u00E0ria", -1, 1, "", methodObject ),
-                    new Among ( "at\u00F2ria", -1, 1, "", methodObject ),
-                    new Among ( "alla", -1, 1, "", methodObject ),
-                    new Among ( "ella", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDvola", -1, 1, "", methodObject ),
-                    new Among ( "ima", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDssima", 17, 1, "", methodObject ),
-                    new Among ( "qu\u00EDssima", 18, 5, "", methodObject ),
-                    new Among ( "ana", -1, 1, "", methodObject ),
-                    new Among ( "ina", -1, 1, "", methodObject ),
-                    new Among ( "era", -1, 1, "", methodObject ),
-                    new Among ( "sfera", 22, 1, "", methodObject ),
-                    new Among ( "ora", -1, 1, "", methodObject ),
-                    new Among ( "dora", 24, 1, "", methodObject ),
-                    new Among ( "adora", 25, 1, "", methodObject ),
-                    new Among ( "adura", -1, 1, "", methodObject ),
-                    new Among ( "esa", -1, 1, "", methodObject ),
-                    new Among ( "osa", -1, 1, "", methodObject ),
-                    new Among ( "assa", -1, 1, "", methodObject ),
-                    new Among ( "essa", -1, 1, "", methodObject ),
-                    new Among ( "issa", -1, 1, "", methodObject ),
-                    new Among ( "eta", -1, 1, "", methodObject ),
-                    new Among ( "ita", -1, 1, "", methodObject ),
-                    new Among ( "ota", -1, 1, "", methodObject ),
-                    new Among ( "ista", -1, 1, "", methodObject ),
-                    new Among ( "ialista", 36, 1, "", methodObject ),
-                    new Among ( "ionista", 36, 1, "", methodObject ),
-                    new Among ( "iva", -1, 1, "", methodObject ),
-                    new Among ( "ativa", 39, 1, "", methodObject ),
-                    new Among ( "n\u00E7a", -1, 1, "", methodObject ),
-                    new Among ( "log\u00EDa", -1, 3, "", methodObject ),
-                    new Among ( "ic", -1, 4, "", methodObject ),
-                    new Among ( "\u00EDstic", 43, 1, "", methodObject ),
-                    new Among ( "enc", -1, 1, "", methodObject ),
-                    new Among ( "esc", -1, 1, "", methodObject ),
-                    new Among ( "ud", -1, 1, "", methodObject ),
-                    new Among ( "atge", -1, 1, "", methodObject ),
-                    new Among ( "ble", -1, 1, "", methodObject ),
-                    new Among ( "able", 49, 1, "", methodObject ),
-                    new Among ( "ible", 49, 1, "", methodObject ),
-                    new Among ( "isme", -1, 1, "", methodObject ),
-                    new Among ( "ialisme", 52, 1, "", methodObject ),
-                    new Among ( "ionisme", 52, 1, "", methodObject ),
-                    new Among ( "ivisme", 52, 1, "", methodObject ),
-                    new Among ( "aire", -1, 1, "", methodObject ),
-                    new Among ( "icte", -1, 1, "", methodObject ),
-                    new Among ( "iste", -1, 1, "", methodObject ),
-                    new Among ( "ici", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDci", -1, 1, "", methodObject ),
-                    new Among ( "logi", -1, 3, "", methodObject ),
-                    new Among ( "ari", -1, 1, "", methodObject ),
-                    new Among ( "tori", -1, 1, "", methodObject ),
-                    new Among ( "al", -1, 1, "", methodObject ),
-                    new Among ( "il", -1, 1, "", methodObject ),
-                    new Among ( "all", -1, 1, "", methodObject ),
-                    new Among ( "ell", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDvol", -1, 1, "", methodObject ),
-                    new Among ( "isam", -1, 1, "", methodObject ),
-                    new Among ( "issem", -1, 1, "", methodObject ),
-                    new Among ( "\u00ECssem", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDssem", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDssim", -1, 1, "", methodObject ),
-                    new Among ( "qu\u00EDssim", 73, 5, "", methodObject ),
-                    new Among ( "amen", -1, 1, "", methodObject ),
-                    new Among ( "\u00ECssin", -1, 1, "", methodObject ),
-                    new Among ( "ar", -1, 1, "", methodObject ),
-                    new Among ( "ificar", 77, 1, "", methodObject ),
-                    new Among ( "egar", 77, 1, "", methodObject ),
-                    new Among ( "ejar", 77, 1, "", methodObject ),
-                    new Among ( "itar", 77, 1, "", methodObject ),
-                    new Among ( "itzar", 77, 1, "", methodObject ),
-                    new Among ( "fer", -1, 1, "", methodObject ),
-                    new Among ( "or", -1, 1, "", methodObject ),
-                    new Among ( "dor", 84, 1, "", methodObject ),
-                    new Among ( "dur", -1, 1, "", methodObject ),
-                    new Among ( "doras", -1, 1, "", methodObject ),
-                    new Among ( "ics", -1, 4, "", methodObject ),
-                    new Among ( "l\u00F3gics", 88, 3, "", methodObject ),
-                    new Among ( "uds", -1, 1, "", methodObject ),
-                    new Among ( "nces", -1, 1, "", methodObject ),
-                    new Among ( "ades", -1, 2, "", methodObject ),
-                    new Among ( "ancies", -1, 1, "", methodObject ),
-                    new Among ( "encies", -1, 1, "", methodObject ),
-                    new Among ( "\u00E8ncies", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDcies", -1, 1, "", methodObject ),
-                    new Among ( "logies", -1, 3, "", methodObject ),
-                    new Among ( "inies", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDnies", -1, 1, "", methodObject ),
-                    new Among ( "eries", -1, 1, "", methodObject ),
-                    new Among ( "\u00E0ries", -1, 1, "", methodObject ),
-                    new Among ( "at\u00F2ries", -1, 1, "", methodObject ),
-                    new Among ( "bles", -1, 1, "", methodObject ),
-                    new Among ( "ables", 103, 1, "", methodObject ),
-                    new Among ( "ibles", 103, 1, "", methodObject ),
-                    new Among ( "imes", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDssimes", 106, 1, "", methodObject ),
-                    new Among ( "qu\u00EDssimes", 107, 5, "", methodObject ),
-                    new Among ( "formes", -1, 1, "", methodObject ),
-                    new Among ( "ismes", -1, 1, "", methodObject ),
-                    new Among ( "ialismes", 110, 1, "", methodObject ),
-                    new Among ( "ines", -1, 1, "", methodObject ),
-                    new Among ( "eres", -1, 1, "", methodObject ),
-                    new Among ( "ores", -1, 1, "", methodObject ),
-                    new Among ( "dores", 114, 1, "", methodObject ),
-                    new Among ( "idores", 115, 1, "", methodObject ),
-                    new Among ( "dures", -1, 1, "", methodObject ),
-                    new Among ( "eses", -1, 1, "", methodObject ),
-                    new Among ( "oses", -1, 1, "", methodObject ),
-                    new Among ( "asses", -1, 1, "", methodObject ),
-                    new Among ( "ictes", -1, 1, "", methodObject ),
-                    new Among ( "ites", -1, 1, "", methodObject ),
-                    new Among ( "otes", -1, 1, "", methodObject ),
-                    new Among ( "istes", -1, 1, "", methodObject ),
-                    new Among ( "ialistes", 124, 1, "", methodObject ),
-                    new Among ( "ionistes", 124, 1, "", methodObject ),
-                    new Among ( "iques", -1, 4, "", methodObject ),
-                    new Among ( "l\u00F3giques", 127, 3, "", methodObject ),
-                    new Among ( "ives", -1, 1, "", methodObject ),
-                    new Among ( "atives", 129, 1, "", methodObject ),
-                    new Among ( "log\u00EDes", -1, 3, "", methodObject ),
-                    new Among ( "alleng\u00FCes", -1, 1, "", methodObject ),
-                    new Among ( "icis", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDcis", -1, 1, "", methodObject ),
-                    new Among ( "logis", -1, 3, "", methodObject ),
-                    new Among ( "aris", -1, 1, "", methodObject ),
-                    new Among ( "toris", -1, 1, "", methodObject ),
-                    new Among ( "ls", -1, 1, "", methodObject ),
-                    new Among ( "als", 138, 1, "", methodObject ),
-                    new Among ( "ells", 138, 1, "", methodObject ),
-                    new Among ( "ims", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDssims", 141, 1, "", methodObject ),
-                    new Among ( "qu\u00EDssims", 142, 5, "", methodObject ),
-                    new Among ( "ions", -1, 1, "", methodObject ),
-                    new Among ( "cions", 144, 1, "", methodObject ),
-                    new Among ( "acions", 145, 2, "", methodObject ),
-                    new Among ( "esos", -1, 1, "", methodObject ),
-                    new Among ( "osos", -1, 1, "", methodObject ),
-                    new Among ( "assos", -1, 1, "", methodObject ),
-                    new Among ( "issos", -1, 1, "", methodObject ),
-                    new Among ( "ers", -1, 1, "", methodObject ),
-                    new Among ( "ors", -1, 1, "", methodObject ),
-                    new Among ( "dors", 152, 1, "", methodObject ),
-                    new Among ( "adors", 153, 1, "", methodObject ),
-                    new Among ( "idors", 153, 1, "", methodObject ),
-                    new Among ( "ats", -1, 1, "", methodObject ),
-                    new Among ( "itats", 156, 1, "", methodObject ),
-                    new Among ( "bilitats", 157, 1, "", methodObject ),
-                    new Among ( "ivitats", 157, 1, "", methodObject ),
-                    new Among ( "ativitats", 159, 1, "", methodObject ),
-                    new Among ( "\u00EFtats", 156, 1, "", methodObject ),
-                    new Among ( "ets", -1, 1, "", methodObject ),
-                    new Among ( "ants", -1, 1, "", methodObject ),
-                    new Among ( "ents", -1, 1, "", methodObject ),
-                    new Among ( "ments", 164, 1, "", methodObject ),
-                    new Among ( "aments", 165, 1, "", methodObject ),
-                    new Among ( "ots", -1, 1, "", methodObject ),
-                    new Among ( "uts", -1, 1, "", methodObject ),
-                    new Among ( "ius", -1, 1, "", methodObject ),
-                    new Among ( "trius", 169, 1, "", methodObject ),
-                    new Among ( "atius", 169, 1, "", methodObject ),
-                    new Among ( "\u00E8s", -1, 1, "", methodObject ),
-                    new Among ( "\u00E9s", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDs", -1, 1, "", methodObject ),
-                    new Among ( "d\u00EDs", 174, 1, "", methodObject ),
-                    new Among ( "\u00F3s", -1, 1, "", methodObject ),
-                    new Among ( "itat", -1, 1, "", methodObject ),
-                    new Among ( "bilitat", 177, 1, "", methodObject ),
-                    new Among ( "ivitat", 177, 1, "", methodObject ),
-                    new Among ( "ativitat", 179, 1, "", methodObject ),
-                    new Among ( "\u00EFtat", -1, 1, "", methodObject ),
-                    new Among ( "et", -1, 1, "", methodObject ),
-                    new Among ( "ant", -1, 1, "", methodObject ),
-                    new Among ( "ent", -1, 1, "", methodObject ),
-                    new Among ( "ient", 184, 1, "", methodObject ),
-                    new Among ( "ment", 184, 1, "", methodObject ),
-                    new Among ( "ament", 186, 1, "", methodObject ),
-                    new Among ( "isament", 187, 1, "", methodObject ),
-                    new Among ( "ot", -1, 1, "", methodObject ),
-                    new Among ( "isseu", -1, 1, "", methodObject ),
-                    new Among ( "\u00ECsseu", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDsseu", -1, 1, "", methodObject ),
-                    new Among ( "triu", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDssiu", -1, 1, "", methodObject ),
-                    new Among ( "atiu", -1, 1, "", methodObject ),
-                    new Among ( "\u00F3", -1, 1, "", methodObject ),
-                    new Among ( "i\u00F3", 196, 1, "", methodObject ),
-                    new Among ( "ci\u00F3", 197, 1, "", methodObject ),
-                    new Among ( "aci\u00F3", 198, 1, "", methodObject )
-                };
+  private final static Among a_4[] = {
+    new Among("a", -1, 1),
+    new Among("e", -1, 1),
+    new Among("i", -1, 1),
+    new Among("\u00EFn", -1, 1),
+    new Among("o", -1, 1),
+    new Among("ir", -1, 1),
+    new Among("s", -1, 1),
+    new Among("is", 6, 1),
+    new Among("os", 6, 1),
+    new Among("\u00EFs", 6, 1),
+    new Among("it", -1, 1),
+    new Among("eu", -1, 1),
+    new Among("iu", -1, 1),
+    new Among("iqu", -1, 2),
+    new Among("itz", -1, 1),
+    new Among("\u00E0", -1, 1),
+    new Among("\u00E1", -1, 1),
+    new Among("\u00E9", -1, 1),
+    new Among("\u00EC", -1, 1),
+    new Among("\u00ED", -1, 1),
+    new Among("\u00EF", -1, 1),
+    new Among("\u00F3", -1, 1)
+  };
 
-                private final static Among a_3[] = {
-                    new Among ( "aba", -1, 1, "", methodObject ),
-                    new Among ( "esca", -1, 1, "", methodObject ),
-                    new Among ( "isca", -1, 1, "", methodObject ),
-                    new Among ( "\u00EFsca", -1, 1, "", methodObject ),
-                    new Among ( "ada", -1, 1, "", methodObject ),
-                    new Among ( "ida", -1, 1, "", methodObject ),
-                    new Among ( "uda", -1, 1, "", methodObject ),
-                    new Among ( "\u00EFda", -1, 1, "", methodObject ),
-                    new Among ( "ia", -1, 1, "", methodObject ),
-                    new Among ( "aria", 8, 1, "", methodObject ),
-                    new Among ( "iria", 8, 1, "", methodObject ),
-                    new Among ( "ara", -1, 1, "", methodObject ),
-                    new Among ( "iera", -1, 1, "", methodObject ),
-                    new Among ( "ira", -1, 1, "", methodObject ),
-                    new Among ( "adora", -1, 1, "", methodObject ),
-                    new Among ( "\u00EFra", -1, 1, "", methodObject ),
-                    new Among ( "ava", -1, 1, "", methodObject ),
-                    new Among ( "ixa", -1, 1, "", methodObject ),
-                    new Among ( "itza", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDa", -1, 1, "", methodObject ),
-                    new Among ( "ar\u00EDa", 19, 1, "", methodObject ),
-                    new Among ( "er\u00EDa", 19, 1, "", methodObject ),
-                    new Among ( "ir\u00EDa", 19, 1, "", methodObject ),
-                    new Among ( "\u00EFa", -1, 1, "", methodObject ),
-                    new Among ( "isc", -1, 1, "", methodObject ),
-                    new Among ( "\u00EFsc", -1, 1, "", methodObject ),
-                    new Among ( "ad", -1, 1, "", methodObject ),
-                    new Among ( "ed", -1, 1, "", methodObject ),
-                    new Among ( "id", -1, 1, "", methodObject ),
-                    new Among ( "ie", -1, 1, "", methodObject ),
-                    new Among ( "re", -1, 1, "", methodObject ),
-                    new Among ( "dre", 30, 1, "", methodObject ),
-                    new Among ( "ase", -1, 1, "", methodObject ),
-                    new Among ( "iese", -1, 1, "", methodObject ),
-                    new Among ( "aste", -1, 1, "", methodObject ),
-                    new Among ( "iste", -1, 1, "", methodObject ),
-                    new Among ( "ii", -1, 1, "", methodObject ),
-                    new Among ( "ini", -1, 1, "", methodObject ),
-                    new Among ( "esqui", -1, 1, "", methodObject ),
-                    new Among ( "eixi", -1, 1, "", methodObject ),
-                    new Among ( "itzi", -1, 1, "", methodObject ),
-                    new Among ( "am", -1, 1, "", methodObject ),
-                    new Among ( "em", -1, 1, "", methodObject ),
-                    new Among ( "arem", 42, 1, "", methodObject ),
-                    new Among ( "irem", 42, 1, "", methodObject ),
-                    new Among ( "\u00E0rem", 42, 1, "", methodObject ),
-                    new Among ( "\u00EDrem", 42, 1, "", methodObject ),
-                    new Among ( "\u00E0ssem", 42, 1, "", methodObject ),
-                    new Among ( "\u00E9ssem", 42, 1, "", methodObject ),
-                    new Among ( "iguem", 42, 1, "", methodObject ),
-                    new Among ( "\u00EFguem", 42, 1, "", methodObject ),
-                    new Among ( "avem", 42, 1, "", methodObject ),
-                    new Among ( "\u00E0vem", 42, 1, "", methodObject ),
-                    new Among ( "\u00E1vem", 42, 1, "", methodObject ),
-                    new Among ( "ir\u00ECem", 42, 1, "", methodObject ),
-                    new Among ( "\u00EDem", 42, 1, "", methodObject ),
-                    new Among ( "ar\u00EDem", 55, 1, "", methodObject ),
-                    new Among ( "ir\u00EDem", 55, 1, "", methodObject ),
-                    new Among ( "assim", -1, 1, "", methodObject ),
-                    new Among ( "essim", -1, 1, "", methodObject ),
-                    new Among ( "issim", -1, 1, "", methodObject ),
-                    new Among ( "\u00E0ssim", -1, 1, "", methodObject ),
-                    new Among ( "\u00E8ssim", -1, 1, "", methodObject ),
-                    new Among ( "\u00E9ssim", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDssim", -1, 1, "", methodObject ),
-                    new Among ( "\u00EFm", -1, 1, "", methodObject ),
-                    new Among ( "an", -1, 1, "", methodObject ),
-                    new Among ( "aban", 66, 1, "", methodObject ),
-                    new Among ( "arian", 66, 1, "", methodObject ),
-                    new Among ( "aran", 66, 1, "", methodObject ),
-                    new Among ( "ieran", 66, 1, "", methodObject ),
-                    new Among ( "iran", 66, 1, "", methodObject ),
-                    new Among ( "\u00EDan", 66, 1, "", methodObject ),
-                    new Among ( "ar\u00EDan", 72, 1, "", methodObject ),
-                    new Among ( "er\u00EDan", 72, 1, "", methodObject ),
-                    new Among ( "ir\u00EDan", 72, 1, "", methodObject ),
-                    new Among ( "en", -1, 1, "", methodObject ),
-                    new Among ( "ien", 76, 1, "", methodObject ),
-                    new Among ( "arien", 77, 1, "", methodObject ),
-                    new Among ( "irien", 77, 1, "", methodObject ),
-                    new Among ( "aren", 76, 1, "", methodObject ),
-                    new Among ( "eren", 76, 1, "", methodObject ),
-                    new Among ( "iren", 76, 1, "", methodObject ),
-                    new Among ( "\u00E0ren", 76, 1, "", methodObject ),
-                    new Among ( "\u00EFren", 76, 1, "", methodObject ),
-                    new Among ( "asen", 76, 1, "", methodObject ),
-                    new Among ( "iesen", 76, 1, "", methodObject ),
-                    new Among ( "assen", 76, 1, "", methodObject ),
-                    new Among ( "essen", 76, 1, "", methodObject ),
-                    new Among ( "issen", 76, 1, "", methodObject ),
-                    new Among ( "\u00E9ssen", 76, 1, "", methodObject ),
-                    new Among ( "\u00EFssen", 76, 1, "", methodObject ),
-                    new Among ( "esquen", 76, 1, "", methodObject ),
-                    new Among ( "isquen", 76, 1, "", methodObject ),
-                    new Among ( "\u00EFsquen", 76, 1, "", methodObject ),
-                    new Among ( "aven", 76, 1, "", methodObject ),
-                    new Among ( "ixen", 76, 1, "", methodObject ),
-                    new Among ( "eixen", 96, 1, "", methodObject ),
-                    new Among ( "\u00EFxen", 76, 1, "", methodObject ),
-                    new Among ( "\u00EFen", 76, 1, "", methodObject ),
-                    new Among ( "in", -1, 1, "", methodObject ),
-                    new Among ( "inin", 100, 1, "", methodObject ),
-                    new Among ( "sin", 100, 1, "", methodObject ),
-                    new Among ( "isin", 102, 1, "", methodObject ),
-                    new Among ( "assin", 102, 1, "", methodObject ),
-                    new Among ( "essin", 102, 1, "", methodObject ),
-                    new Among ( "issin", 102, 1, "", methodObject ),
-                    new Among ( "\u00EFssin", 102, 1, "", methodObject ),
-                    new Among ( "esquin", 100, 1, "", methodObject ),
-                    new Among ( "eixin", 100, 1, "", methodObject ),
-                    new Among ( "aron", -1, 1, "", methodObject ),
-                    new Among ( "ieron", -1, 1, "", methodObject ),
-                    new Among ( "ar\u00E1n", -1, 1, "", methodObject ),
-                    new Among ( "er\u00E1n", -1, 1, "", methodObject ),
-                    new Among ( "ir\u00E1n", -1, 1, "", methodObject ),
-                    new Among ( "i\u00EFn", -1, 1, "", methodObject ),
-                    new Among ( "ado", -1, 1, "", methodObject ),
-                    new Among ( "ido", -1, 1, "", methodObject ),
-                    new Among ( "ando", -1, 2, "", methodObject ),
-                    new Among ( "iendo", -1, 1, "", methodObject ),
-                    new Among ( "io", -1, 1, "", methodObject ),
-                    new Among ( "ixo", -1, 1, "", methodObject ),
-                    new Among ( "eixo", 121, 1, "", methodObject ),
-                    new Among ( "\u00EFxo", -1, 1, "", methodObject ),
-                    new Among ( "itzo", -1, 1, "", methodObject ),
-                    new Among ( "ar", -1, 1, "", methodObject ),
-                    new Among ( "tzar", 125, 1, "", methodObject ),
-                    new Among ( "er", -1, 1, "", methodObject ),
-                    new Among ( "eixer", 127, 1, "", methodObject ),
-                    new Among ( "ir", -1, 1, "", methodObject ),
-                    new Among ( "ador", -1, 1, "", methodObject ),
-                    new Among ( "as", -1, 1, "", methodObject ),
-                    new Among ( "abas", 131, 1, "", methodObject ),
-                    new Among ( "adas", 131, 1, "", methodObject ),
-                    new Among ( "idas", 131, 1, "", methodObject ),
-                    new Among ( "aras", 131, 1, "", methodObject ),
-                    new Among ( "ieras", 131, 1, "", methodObject ),
-                    new Among ( "\u00EDas", 131, 1, "", methodObject ),
-                    new Among ( "ar\u00EDas", 137, 1, "", methodObject ),
-                    new Among ( "er\u00EDas", 137, 1, "", methodObject ),
-                    new Among ( "ir\u00EDas", 137, 1, "", methodObject ),
-                    new Among ( "ids", -1, 1, "", methodObject ),
-                    new Among ( "es", -1, 1, "", methodObject ),
-                    new Among ( "ades", 142, 1, "", methodObject ),
-                    new Among ( "ides", 142, 1, "", methodObject ),
-                    new Among ( "udes", 142, 1, "", methodObject ),
-                    new Among ( "\u00EFdes", 142, 1, "", methodObject ),
-                    new Among ( "atges", 142, 1, "", methodObject ),
-                    new Among ( "ies", 142, 1, "", methodObject ),
-                    new Among ( "aries", 148, 1, "", methodObject ),
-                    new Among ( "iries", 148, 1, "", methodObject ),
-                    new Among ( "ares", 142, 1, "", methodObject ),
-                    new Among ( "ires", 142, 1, "", methodObject ),
-                    new Among ( "adores", 142, 1, "", methodObject ),
-                    new Among ( "\u00EFres", 142, 1, "", methodObject ),
-                    new Among ( "ases", 142, 1, "", methodObject ),
-                    new Among ( "ieses", 142, 1, "", methodObject ),
-                    new Among ( "asses", 142, 1, "", methodObject ),
-                    new Among ( "esses", 142, 1, "", methodObject ),
-                    new Among ( "isses", 142, 1, "", methodObject ),
-                    new Among ( "\u00EFsses", 142, 1, "", methodObject ),
-                    new Among ( "ques", 142, 1, "", methodObject ),
-                    new Among ( "esques", 161, 1, "", methodObject ),
-                    new Among ( "\u00EFsques", 161, 1, "", methodObject ),
-                    new Among ( "aves", 142, 1, "", methodObject ),
-                    new Among ( "ixes", 142, 1, "", methodObject ),
-                    new Among ( "eixes", 165, 1, "", methodObject ),
-                    new Among ( "\u00EFxes", 142, 1, "", methodObject ),
-                    new Among ( "\u00EFes", 142, 1, "", methodObject ),
-                    new Among ( "abais", -1, 1, "", methodObject ),
-                    new Among ( "arais", -1, 1, "", methodObject ),
-                    new Among ( "ierais", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDais", -1, 1, "", methodObject ),
-                    new Among ( "ar\u00EDais", 172, 1, "", methodObject ),
-                    new Among ( "er\u00EDais", 172, 1, "", methodObject ),
-                    new Among ( "ir\u00EDais", 172, 1, "", methodObject ),
-                    new Among ( "aseis", -1, 1, "", methodObject ),
-                    new Among ( "ieseis", -1, 1, "", methodObject ),
-                    new Among ( "asteis", -1, 1, "", methodObject ),
-                    new Among ( "isteis", -1, 1, "", methodObject ),
-                    new Among ( "inis", -1, 1, "", methodObject ),
-                    new Among ( "sis", -1, 1, "", methodObject ),
-                    new Among ( "isis", 181, 1, "", methodObject ),
-                    new Among ( "assis", 181, 1, "", methodObject ),
-                    new Among ( "essis", 181, 1, "", methodObject ),
-                    new Among ( "issis", 181, 1, "", methodObject ),
-                    new Among ( "\u00EFssis", 181, 1, "", methodObject ),
-                    new Among ( "esquis", -1, 1, "", methodObject ),
-                    new Among ( "eixis", -1, 1, "", methodObject ),
-                    new Among ( "itzis", -1, 1, "", methodObject ),
-                    new Among ( "\u00E1is", -1, 1, "", methodObject ),
-                    new Among ( "ar\u00E9is", -1, 1, "", methodObject ),
-                    new Among ( "er\u00E9is", -1, 1, "", methodObject ),
-                    new Among ( "ir\u00E9is", -1, 1, "", methodObject ),
-                    new Among ( "ams", -1, 1, "", methodObject ),
-                    new Among ( "ados", -1, 1, "", methodObject ),
-                    new Among ( "idos", -1, 1, "", methodObject ),
-                    new Among ( "amos", -1, 1, "", methodObject ),
-                    new Among ( "\u00E1bamos", 197, 1, "", methodObject ),
-                    new Among ( "\u00E1ramos", 197, 1, "", methodObject ),
-                    new Among ( "i\u00E9ramos", 197, 1, "", methodObject ),
-                    new Among ( "\u00EDamos", 197, 1, "", methodObject ),
-                    new Among ( "ar\u00EDamos", 201, 1, "", methodObject ),
-                    new Among ( "er\u00EDamos", 201, 1, "", methodObject ),
-                    new Among ( "ir\u00EDamos", 201, 1, "", methodObject ),
-                    new Among ( "aremos", -1, 1, "", methodObject ),
-                    new Among ( "eremos", -1, 1, "", methodObject ),
-                    new Among ( "iremos", -1, 1, "", methodObject ),
-                    new Among ( "\u00E1semos", -1, 1, "", methodObject ),
-                    new Among ( "i\u00E9semos", -1, 1, "", methodObject ),
-                    new Among ( "imos", -1, 1, "", methodObject ),
-                    new Among ( "adors", -1, 1, "", methodObject ),
-                    new Among ( "ass", -1, 1, "", methodObject ),
-                    new Among ( "erass", 212, 1, "", methodObject ),
-                    new Among ( "ess", -1, 1, "", methodObject ),
-                    new Among ( "ats", -1, 1, "", methodObject ),
-                    new Among ( "its", -1, 1, "", methodObject ),
-                    new Among ( "ents", -1, 1, "", methodObject ),
-                    new Among ( "\u00E0s", -1, 1, "", methodObject ),
-                    new Among ( "ar\u00E0s", 218, 1, "", methodObject ),
-                    new Among ( "ir\u00E0s", 218, 1, "", methodObject ),
-                    new Among ( "ar\u00E1s", -1, 1, "", methodObject ),
-                    new Among ( "er\u00E1s", -1, 1, "", methodObject ),
-                    new Among ( "ir\u00E1s", -1, 1, "", methodObject ),
-                    new Among ( "\u00E9s", -1, 1, "", methodObject ),
-                    new Among ( "ar\u00E9s", 224, 1, "", methodObject ),
-                    new Among ( "\u00EDs", -1, 1, "", methodObject ),
-                    new Among ( "i\u00EFs", -1, 1, "", methodObject ),
-                    new Among ( "at", -1, 1, "", methodObject ),
-                    new Among ( "it", -1, 1, "", methodObject ),
-                    new Among ( "ant", -1, 1, "", methodObject ),
-                    new Among ( "ent", -1, 1, "", methodObject ),
-                    new Among ( "int", -1, 1, "", methodObject ),
-                    new Among ( "ut", -1, 1, "", methodObject ),
-                    new Among ( "\u00EFt", -1, 1, "", methodObject ),
-                    new Among ( "au", -1, 1, "", methodObject ),
-                    new Among ( "erau", 235, 1, "", methodObject ),
-                    new Among ( "ieu", -1, 1, "", methodObject ),
-                    new Among ( "ineu", -1, 1, "", methodObject ),
-                    new Among ( "areu", -1, 1, "", methodObject ),
-                    new Among ( "ireu", -1, 1, "", methodObject ),
-                    new Among ( "\u00E0reu", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDreu", -1, 1, "", methodObject ),
-                    new Among ( "asseu", -1, 1, "", methodObject ),
-                    new Among ( "esseu", -1, 1, "", methodObject ),
-                    new Among ( "eresseu", 244, 1, "", methodObject ),
-                    new Among ( "\u00E0sseu", -1, 1, "", methodObject ),
-                    new Among ( "\u00E9sseu", -1, 1, "", methodObject ),
-                    new Among ( "igueu", -1, 1, "", methodObject ),
-                    new Among ( "\u00EFgueu", -1, 1, "", methodObject ),
-                    new Among ( "\u00E0veu", -1, 1, "", methodObject ),
-                    new Among ( "\u00E1veu", -1, 1, "", methodObject ),
-                    new Among ( "itzeu", -1, 1, "", methodObject ),
-                    new Among ( "\u00ECeu", -1, 1, "", methodObject ),
-                    new Among ( "ir\u00ECeu", 253, 1, "", methodObject ),
-                    new Among ( "\u00EDeu", -1, 1, "", methodObject ),
-                    new Among ( "ar\u00EDeu", 255, 1, "", methodObject ),
-                    new Among ( "ir\u00EDeu", 255, 1, "", methodObject ),
-                    new Among ( "assiu", -1, 1, "", methodObject ),
-                    new Among ( "issiu", -1, 1, "", methodObject ),
-                    new Among ( "\u00E0ssiu", -1, 1, "", methodObject ),
-                    new Among ( "\u00E8ssiu", -1, 1, "", methodObject ),
-                    new Among ( "\u00E9ssiu", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDssiu", -1, 1, "", methodObject ),
-                    new Among ( "\u00EFu", -1, 1, "", methodObject ),
-                    new Among ( "ix", -1, 1, "", methodObject ),
-                    new Among ( "eix", 265, 1, "", methodObject ),
-                    new Among ( "\u00EFx", -1, 1, "", methodObject ),
-                    new Among ( "itz", -1, 1, "", methodObject ),
-                    new Among ( "i\u00E0", -1, 1, "", methodObject ),
-                    new Among ( "ar\u00E0", -1, 1, "", methodObject ),
-                    new Among ( "ir\u00E0", -1, 1, "", methodObject ),
-                    new Among ( "itz\u00E0", -1, 1, "", methodObject ),
-                    new Among ( "ar\u00E1", -1, 1, "", methodObject ),
-                    new Among ( "er\u00E1", -1, 1, "", methodObject ),
-                    new Among ( "ir\u00E1", -1, 1, "", methodObject ),
-                    new Among ( "ir\u00E8", -1, 1, "", methodObject ),
-                    new Among ( "ar\u00E9", -1, 1, "", methodObject ),
-                    new Among ( "er\u00E9", -1, 1, "", methodObject ),
-                    new Among ( "ir\u00E9", -1, 1, "", methodObject ),
-                    new Among ( "\u00ED", -1, 1, "", methodObject ),
-                    new Among ( "i\u00EF", -1, 1, "", methodObject ),
-                    new Among ( "i\u00F3", -1, 1, "", methodObject )
-                };
+  private static final char g_v[] = {17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 129, 81, 6, 10 };
 
-                private final static Among a_4[] = {
-                    new Among ( "a", -1, 1, "", methodObject ),
-                    new Among ( "e", -1, 1, "", methodObject ),
-                    new Among ( "i", -1, 1, "", methodObject ),
-                    new Among ( "\u00EFn", -1, 1, "", methodObject ),
-                    new Among ( "o", -1, 1, "", methodObject ),
-                    new Among ( "ir", -1, 1, "", methodObject ),
-                    new Among ( "s", -1, 1, "", methodObject ),
-                    new Among ( "is", 6, 1, "", methodObject ),
-                    new Among ( "os", 6, 1, "", methodObject ),
-                    new Among ( "\u00EFs", 6, 1, "", methodObject ),
-                    new Among ( "it", -1, 1, "", methodObject ),
-                    new Among ( "eu", -1, 1, "", methodObject ),
-                    new Among ( "iu", -1, 1, "", methodObject ),
-                    new Among ( "iqu", -1, 2, "", methodObject ),
-                    new Among ( "itz", -1, 1, "", methodObject ),
-                    new Among ( "\u00E0", -1, 1, "", methodObject ),
-                    new Among ( "\u00E1", -1, 1, "", methodObject ),
-                    new Among ( "\u00E9", -1, 1, "", methodObject ),
-                    new Among ( "\u00EC", -1, 1, "", methodObject ),
-                    new Among ( "\u00ED", -1, 1, "", methodObject ),
-                    new Among ( "\u00EF", -1, 1, "", methodObject ),
-                    new Among ( "\u00F3", -1, 1, "", methodObject )
-                };
+  private int I_p2;
+  private int I_p1;
 
-                private static final char g_v[] = {17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 129, 81, 6, 10 };
 
-        private int I_p2;
-        private int I_p1;
-
-                private void copy_from(CatalanStemmer other) {
-                    I_p2 = other.I_p2;
-                    I_p1 = other.I_p1;
-                    super.copy_from(other);
-                }
-
-                private boolean r_mark_regions() {
-            int v_1;
-                    // (, line 41
-                    I_p1 = limit;
-                    I_p2 = limit;
-                    // do, line 46
-                    v_1 = cursor;
-                    lab0: do {
-                        // (, line 46
-                        // gopast, line 47
-                        golab1: while(true)
-                        {
-                            lab2: do {
-                                if (!(in_grouping(g_v, 97, 252)))
-                                {
-                                    break lab2;
-                                }
-                                break golab1;
-                            } while (false);
-                            if (cursor >= limit)
-                            {
-                                break lab0;
-                            }
-                            cursor++;
-                        }
-                        // gopast, line 47
-                        golab3: while(true)
-                        {
-                            lab4: do {
-                                if (!(out_grouping(g_v, 97, 252)))
-                                {
-                                    break lab4;
-                                }
-                                break golab3;
-                            } while (false);
-                            if (cursor >= limit)
-                            {
-                                break lab0;
-                            }
-                            cursor++;
-                        }
-                        // setmark p1, line 47
-                        I_p1 = cursor;
-                        // gopast, line 48
-                        golab5: while(true)
-                        {
-                            lab6: do {
-                                if (!(in_grouping(g_v, 97, 252)))
-                                {
-                                    break lab6;
-                                }
-                                break golab5;
-                            } while (false);
-                            if (cursor >= limit)
-                            {
-                                break lab0;
-                            }
-                            cursor++;
-                        }
-                        // gopast, line 48
-                        golab7: while(true)
-                        {
-                            lab8: do {
-                                if (!(out_grouping(g_v, 97, 252)))
-                                {
-                                    break lab8;
-                                }
-                                break golab7;
-                            } while (false);
-                            if (cursor >= limit)
-                            {
-                                break lab0;
-                            }
-                            cursor++;
-                        }
-                        // setmark p2, line 48
-                        I_p2 = cursor;
-                    } while (false);
-                    cursor = v_1;
-                    return true;
-                }
-
-                private boolean r_cleaning() {
-            int among_var;
-            int v_1;
-                    // repeat, line 52
-                    replab0: while(true)
-                    {
-                        v_1 = cursor;
-                        lab1: do {
-                            // (, line 52
-                            // [, line 53
-                            bra = cursor;
-                            // substring, line 53
-                            among_var = find_among(a_0, 13);
-                            if (among_var == 0)
-                            {
-                                break lab1;
-                            }
-                            // ], line 53
-                            ket = cursor;
-                            switch(among_var) {
-                                case 0:
-                                    break lab1;
-                                case 1:
-                                    // (, line 54
-                                    // <-, line 54
-                                    slice_from("a");
-                                    break;
-                                case 2:
-                                    // (, line 55
-                                    // <-, line 55
-                                    slice_from("a");
-                                    break;
-                                case 3:
-                                    // (, line 56
-                                    // <-, line 56
-                                    slice_from("e");
-                                    break;
-                                case 4:
-                                    // (, line 57
-                                    // <-, line 57
-                                    slice_from("e");
-                                    break;
-                                case 5:
-                                    // (, line 58
-                                    // <-, line 58
-                                    slice_from("i");
-                                    break;
-                                case 6:
-                                    // (, line 59
-                                    // <-, line 59
-                                    slice_from("i");
-                                    break;
-                                case 7:
-                                    // (, line 60
-                                    // <-, line 60
-                                    slice_from("o");
-                                    break;
-                                case 8:
-                                    // (, line 61
-                                    // <-, line 61
-                                    slice_from("o");
-                                    break;
-                                case 9:
-                                    // (, line 62
-                                    // <-, line 62
-                                    slice_from("u");
-                                    break;
-                                case 10:
-                                    // (, line 63
-                                    // <-, line 63
-                                    slice_from("u");
-                                    break;
-                                case 11:
-                                    // (, line 64
-                                    // <-, line 64
-                                    slice_from("i");
-                                    break;
-                                case 12:
-                                    // (, line 65
-                                    // <-, line 65
-                                    slice_from(".");
-                                    break;
-                                case 13:
-                                    // (, line 66
-                                    // next, line 66
-                                    if (cursor >= limit)
-                                    {
-                                        break lab1;
-                                    }
-                                    cursor++;
-                                    break;
-                            }
-                            continue replab0;
-                        } while (false);
-                        cursor = v_1;
-                        break replab0;
-                    }
-                    return true;
-                }
+  private boolean r_mark_regions() {
+    I_p1 = limit;
+    I_p2 = limit;
+    int v_1 = cursor;
+lab0: {
+golab1: while(true)
+        {
+lab2: {
+        if (!(in_grouping(g_v, 97, 252)))
+        {
+          break lab2;
+        }
+        break golab1;
+}
+if (cursor >= limit)
+{
+  break lab0;
+}
+cursor++;
+        }
+golab3: while(true)
+{
+lab4: {
+        if (!(out_grouping(g_v, 97, 252)))
+        {
+          break lab4;
+        }
+        break golab3;
+}
+if (cursor >= limit)
+{
+  break lab0;
+}
+cursor++;
+}
+I_p1 = cursor;
+golab5: while(true)
+{
+lab6: {
+        if (!(in_grouping(g_v, 97, 252)))
+        {
+          break lab6;
+        }
+        break golab5;
+}
+if (cursor >= limit)
+{
+  break lab0;
+}
+cursor++;
+}
+golab7: while(true)
+{
+lab8: {
+        if (!(out_grouping(g_v, 97, 252)))
+        {
+          break lab8;
+        }
+        break golab7;
+}
+if (cursor >= limit)
+{
+  break lab0;
+}
+cursor++;
+}
+I_p2 = cursor;
+}
+cursor = v_1;
+return true;
+  }
 
-                private boolean r_R1() {
-                    if (!(I_p1 <= cursor))
-                    {
-                        return false;
-                    }
-                    return true;
-                }
+private boolean r_cleaning() {
+  int among_var;
+  while(true)
+  {
+    int v_1 = cursor;
+lab0: {
+        bra = cursor;
+        among_var = find_among(a_0);
+        if (among_var == 0)
+        {
+          break lab0;
+        }
+        ket = cursor;
+        switch (among_var) {
+          case 1:
+            slice_from("a");
+            break;
+          case 2:
+            slice_from("e");
+            break;
+          case 3:
+            slice_from("i");
+            break;
+          case 4:
+            slice_from("o");
+            break;
+          case 5:
+            slice_from("u");
+            break;
+          case 6:
+            slice_from(".");
+            break;
+          case 7:
+            if (cursor >= limit)
+            {
+              break lab0;
+            }
+            cursor++;
+            break;
+        }
+        continue;
+}
+cursor = v_1;
+break;
+  }
+return true;
+}
 
-                private boolean r_R2() {
-                    if (!(I_p2 <= cursor))
-                    {
-                        return false;
-                    }
-                    return true;
-                }
+private boolean r_R1() {
+  if (!(I_p1 <= cursor))
+  {
+    return false;
+  }
+  return true;
+}
 
-                private boolean r_attached_pronoun() {
-            int among_var;
-                    // (, line 75
-                    // [, line 76
-                    ket = cursor;
-                    // substring, line 76
-                    among_var = find_among_b(a_1, 39);
-                    if (among_var == 0)
-                    {
-                        return false;
-                    }
-                    // ], line 76
-                    bra = cursor;
-                    switch(among_var) {
-                        case 0:
-                            return false;
-                        case 1:
-                            // (, line 86
-                            // call R1, line 86
-                            if (!r_R1())
-                            {
-                                return false;
-                            }
-                            // delete, line 86
-                            slice_del();
-                            break;
-                    }
-                    return true;
-                }
+private boolean r_R2() {
+  if (!(I_p2 <= cursor))
+  {
+    return false;
+  }
+  return true;
+}
 
-                private boolean r_standard_suffix() {
-            int among_var;
-                    // (, line 90
-                    // [, line 91
-                    ket = cursor;
-                    // substring, line 91
-                    among_var = find_among_b(a_2, 200);
-                    if (among_var == 0)
-                    {
-                        return false;
-                    }
-                    // ], line 91
-                    bra = cursor;
-                    switch(among_var) {
-                        case 0:
-                            return false;
-                        case 1:
-                            // (, line 115
-                            // call R1, line 115
-                            if (!r_R1())
-                            {
-                                return false;
-                            }
-                            // delete, line 115
-                            slice_del();
-                            break;
-                        case 2:
-                            // (, line 117
-                            // call R2, line 117
-                            if (!r_R2())
-                            {
-                                return false;
-                            }
-                            // delete, line 117
-                            slice_del();
-                            break;
-                        case 3:
-                            // (, line 119
-                            // call R2, line 119
-                            if (!r_R2())
-                            {
-                                return false;
-                            }
-                            // <-, line 119
-                            slice_from("log");
-                            break;
-                        case 4:
-                            // (, line 121
-                            // call R2, line 121
-                            if (!r_R2())
-                            {
-                                return false;
-                            }
-                            // <-, line 121
-                            slice_from("ic");
-                            break;
-                        case 5:
-                            // (, line 123
-                            // call R1, line 123
-                            if (!r_R1())
-                            {
-                                return false;
-                            }
-                            // <-, line 123
-                            slice_from("c");
-                            break;
-                    }
-                    return true;
-                }
+private boolean r_attached_pronoun() {
+  ket = cursor;
+  if (find_among_b(a_1) == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  if (!r_R1())
+  {
+    return false;
+  }
+  slice_del();
+  return true;
+}
 
-                private boolean r_verb_suffix() {
-            int among_var;
-                    // (, line 127
-                    // [, line 128
-                    ket = cursor;
-                    // substring, line 128
-                    among_var = find_among_b(a_3, 283);
-                    if (among_var == 0)
-                    {
-                        return false;
-                    }
-                    // ], line 128
-                    bra = cursor;
-                    switch(among_var) {
-                        case 0:
-                            return false;
-                        case 1:
-                            // (, line 173
-                            // call R1, line 173
-                            if (!r_R1())
-                            {
-                                return false;
-                            }
-                            // delete, line 173
-                            slice_del();
-                            break;
-                        case 2:
-                            // (, line 175
-                            // call R2, line 175
-                            if (!r_R2())
-                            {
-                                return false;
-                            }
-                            // delete, line 175
-                            slice_del();
-                            break;
-                    }
-                    return true;
-                }
+private boolean r_standard_suffix() {
+  int among_var;
+  ket = cursor;
+  among_var = find_among_b(a_2);
+  if (among_var == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  switch (among_var) {
+    case 1:
+      if (!r_R1())
+      {
+        return false;
+      }
+      slice_del();
+      break;
+    case 2:
+      if (!r_R2())
+      {
+        return false;
+      }
+      slice_del();
+      break;
+    case 3:
+      if (!r_R2())
+      {
+        return false;
+      }
+      slice_from("log");
+      break;
+    case 4:
+      if (!r_R2())
+      {
+        return false;
+      }
+      slice_from("ic");
+      break;
+    case 5:
+      if (!r_R1())
+      {
+        return false;
+      }
+      slice_from("c");
+      break;
+  }
+  return true;
+}
 
-                private boolean r_residual_suffix() {
-            int among_var;
-                    // (, line 179
-                    // [, line 180
-                    ket = cursor;
-                    // substring, line 180
-                    among_var = find_among_b(a_4, 22);
-                    if (among_var == 0)
-                    {
-                        return false;
-                    }
-                    // ], line 180
-                    bra = cursor;
-                    switch(among_var) {
-                        case 0:
-                            return false;
-                        case 1:
-                            // (, line 183
-                            // call R1, line 183
-                            if (!r_R1())
-                            {
-                                return false;
-                            }
-                            // delete, line 183
-                            slice_del();
-                            break;
-                        case 2:
-                            // (, line 185
-                            // call R1, line 185
-                            if (!r_R1())
-                            {
-                                return false;
-                            }
-                            // <-, line 185
-                            slice_from("ic");
-                            break;
-                    }
-                    return true;
-                }
+private boolean r_verb_suffix() {
+  int among_var;
+  ket = cursor;
+  among_var = find_among_b(a_3);
+  if (among_var == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  switch (among_var) {
+    case 1:
+      if (!r_R1())
+      {
+        return false;
+      }
+      slice_del();
+      break;
+    case 2:
+      if (!r_R2())
+      {
+        return false;
+      }
+      slice_del();
+      break;
+  }
+  return true;
+}
 
-                @Override
-                public boolean stem() {
-            int v_1;
-            int v_2;
-            int v_3;
-            int v_4;
-            int v_5;
-            int v_6;
-                    // (, line 190
-                    // do, line 191
-                    v_1 = cursor;
-                    lab0: do {
-                        // call mark_regions, line 191
-                        if (!r_mark_regions())
-                        {
-                            break lab0;
-                        }
-                    } while (false);
-                    cursor = v_1;
-                    // backwards, line 192
-                    limit_backward = cursor; cursor = limit;
-                    // (, line 192
-                    // do, line 193
-                    v_2 = limit - cursor;
-                    lab1: do {
-                        // call attached_pronoun, line 193
-                        if (!r_attached_pronoun())
-                        {
-                            break lab1;
-                        }
-                    } while (false);
-                    cursor = limit - v_2;
-                    // do, line 194
-                    v_3 = limit - cursor;
-                    lab2: do {
-                        // (, line 194
-                        // or, line 194
-                        lab3: do {
-                            v_4 = limit - cursor;
-                            lab4: do {
-                                // call standard_suffix, line 194
-                                if (!r_standard_suffix())
-                                {
-                                    break lab4;
-                                }
-                                break lab3;
-                            } while (false);
-                            cursor = limit - v_4;
-                            // call verb_suffix, line 195
-                            if (!r_verb_suffix())
-                            {
-                                break lab2;
-                            }
-                        } while (false);
-                    } while (false);
-                    cursor = limit - v_3;
-                    // do, line 197
-                    v_5 = limit - cursor;
-                    lab5: do {
-                        // call residual_suffix, line 197
-                        if (!r_residual_suffix())
-                        {
-                            break lab5;
-                        }
-                    } while (false);
-                    cursor = limit - v_5;
-                    cursor = limit_backward;                    // do, line 199
-                    v_6 = cursor;
-                    lab6: do {
-                        // call cleaning, line 199
-                        if (!r_cleaning())
-                        {
-                            break lab6;
-                        }
-                    } while (false);
-                    cursor = v_6;
-                    return true;
-                }
+private boolean r_residual_suffix() {
+  int among_var;
+  ket = cursor;
+  among_var = find_among_b(a_4);
+  if (among_var == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  switch (among_var) {
+    case 1:
+      if (!r_R1())
+      {
+        return false;
+      }
+      slice_del();
+      break;
+    case 2:
+      if (!r_R1())
+      {
+        return false;
+      }
+      slice_from("ic");
+      break;
+  }
+  return true;
+}
 
-        @Override
-        public boolean equals( Object o ) {
-            return o instanceof CatalanStemmer;
+public boolean stem() {
+  r_mark_regions();
+  limit_backward = cursor;
+  cursor = limit;
+  int v_2 = limit - cursor;
+  r_attached_pronoun();
+  cursor = limit - v_2;
+  int v_3 = limit - cursor;
+lab0: {
+lab1: {
+        int v_4 = limit - cursor;
+lab2: {
+        if (!r_standard_suffix())
+        {
+          break lab2;
         }
+        break lab1;
+}
+cursor = limit - v_4;
+if (!r_verb_suffix())
+{
+  break lab0;
+}
+}
+}
+cursor = limit - v_3;
+int v_5 = limit - cursor;
+r_residual_suffix();
+cursor = limit - v_5;
+cursor = limit_backward;
+int v_6 = cursor;
+r_cleaning();
+cursor = v_6;
+return true;
+}
 
-        @Override
-        public int hashCode() {
-            return CatalanStemmer.class.getName().hashCode();
-        }
+@Override
+public boolean equals( Object o ) {
+  return o instanceof CatalanStemmer;
+}
+
+@Override
+public int hashCode() {
+  return CatalanStemmer.class.getName().hashCode();
+}
 
 
 
diff --git a/lucene/analysis/common/src/java/org/tartarus/snowball/ext/DanishStemmer.java b/lucene/analysis/common/src/java/org/tartarus/snowball/ext/DanishStemmer.java
index 8917b5e..b8679b3 100644
--- a/lucene/analysis/common/src/java/org/tartarus/snowball/ext/DanishStemmer.java
+++ b/lucene/analysis/common/src/java/org/tartarus/snowball/ext/DanishStemmer.java
@@ -1,442 +1,301 @@
-// This file was generated automatically by the Snowball to Java compiler
+// Generated by Snowball 2.0.0 - https://snowballstem.org/
 
 package org.tartarus.snowball.ext;
 
 import org.tartarus.snowball.Among;
-import org.tartarus.snowball.SnowballProgram;
 
- /**
-  * This class was automatically generated by a Snowball to Java compiler 
-  * It implements the stemming algorithm defined by a snowball script.
-  */
+/**
+ * This class implements the stemming algorithm defined by a snowball script.
+ * <p>
+ * Generated by Snowball 2.0.0 - https://snowballstem.org/
+ * </p>
+ */
+@SuppressWarnings("unused")
+public class DanishStemmer extends org.tartarus.snowball.SnowballStemmer {
 
-@SuppressWarnings("unused") public class DanishStemmer extends SnowballProgram {
+  private static final long serialVersionUID = 1L;
+  private static final java.lang.invoke.MethodHandles.Lookup methodObject = java.lang.invoke.MethodHandles.lookup();
 
-private static final long serialVersionUID = 1L;
+  private final static Among a_0[] = {
+    new Among("hed", -1, 1),
+    new Among("ethed", 0, 1),
+    new Among("ered", -1, 1),
+    new Among("e", -1, 1),
+    new Among("erede", 3, 1),
+    new Among("ende", 3, 1),
+    new Among("erende", 5, 1),
+    new Among("ene", 3, 1),
+    new Among("erne", 3, 1),
+    new Among("ere", 3, 1),
+    new Among("en", -1, 1),
+    new Among("heden", 10, 1),
+    new Among("eren", 10, 1),
+    new Among("er", -1, 1),
+    new Among("heder", 13, 1),
+    new Among("erer", 13, 1),
+    new Among("s", -1, 2),
+    new Among("heds", 16, 1),
+    new Among("es", 16, 1),
+    new Among("endes", 18, 1),
+    new Among("erendes", 19, 1),
+    new Among("enes", 18, 1),
+    new Among("ernes", 18, 1),
+    new Among("eres", 18, 1),
+    new Among("ens", 16, 1),
+    new Among("hedens", 24, 1),
+    new Among("erens", 24, 1),
+    new Among("ers", 16, 1),
+    new Among("ets", 16, 1),
+    new Among("erets", 28, 1),
+    new Among("et", -1, 1),
+    new Among("eret", 30, 1)
+  };
 
-        /* patched */ private static final java.lang.invoke.MethodHandles.Lookup methodObject = java.lang.invoke.MethodHandles.lookup();
+  private final static Among a_1[] = {
+    new Among("gd", -1, -1),
+    new Among("dt", -1, -1),
+    new Among("gt", -1, -1),
+    new Among("kt", -1, -1)
+  };
 
-                private final static Among a_0[] = {
-                    new Among ( "hed", -1, 1, "", methodObject ),
-                    new Among ( "ethed", 0, 1, "", methodObject ),
-                    new Among ( "ered", -1, 1, "", methodObject ),
-                    new Among ( "e", -1, 1, "", methodObject ),
-                    new Among ( "erede", 3, 1, "", methodObject ),
-                    new Among ( "ende", 3, 1, "", methodObject ),
-                    new Among ( "erende", 5, 1, "", methodObject ),
-                    new Among ( "ene", 3, 1, "", methodObject ),
-                    new Among ( "erne", 3, 1, "", methodObject ),
-                    new Among ( "ere", 3, 1, "", methodObject ),
-                    new Among ( "en", -1, 1, "", methodObject ),
-                    new Among ( "heden", 10, 1, "", methodObject ),
-                    new Among ( "eren", 10, 1, "", methodObject ),
-                    new Among ( "er", -1, 1, "", methodObject ),
-                    new Among ( "heder", 13, 1, "", methodObject ),
-                    new Among ( "erer", 13, 1, "", methodObject ),
-                    new Among ( "s", -1, 2, "", methodObject ),
-                    new Among ( "heds", 16, 1, "", methodObject ),
-                    new Among ( "es", 16, 1, "", methodObject ),
-                    new Among ( "endes", 18, 1, "", methodObject ),
-                    new Among ( "erendes", 19, 1, "", methodObject ),
-                    new Among ( "enes", 18, 1, "", methodObject ),
-                    new Among ( "ernes", 18, 1, "", methodObject ),
-                    new Among ( "eres", 18, 1, "", methodObject ),
-                    new Among ( "ens", 16, 1, "", methodObject ),
-                    new Among ( "hedens", 24, 1, "", methodObject ),
-                    new Among ( "erens", 24, 1, "", methodObject ),
-                    new Among ( "ers", 16, 1, "", methodObject ),
-                    new Among ( "ets", 16, 1, "", methodObject ),
-                    new Among ( "erets", 28, 1, "", methodObject ),
-                    new Among ( "et", -1, 1, "", methodObject ),
-                    new Among ( "eret", 30, 1, "", methodObject )
-                };
+  private final static Among a_2[] = {
+    new Among("ig", -1, 1),
+    new Among("lig", 0, 1),
+    new Among("elig", 1, 1),
+    new Among("els", -1, 1),
+    new Among("l\u00F8st", -1, 2)
+  };
 
-                private final static Among a_1[] = {
-                    new Among ( "gd", -1, -1, "", methodObject ),
-                    new Among ( "dt", -1, -1, "", methodObject ),
-                    new Among ( "gt", -1, -1, "", methodObject ),
-                    new Among ( "kt", -1, -1, "", methodObject )
-                };
+  private static final char g_c[] = {119, 223, 119, 1 };
 
-                private final static Among a_2[] = {
-                    new Among ( "ig", -1, 1, "", methodObject ),
-                    new Among ( "lig", 0, 1, "", methodObject ),
-                    new Among ( "elig", 1, 1, "", methodObject ),
-                    new Among ( "els", -1, 1, "", methodObject ),
-                    new Among ( "l\u00F8st", -1, 2, "", methodObject )
-                };
+  private static final char g_v[] = {17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128 };
 
-                private static final char g_v[] = {17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128 };
+  private static final char g_s_ending[] = {239, 254, 42, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16 };
 
-                private static final char g_s_ending[] = {239, 254, 42, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16 };
+  private int I_x;
+  private int I_p1;
+  private java.lang.StringBuilder S_ch = new java.lang.StringBuilder();
 
-        private int I_x;
-        private int I_p1;
-        private java.lang.StringBuilder S_ch = new java.lang.StringBuilder();
 
-                private void copy_from(DanishStemmer other) {
-                    I_x = other.I_x;
-                    I_p1 = other.I_p1;
-                    S_ch = other.S_ch;
-                    super.copy_from(other);
-                }
-
-                private boolean r_mark_regions() {
-            int v_1;
-            int v_2;
-                    // (, line 29
-                    I_p1 = limit;
-                    // test, line 33
-                    v_1 = cursor;
-                    // (, line 33
-                    // hop, line 33
-                    {
-                        int c = cursor + 3;
-                        if (0 > c || c > limit)
-                        {
-                            return false;
-                        }
-                        cursor = c;
-                    }
-                    // setmark x, line 33
-                    I_x = cursor;
-                    cursor = v_1;
-                    // goto, line 34
-                    golab0: while(true)
-                    {
-                        v_2 = cursor;
-                        lab1: do {
-                            if (!(in_grouping(g_v, 97, 248)))
-                            {
-                                break lab1;
-                            }
-                            cursor = v_2;
-                            break golab0;
-                        } while (false);
-                        cursor = v_2;
-                        if (cursor >= limit)
-                        {
-                            return false;
-                        }
-                        cursor++;
-                    }
-                    // gopast, line 34
-                    golab2: while(true)
-                    {
-                        lab3: do {
-                            if (!(out_grouping(g_v, 97, 248)))
-                            {
-                                break lab3;
-                            }
-                            break golab2;
-                        } while (false);
-                        if (cursor >= limit)
-                        {
-                            return false;
-                        }
-                        cursor++;
-                    }
-                    // setmark p1, line 34
-                    I_p1 = cursor;
-                    // try, line 35
-                    lab4: do {
-                        // (, line 35
-                        if (!(I_p1 < I_x))
-                        {
-                            break lab4;
-                        }
-                        I_p1 = I_x;
-                    } while (false);
-                    return true;
-                }
+  private boolean r_mark_regions() {
+    I_p1 = limit;
+    int v_1 = cursor;
+    {
+      int c = cursor + 3;
+      if (0 > c || c > limit)
+      {
+        return false;
+      }
+      cursor = c;
+    }
+    I_x = cursor;
+    cursor = v_1;
+golab0: while(true)
+        {
+          int v_2 = cursor;
+lab1: {
+        if (!(in_grouping(g_v, 97, 248)))
+        {
+          break lab1;
+        }
+        cursor = v_2;
+        break golab0;
+}
+cursor = v_2;
+if (cursor >= limit)
+{
+  return false;
+}
+cursor++;
+        }
+golab2: while(true)
+{
+lab3: {
+        if (!(out_grouping(g_v, 97, 248)))
+        {
+          break lab3;
+        }
+        break golab2;
+}
+if (cursor >= limit)
+{
+  return false;
+}
+cursor++;
+}
+I_p1 = cursor;
+lab4: {
+        if (!(I_p1 < I_x))
+        {
+          break lab4;
+        }
+        I_p1 = I_x;
+}
+return true;
+  }
 
-                private boolean r_main_suffix() {
-            int among_var;
-            int v_1;
-            int v_2;
-                    // (, line 40
-                    // setlimit, line 41
-                    v_1 = limit - cursor;
-                    // tomark, line 41
-                    if (cursor < I_p1)
-                    {
-                        return false;
-                    }
-                    cursor = I_p1;
-                    v_2 = limit_backward;
-                    limit_backward = cursor;
-                    cursor = limit - v_1;
-                    // (, line 41
-                    // [, line 41
-                    ket = cursor;
-                    // substring, line 41
-                    among_var = find_among_b(a_0, 32);
-                    if (among_var == 0)
-                    {
-                        limit_backward = v_2;
-                        return false;
-                    }
-                    // ], line 41
-                    bra = cursor;
-                    limit_backward = v_2;
-                    switch(among_var) {
-                        case 0:
-                            return false;
-                        case 1:
-                            // (, line 48
-                            // delete, line 48
-                            slice_del();
-                            break;
-                        case 2:
-                            // (, line 50
-                            if (!(in_grouping_b(g_s_ending, 97, 229)))
-                            {
-                                return false;
-                            }
-                            // delete, line 50
-                            slice_del();
-                            break;
-                    }
-                    return true;
-                }
+private boolean r_main_suffix() {
+  int among_var;
+  if (cursor < I_p1)
+  {
+    return false;
+  }
+  int v_2 = limit_backward;
+  limit_backward = I_p1;
+  ket = cursor;
+  among_var = find_among_b(a_0);
+  if (among_var == 0)
+  {
+    limit_backward = v_2;
+    return false;
+  }
+  bra = cursor;
+  limit_backward = v_2;
+  switch (among_var) {
+    case 1:
+      slice_del();
+      break;
+    case 2:
+      if (!(in_grouping_b(g_s_ending, 97, 229)))
+      {
+        return false;
+      }
+      slice_del();
+      break;
+  }
+  return true;
+}
 
-                private boolean r_consonant_pair() {
-            int v_1;
-            int v_2;
-            int v_3;
-                    // (, line 54
-                    // test, line 55
-                    v_1 = limit - cursor;
-                    // (, line 55
-                    // setlimit, line 56
-                    v_2 = limit - cursor;
-                    // tomark, line 56
-                    if (cursor < I_p1)
-                    {
-                        return false;
-                    }
-                    cursor = I_p1;
-                    v_3 = limit_backward;
-                    limit_backward = cursor;
-                    cursor = limit - v_2;
-                    // (, line 56
-                    // [, line 56
-                    ket = cursor;
-                    // substring, line 56
-                    if (find_among_b(a_1, 4) == 0)
-                    {
-                        limit_backward = v_3;
-                        return false;
-                    }
-                    // ], line 56
-                    bra = cursor;
-                    limit_backward = v_3;
-                    cursor = limit - v_1;
-                    // next, line 62
-                    if (cursor <= limit_backward)
-                    {
-                        return false;
-                    }
-                    cursor--;
-                    // ], line 62
-                    bra = cursor;
-                    // delete, line 62
-                    slice_del();
-                    return true;
-                }
+private boolean r_consonant_pair() {
+  int v_1 = limit - cursor;
+  if (cursor < I_p1)
+  {
+    return false;
+  }
+  int v_3 = limit_backward;
+  limit_backward = I_p1;
+  ket = cursor;
+  if (find_among_b(a_1) == 0)
+  {
+    limit_backward = v_3;
+    return false;
+  }
+  bra = cursor;
+  limit_backward = v_3;
+  cursor = limit - v_1;
+  if (cursor <= limit_backward)
+  {
+    return false;
+  }
+  cursor--;
+  bra = cursor;
+  slice_del();
+  return true;
+}
 
-                private boolean r_other_suffix() {
-            int among_var;
-            int v_1;
-            int v_2;
-            int v_3;
-            int v_4;
-                    // (, line 65
-                    // do, line 66
-                    v_1 = limit - cursor;
-                    lab0: do {
-                        // (, line 66
-                        // [, line 66
-                        ket = cursor;
-                        // literal, line 66
-                        if (!(eq_s_b(2, "st")))
-                        {
-                            break lab0;
-                        }
-                        // ], line 66
-                        bra = cursor;
-                        // literal, line 66
-                        if (!(eq_s_b(2, "ig")))
-                        {
-                            break lab0;
-                        }
-                        // delete, line 66
-                        slice_del();
-                    } while (false);
-                    cursor = limit - v_1;
-                    // setlimit, line 67
-                    v_2 = limit - cursor;
-                    // tomark, line 67
-                    if (cursor < I_p1)
-                    {
-                        return false;
-                    }
-                    cursor = I_p1;
-                    v_3 = limit_backward;
-                    limit_backward = cursor;
-                    cursor = limit - v_2;
-                    // (, line 67
-                    // [, line 67
-                    ket = cursor;
-                    // substring, line 67
-                    among_var = find_among_b(a_2, 5);
-                    if (among_var == 0)
-                    {
-                        limit_backward = v_3;
-                        return false;
-                    }
-                    // ], line 67
-                    bra = cursor;
-                    limit_backward = v_3;
-                    switch(among_var) {
-                        case 0:
-                            return false;
-                        case 1:
-                            // (, line 70
-                            // delete, line 70
-                            slice_del();
-                            // do, line 70
-                            v_4 = limit - cursor;
-                            lab1: do {
-                                // call consonant_pair, line 70
-                                if (!r_consonant_pair())
-                                {
-                                    break lab1;
-                                }
-                            } while (false);
-                            cursor = limit - v_4;
-                            break;
-                        case 2:
-                            // (, line 72
-                            // <-, line 72
-                            slice_from("l\u00F8s");
-                            break;
-                    }
-                    return true;
-                }
+private boolean r_other_suffix() {
+  int among_var;
+  int v_1 = limit - cursor;
+lab0: {
+        ket = cursor;
+        if (!(eq_s_b("st")))
+        {
+          break lab0;
+        }
+        bra = cursor;
+        if (!(eq_s_b("ig")))
+        {
+          break lab0;
+        }
+        slice_del();
+}
+cursor = limit - v_1;
+if (cursor < I_p1)
+{
+  return false;
+}
+int v_3 = limit_backward;
+limit_backward = I_p1;
+ket = cursor;
+among_var = find_among_b(a_2);
+if (among_var == 0)
+{
+  limit_backward = v_3;
+  return false;
+}
+bra = cursor;
+limit_backward = v_3;
+switch (among_var) {
+  case 1:
+    slice_del();
+    int v_4 = limit - cursor;
+    r_consonant_pair();
+    cursor = limit - v_4;
+    break;
+  case 2:
+    slice_from("l\u00F8s");
+    break;
+}
+return true;
+}
 
-                private boolean r_undouble() {
-            int v_1;
-            int v_2;
-                    // (, line 75
-                    // setlimit, line 76
-                    v_1 = limit - cursor;
-                    // tomark, line 76
-                    if (cursor < I_p1)
-                    {
-                        return false;
-                    }
-                    cursor = I_p1;
-                    v_2 = limit_backward;
-                    limit_backward = cursor;
-                    cursor = limit - v_1;
-                    // (, line 76
-                    // [, line 76
-                    ket = cursor;
-                    if (!(out_grouping_b(g_v, 97, 248)))
-                    {
-                        limit_backward = v_2;
-                        return false;
-                    }
-                    // ], line 76
-                    bra = cursor;
-                    // -> ch, line 76
-                    S_ch = slice_to(S_ch);
-                    limit_backward = v_2;
-                    // name ch, line 77
-                    if (!(eq_v_b(S_ch)))
-                    {
-                        return false;
-                    }
-                    // delete, line 78
-                    slice_del();
-                    return true;
-                }
+private boolean r_undouble() {
+  if (cursor < I_p1)
+  {
+    return false;
+  }
+  int v_2 = limit_backward;
+  limit_backward = I_p1;
+  ket = cursor;
+  if (!(in_grouping_b(g_c, 98, 122)))
+  {
+    limit_backward = v_2;
+    return false;
+  }
+  bra = cursor;
+  slice_to(S_ch);
+  limit_backward = v_2;
+  if (!(eq_s_b(S_ch)))
+  {
+    return false;
+  }
+  slice_del();
+  return true;
+}
 
-                @Override
-                public boolean stem() {
-            int v_1;
-            int v_2;
-            int v_3;
-            int v_4;
-            int v_5;
-                    // (, line 82
-                    // do, line 84
-                    v_1 = cursor;
-                    lab0: do {
-                        // call mark_regions, line 84
-                        if (!r_mark_regions())
-                        {
-                            break lab0;
-                        }
-                    } while (false);
-                    cursor = v_1;
-                    // backwards, line 85
-                    limit_backward = cursor; cursor = limit;
-                    // (, line 85
-                    // do, line 86
-                    v_2 = limit - cursor;
-                    lab1: do {
-                        // call main_suffix, line 86
-                        if (!r_main_suffix())
-                        {
-                            break lab1;
-                        }
-                    } while (false);
-                    cursor = limit - v_2;
-                    // do, line 87
-                    v_3 = limit - cursor;
-                    lab2: do {
-                        // call consonant_pair, line 87
-                        if (!r_consonant_pair())
-                        {
-                            break lab2;
-                        }
-                    } while (false);
-                    cursor = limit - v_3;
-                    // do, line 88
-                    v_4 = limit - cursor;
-                    lab3: do {
-                        // call other_suffix, line 88
-                        if (!r_other_suffix())
-                        {
-                            break lab3;
-                        }
-                    } while (false);
-                    cursor = limit - v_4;
-                    // do, line 89
-                    v_5 = limit - cursor;
-                    lab4: do {
-                        // call undouble, line 89
-                        if (!r_undouble())
-                        {
-                            break lab4;
-                        }
-                    } while (false);
-                    cursor = limit - v_5;
-                    cursor = limit_backward;                    return true;
-                }
+public boolean stem() {
+  int v_1 = cursor;
+  r_mark_regions();
+  cursor = v_1;
+  limit_backward = cursor;
+  cursor = limit;
+  int v_2 = limit - cursor;
+  r_main_suffix();
+  cursor = limit - v_2;
+  int v_3 = limit - cursor;
+  r_consonant_pair();
+  cursor = limit - v_3;
+  int v_4 = limit - cursor;
+  r_other_suffix();
+  cursor = limit - v_4;
+  int v_5 = limit - cursor;
+  r_undouble();
+  cursor = limit - v_5;
+  cursor = limit_backward;
+  return true;
+}
 
-        @Override
-        public boolean equals( Object o ) {
-            return o instanceof DanishStemmer;
-        }
+@Override
+public boolean equals( Object o ) {
+  return o instanceof DanishStemmer;
+}
 
-        @Override
-        public int hashCode() {
-            return DanishStemmer.class.getName().hashCode();
-        }
+@Override
+public int hashCode() {
+  return DanishStemmer.class.getName().hashCode();
+}
 
 
 
 }
+
diff --git a/lucene/analysis/common/src/java/org/tartarus/snowball/ext/DutchStemmer.java b/lucene/analysis/common/src/java/org/tartarus/snowball/ext/DutchStemmer.java
index 6f89850..9e7eded 100644
--- a/lucene/analysis/common/src/java/org/tartarus/snowball/ext/DutchStemmer.java
+++ b/lucene/analysis/common/src/java/org/tartarus/snowball/ext/DutchStemmer.java
@@ -1,855 +1,626 @@
-// This file was generated automatically by the Snowball to Java compiler
+// Generated by Snowball 2.0.0 - https://snowballstem.org/
 
 package org.tartarus.snowball.ext;
 
 import org.tartarus.snowball.Among;
-import org.tartarus.snowball.SnowballProgram;
 
- /**
-  * This class was automatically generated by a Snowball to Java compiler 
-  * It implements the stemming algorithm defined by a snowball script.
-  */
-
-@SuppressWarnings("unused") public class DutchStemmer extends SnowballProgram {
-
-private static final long serialVersionUID = 1L;
-
-        /* patched */ private static final java.lang.invoke.MethodHandles.Lookup methodObject = java.lang.invoke.MethodHandles.lookup();
-
-                private final static Among a_0[] = {
-                    new Among ( "", -1, 6, "", methodObject ),
-                    new Among ( "\u00E1", 0, 1, "", methodObject ),
-                    new Among ( "\u00E4", 0, 1, "", methodObject ),
-                    new Among ( "\u00E9", 0, 2, "", methodObject ),
-                    new Among ( "\u00EB", 0, 2, "", methodObject ),
-                    new Among ( "\u00ED", 0, 3, "", methodObject ),
-                    new Among ( "\u00EF", 0, 3, "", methodObject ),
-                    new Among ( "\u00F3", 0, 4, "", methodObject ),
-                    new Among ( "\u00F6", 0, 4, "", methodObject ),
-                    new Among ( "\u00FA", 0, 5, "", methodObject ),
-                    new Among ( "\u00FC", 0, 5, "", methodObject )
-                };
-
-                private final static Among a_1[] = {
-                    new Among ( "", -1, 3, "", methodObject ),
-                    new Among ( "I", 0, 2, "", methodObject ),
-                    new Among ( "Y", 0, 1, "", methodObject )
-                };
-
-                private final static Among a_2[] = {
-                    new Among ( "dd", -1, -1, "", methodObject ),
-                    new Among ( "kk", -1, -1, "", methodObject ),
-                    new Among ( "tt", -1, -1, "", methodObject )
-                };
-
-                private final static Among a_3[] = {
-                    new Among ( "ene", -1, 2, "", methodObject ),
-                    new Among ( "se", -1, 3, "", methodObject ),
-                    new Among ( "en", -1, 2, "", methodObject ),
-                    new Among ( "heden", 2, 1, "", methodObject ),
-                    new Among ( "s", -1, 3, "", methodObject )
-                };
-
-                private final static Among a_4[] = {
-                    new Among ( "end", -1, 1, "", methodObject ),
-                    new Among ( "ig", -1, 2, "", methodObject ),
-                    new Among ( "ing", -1, 1, "", methodObject ),
-                    new Among ( "lijk", -1, 3, "", methodObject ),
-                    new Among ( "baar", -1, 4, "", methodObject ),
-                    new Among ( "bar", -1, 5, "", methodObject )
-                };
-
-                private final static Among a_5[] = {
-                    new Among ( "aa", -1, -1, "", methodObject ),
-                    new Among ( "ee", -1, -1, "", methodObject ),
-                    new Among ( "oo", -1, -1, "", methodObject ),
-                    new Among ( "uu", -1, -1, "", methodObject )
-                };
-
-                private static final char g_v[] = {17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 };
-
-                private static final char g_v_I[] = {1, 0, 0, 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 };
-
-                private static final char g_v_j[] = {17, 67, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 };
-
-        private int I_p2;
-        private int I_p1;
-        private boolean B_e_found;
-
-                private void copy_from(DutchStemmer other) {
-                    I_p2 = other.I_p2;
-                    I_p1 = other.I_p1;
-                    B_e_found = other.B_e_found;
-                    super.copy_from(other);
-                }
-
-                private boolean r_prelude() {
-            int among_var;
-            int v_1;
-            int v_2;
-            int v_3;
-            int v_4;
-            int v_5;
-            int v_6;
-                    // (, line 41
-                    // test, line 42
-                    v_1 = cursor;
-                    // repeat, line 42
-                    replab0: while(true)
-                    {
-                        v_2 = cursor;
-                        lab1: do {
-                            // (, line 42
-                            // [, line 43
-                            bra = cursor;
-                            // substring, line 43
-                            among_var = find_among(a_0, 11);
-                            if (among_var == 0)
-                            {
-                                break lab1;
-                            }
-                            // ], line 43
-                            ket = cursor;
-                            switch(among_var) {
-                                case 0:
-                                    break lab1;
-                                case 1:
-                                    // (, line 45
-                                    // <-, line 45
-                                    slice_from("a");
-                                    break;
-                                case 2:
-                                    // (, line 47
-                                    // <-, line 47
-                                    slice_from("e");
-                                    break;
-                                case 3:
-                                    // (, line 49
-                                    // <-, line 49
-                                    slice_from("i");
-                                    break;
-                                case 4:
-                                    // (, line 51
-                                    // <-, line 51
-                                    slice_from("o");
-                                    break;
-                                case 5:
-                                    // (, line 53
-                                    // <-, line 53
-                                    slice_from("u");
-                                    break;
-                                case 6:
-                                    // (, line 54
-                                    // next, line 54
-                                    if (cursor >= limit)
-                                    {
-                                        break lab1;
-                                    }
-                                    cursor++;
-                                    break;
-                            }
-                            continue replab0;
-                        } while (false);
-                        cursor = v_2;
-                        break replab0;
-                    }
-                    cursor = v_1;
-                    // try, line 57
-                    v_3 = cursor;
-                    lab2: do {
-                        // (, line 57
-                        // [, line 57
-                        bra = cursor;
-                        // literal, line 57
-                        if (!(eq_s(1, "y")))
-                        {
-                            cursor = v_3;
-                            break lab2;
-                        }
-                        // ], line 57
-                        ket = cursor;
-                        // <-, line 57
-                        slice_from("Y");
-                    } while (false);
-                    // repeat, line 58
-                    replab3: while(true)
-                    {
-                        v_4 = cursor;
-                        lab4: do {
-                            // goto, line 58
-                            golab5: while(true)
-                            {
-                                v_5 = cursor;
-                                lab6: do {
-                                    // (, line 58
-                                    if (!(in_grouping(g_v, 97, 232)))
-                                    {
-                                        break lab6;
-                                    }
-                                    // [, line 59
-                                    bra = cursor;
-                                    // or, line 59
-                                    lab7: do {
-                                        v_6 = cursor;
-                                        lab8: do {
-                                            // (, line 59
-                                            // literal, line 59
-                                            if (!(eq_s(1, "i")))
-                                            {
-                                                break lab8;
-                                            }
-                                            // ], line 59
-                                            ket = cursor;
-                                            if (!(in_grouping(g_v, 97, 232)))
-                                            {
-                                                break lab8;
-                                            }
-                                            // <-, line 59
-                                            slice_from("I");
-                                            break lab7;
-                                        } while (false);
-                                        cursor = v_6;
-                                        // (, line 60
-                                        // literal, line 60
-                                        if (!(eq_s(1, "y")))
-                                        {
-                                            break lab6;
-                                        }
-                                        // ], line 60
-                                        ket = cursor;
-                                        // <-, line 60
-                                        slice_from("Y");
-                                    } while (false);
-                                    cursor = v_5;
-                                    break golab5;
-                                } while (false);
-                                cursor = v_5;
-                                if (cursor >= limit)
-                                {
-                                    break lab4;
-                                }
-                                cursor++;
-                            }
-                            continue replab3;
-                        } while (false);
-                        cursor = v_4;
-                        break replab3;
-                    }
-                    return true;
-                }
-
-                private boolean r_mark_regions() {
-                    // (, line 64
-                    I_p1 = limit;
-                    I_p2 = limit;
-                    // gopast, line 69
-                    golab0: while(true)
-                    {
-                        lab1: do {
-                            if (!(in_grouping(g_v, 97, 232)))
-                            {
-                                break lab1;
-                            }
-                            break golab0;
-                        } while (false);
-                        if (cursor >= limit)
-                        {
-                            return false;
-                        }
-                        cursor++;
-                    }
-                    // gopast, line 69
-                    golab2: while(true)
-                    {
-                        lab3: do {
-                            if (!(out_grouping(g_v, 97, 232)))
-                            {
-                                break lab3;
-                            }
-                            break golab2;
-                        } while (false);
-                        if (cursor >= limit)
-                        {
... 51338 lines suppressed ...