// Path: src/roquen/fake/Vect2i.java
// public class Vect2i {
//   public int x, y;
//   
//   /** */
//   private static final int HASH = hashMakeSeed(0);
//   
//   @Override
//   public int hashCode()
//   {
//     return hashComplete(hashAdd(HASH,x,y));
//   }
// }


import roquen.fake.Vect2i;

  /**
   * Gather all the even bits into the lower 16. Odd
   * bits must be already zero.
   */
  public static int gather1_(int x)
  {
    x = (x ^ (x >>> 1)) & 0x33333333; 
    x = (x ^ (x >>> 2)) & 0x0F0F0F0F; 
    x = (x ^ (x >>> 4)) & 0x00FF00FF; 
    x = (x ^ (x >>> 8)) & 0x0000FFFF; 
    return x;
  }

  /**
   * Gather all the even bits into the lower 16.
   */
  public static int gather1(int x)
  {
    x &= MASK_X;
    x = (x ^ (x >>> 1)) & 0x33333333; 
    x = (x ^ (x >>> 2)) & 0x0F0F0F0F; 
    x = (x ^ (x >>> 4)) & 0x00FF00FF; 
    x = (x ^ (x >>> 8)) & 0x0000FFFF; 
    return x;
  }

  /** 
   *
   */
// Path: src/roquen/fake/Vect2i.java
// public class Vect2i {
//   public int x, y;
//   
//   /** */
//   private static final int HASH = hashMakeSeed(0);
//   
//   @Override
//   public int hashCode()
//   {
//     return hashComplete(hashAdd(HASH,x,y));
//   }
// }


// Path: src/roquen/math/sfc/Morton2D.java
import roquen.fake.Vect2i;


  /**
   * Gather all the even bits into the lower 16. Odd
   * bits must be already zero.
   */
  public static int gather1_(int x)
  {
    x = (x ^ (x >>> 1)) & 0x33333333; 
    x = (x ^ (x >>> 2)) & 0x0F0F0F0F; 
    x = (x ^ (x >>> 4)) & 0x00FF00FF; 
    x = (x ^ (x >>> 8)) & 0x0000FFFF; 
    return x;
  }

  /**
   * Gather all the even bits into the lower 16.
   */
  public static int gather1(int x)
  {
    x &= MASK_X;
    x = (x ^ (x >>> 1)) & 0x33333333; 
    x = (x ^ (x >>> 2)) & 0x0F0F0F0F; 
    x = (x ^ (x >>> 4)) & 0x00FF00FF; 
    x = (x ^ (x >>> 8)) & 0x0000FFFF; 
    return x;
  }

  /** 
   *
   */
  public static int encode4(Vect2i v)