#include/*c2001 */<stdio.h>
#define/**/Y(X)/*tmode(fileno(X),O_BINAR*/
typedef/**/unsigned/**/char/**/b;b/**/r[1<<15],B
[1<<14],H[128][16];int/**/L[]={1,2,3,-116,-108,6,7,8,-
68,-62,-2,12,-20,14,-26,16,-70,18,19,20,21,-84,23,-107,25
,-64,27,28,-69,30,-113,-75,-125,-61,35,36,-46,38,39,40,41,42,
43,44,45,46,47,-25,-12,-48,51,52,53,-57,55,56,57,58,59,-81,-127,
-126,-106,-77,-91,66,67,-14,69,-29,71,-114,-117,-121,75,-51,-111,78,
79,80,-115,-100,-97,84,-105,86,87,88,-52,-85,-76,-35,-37,-33,95,96,-45,
98,-78,100,-60,-65,103,-122,105,106,-31,-01,109,-07,111,-118,-82,-119,-34,
116,-92,118,119,-18,121,-27,0,124,-96,-58,-4},R[]={77,37,17,4,5,-112,15,-50,
9,10,11,13,-28,-19,-30,-83,-56,34,26,22,-41,-120,-40,24,-54,-53,-95,33,29,32,31
,-3,-123,-59,-10,-109,-98,70,-101,49,-102,-39,-36,-79,-88,48,-5,-74,-9,50,54,-73,
-47,-66,-49,63,62,-93,61,60,-11,-13,-89,64,65,68,-24,-21,-90,-22,76,72,73,74,-42,-80
,-8,-32,83,82,81,-99,-110,94,85,-104,-103,90,89,-72,+91,92,93,-38,122,110,97,101,99,-
71,-86,102,107,104,-16,-63,-23,108,-124,-17,113,112,-67,114,115,117,-43,-87,120,-94,-6,
-15,123,-44,125,126,-55},C[128],_[1<<14],c,d,e,*f,h,i,j,k,l,m,n,o,p,q,s,t[1<<14],u,v,x,y
[256],z[256];FILE*I,*O;int/**/g(int/**/a){for(;a>=h;u^=r[(h++)&32767]=(b)k)if((k=fgetc(I))
==EOF){s=h++;return-1;}return(a<s)?r[a&32767]:-1;}int/**/G(){if((j=fgetc(I))==EOF||(k=fgetc
(I))==EOF){u=j;return-1;}return(k<<8)|j;}void/**/w(int/**/a){v^=a;fputc(a,O);}void/**/W(int a)
{v^=a&255;v^=a>>8;fputc(a&255,O);fputc(a>>8,O);}void/**/A(){k=r[p&32767];for(n=0;n<256;n++)if(y[
n])if((p-t[y[n]])>16380)break;if(!(y[n]=_[m=y[ n]]))z[n]=0;t[z[ k]= z[k]?(_[z[k]]=m):(y[k]=m)]=p
++; _[m]=0;}void/**/E(){C[-k]=x;for(i=0 ;i<x;i ++)H[-k][i]=B[i ];} void/**/T(int/**/a){B[x++]=0
;if ((k=L[a])<1)E();else/**/T(k);B[x-1] =1; if( (k=R[a])<1)E() ;/* */else/**/T(k);B[--x]=0;}void
M() {for(i=x=j=k=0;i<l&&x<l;i++){n=r[( p- l+ i)&32767];if (n &+ 128 )x=l;else{for(m=0;m<C[
n] ;m++){k|=((int)H[n][m])<<(j ++); if(j>7){B[x++ ]=(b)k;j=k=0;}}}}if(j>0)B[ x++]=(b)k;if(x<l){W(/*
*/ 16384|l);for(i=0;i<x;w(B[i ++])); {; } }else{W(l ) ;; for (i=0;i<l;i++)w(r[(p-l+i
)& 32767 ]);}l=0x0;}int main( int a,char **S){I= a >2 ?fopen(S[2],"rb"):stdin;
O= a>3? fopen(S[3],"wb+")/* */ :stdout;if (!I|| !O)return+1 ; Y(I);Y(O);for(i=u=v =p=h=
0; (i)< 32768;r[i++]=0);s= 1<<30;if(* S[1 ]-120){{; }for(i=0;i<256;i++)y [i]
= z[i ]=0;o=-16381;for(y [i=0]=q=1;i< + 16381;i++){ _[q]=q+1;t[q]=o++;;
q ++; }z[B[x=_[q-1]=0]=0] =q-1;for (T(l=0);g( p)+1;){m=n=0;for(q=y[r
[ p& 32767]];q;q=_[q]){o =t[q];e=p-o ;if(e<n){; break;} for(i=1;i<e;++
i) if(g(p+i )-g(o+i)) break;if(i >n){m=o;n= i ;}}d= n;c=p-m;if(d>
4) {if(l)M ();if(d < 256){; W( 32768 |c );w( d);}else {W(c
|( 49152)) ;W(d);;} for(i=0x0 ;i<d;i++) A(); continue ;}A
( );l++;; if(16381 < l)M() ;}if(l>0 )M(
);fputc( u,O);;} else{for(;(i=G( ))
+1;){if(i&32768){; if(i&16384)e=G( )
;else{e=fgetc(I);}o= i&16383;for( i=0
;i<e;i++){w(r[p&+ 32767]=r[(p- o)
&32767]);p++;}h=p; }else{e=16383 &i
;if(i &16384){j=8;; for(i=x=k=0; i
<e;) {if(j>7){if((k =fgetc(I) )==EOF)break
;j= 0;}f=(k&(1<<j ))?R:L;if(f[x
] <=0){r[32767&( p+i)]=(b)(-f [
x ]);i++;x=0;}else x=f[x ];j++;}
for (i=0;i <e;i++)w( r[32767& (p+i )
]);h=p +=e;}else{; for(i=0;i< e;i++
) {w( g( p));p++;}} }}if(u-v )
fputs("Checksu" "m failed" "\n",
stderr );} fclose (I); fclose (O
) ;return/**/0 ;}
|