private float getAvailableBackoff(WordSequence wordSequence)
        {
            float num  = 0f;
            int   num2 = wordSequence.size();
            int   num3 = ((Integer)this.unigramIDMap.get(wordSequence.getWord(num2 - 2))).intValue();

            NgramTrieModel.TrieRange trieRange = new NgramTrieModel.TrieRange(this.unigrams[num3].next, this.unigrams[num3 + 1].next);
            if (this.curDepth == 1)
            {
                num += this.unigrams[num3].backoff;
            }
            int i    = num2 - 3;
            int num4 = 0;

            while (i >= 0)
            {
                int   wordId = ((Integer)this.unigramIDMap.get(wordSequence.getWord(i))).intValue();
                float num5   = this.trie.readNgramBackoff(wordId, num4, trieRange, this.quant);
                if (!trieRange.getFound())
                {
                    break;
                }
                num += num5;
                if (!trieRange.isSearchable())
                {
                    break;
                }
                i--;
                num4++;
            }
            return(num);
        }
 private float getAvailableProb(WordSequence wordSequence, NgramTrieModel.TrieRange trieRange, float num)
 {
     if (!trieRange.isSearchable())
     {
         return(num);
     }
     for (int i = wordSequence.size() - 2; i >= 0; i--)
     {
         int num2 = wordSequence.size() - 2 - i;
         if (num2 + 1 == this.maxDepth)
         {
             break;
         }
         int   wordId = ((Integer)this.unigramIDMap.get(wordSequence.getWord(i))).intValue();
         float num3   = this.trie.readNgramProb(wordId, num2, trieRange, this.quant);
         if (!trieRange.getFound())
         {
             break;
         }
         num = num3;
         this.curDepth++;
         if (!trieRange.isSearchable())
         {
             break;
         }
     }
     return(num);
 }