private void trFixdown (final int ISA, final int ISAd, final int ISAn, final int sa, int i, final int size) {

		final int[] SA = this.SA;

		int j, k;
		int v;
		int c, d, e;

		for (v = SA[sa +i], c = trGetC (ISA, ISAd, ISAn, v); (j = 2 * i + 1) < size; SA[sa + i] = SA[sa + k], i = k) {
			k = j++;
			d = trGetC (ISA, ISAd, ISAn, SA[sa + k]);
			if (d < (e = trGetC (ISA, ISAd, ISAn, SA[sa + j]))) {
				k = j;
				d = e;
			}
			if (d <= c) {
				break;
			}
		}
		SA[sa + i] = v;

	}