private static void createDecodeTables(int limit[], int base[], int perm[], byte len[], int minLen, int maxLen, int alphaSize) {
		int pp = 0;
		for (int i = minLen; i <= maxLen; i++) {
			for (int i_ = 0; i_ < alphaSize; i_++) {
				if (len[i_] == i) {
					perm[pp] = i_;
					pp++;
				}
			}
		}
		for (int i = 0; i < 23; i++) {
			base[i] = 0;
		}
		for (int i = 0; i < alphaSize; i++) {
			base[len[i] + 1]++;
		}
		for (int i = 1; i < 23; i++) {
			base[i] += base[i - 1];
		}
		for (int i = 0; i < 23; i++) {
			limit[i] = 0;
		}
		int vec = 0;
		for (int i = minLen; i <= maxLen; i++) {
			vec += base[i + 1] - base[i];
			limit[i] = vec - 1;
			vec <<= 1;
		}
		for (int i = minLen + 1; i <= maxLen; i++) {
			base[i] = (limit[i - 1] + 1 << 1) - base[i];
		}
	}