CHIP DFF16 {
  IN in[16];
  OUT out[16];
  PARTS:
    DFF(in=in[0],out=out[0]);
    DFF(in=in[1],out=out[1]);
    DFF(in=in[2],out=out[2]);
    DFF(in=in[3],out=out[3]);
    DFF(in=in[4],out=out[4]);
    DFF(in=in[5],out=out[5]);
    DFF(in=in[6],out=out[6]);
    DFF(in=in[7],out=out[7]);
    DFF(in=in[8],out=out[8]);
    DFF(in=in[9],out=out[9]);
    DFF(in=in[10],out=out[10]);
    DFF(in=in[11],out=out[11]);
    DFF(in=in[12],out=out[12]);
    DFF(in=in[13],out=out[13]);
    DFF(in=in[14],out=out[14]);
    DFF(in=in[15],out=out[15]);
}
CHIP Register16 {
  IN in[16],load;
  OUT out[16];
  PARTS:
    DFF16(in=MuxOut,out=MuxInA, out=out);
    Mux16(a=MuxInA,b=in,sel=load,out=MuxOut);
}
