@Override
 public int nextAsInt() {
   long t = w & -w;
   int answer = (x + 1) * 64 - 1 - Long.bitCount(t - 1);
   w ^= t;
   while (w == 0) {
     --x;
     if (x < 0) break;
     w = Long.reverse(bitmap[x]);
   }
   return answer;
 }
 void wrap(long[] b) {
   bitmap = b;
   for (x = bitmap.length - 1; x >= 0; --x) if ((w = Long.reverse(bitmap[x])) != 0) break;
 }