while((read_size=fread(buff,1,4096,fq))){
for(k=0;k<256;k++){
for(i=0;i<16;i++)
buf[i]=buff[k*16+i];

for(i=0;i<16;i++){
p=a.m[i];
W1^=G[i][p][0];
W2^=G[i][p][1];
}
z=(c1.dd[1]&0xff)^(c1.dd[0]>>4);

c1.dd[0]^=W1;
c1.dd[1]^=W2;
c1=s5(c1);
c1.dd[0]^=z;
c1.dd[1]^=~z;

for(i=0;i<16;i++){
buf[i]^=c1.m[i];
buf[i+16]^=c2.m[i];
}

for(i=0;i<16;i++)
buff[i+k*16]=buf[i];
}
fwrite(buff,1,4096,fp);

}