-

+; "...\\\";
.(" !") .


:





:      |   |   | 


: 07.11.08.

(******************************************************************************)
(* ,           *)
(* 34.11-94.                                               *)
(******************************************************************************)
341194+;

  , "...\\\",
  "...\\\",
  "...\\\",
  "...\\\",
  "...\\\";


  32 = 8 ;
  =
    s, h, l: 32;
    p: 32 ;
    b:
  ;


  : 8, 16 ;
  : 32;


  : ;
  : 100H ;
  : .;
  : .;
  : 32 ;

(1, 2: ): ;

  .(, .(, 1) * .(, 2))
;

(, : ): ;

  .(, .(, ) + .(, ))
;

(1, 2: ): ;

  .(, .(, 1) / .(, 2))
;

32(1, 2: ; +: ): ;

  1, 2: ;
  : ;

  1 := 0; .(.(1), .(1), 4);
  2 := 0; .(.(2), .(2), 4);
  (1, 2);
  .(.(1), .(), 4);
  .(.(1)+4, .(), 1);
 
32;

32(-, -: ): ;

  1, 2: ;

  1 := 0; .(.(), .(1), 4);
  2 := 0; .(.(), .(2), 4);
  1 < 2
32;

(: ; : .): ;

  1, 2, 3: ; : ;

  1 := 0; 2 := 0; .(.(), .(1), 1);
  1 := .(1, 4); .(.(1), .(2), 1);
  2 := .(2, -4); 1 := .(1, -8);
  3 := [*2, 2] + .([*2+1, 1], 4);
  .(.(3), .(), 1);
 
;

(N: ; X: ): ;

  N1, N2, S: ;
  : ;
  : ;
  : ;
  : ;

  .(.(N), .(N1), 4);
  .(.(N)+4, .(N2), 4);
  S := 32(N1, X, );
  := 0 3
    .(.(S)+, .(), 1);
    := (, );
    .(.(), .(S)+, 1)
  ;
  S := .(S, 11);
  S := (S, N2);
  N2 := N1; N1 := S;
  .(.(N1), .(), 4);
  .(.(N2), .()+4, 4);
 
;

(+, +: );

  1, 2: ;
  N: ;

  .(.(), .(N), 4);
  .(.(), .(N)+4, 4);
  1 := 1 3
    2 := 0 7
      N := (N, [2])
   
  ;
  1 := 7 0 -1
    N := (N, [1])
  ;
  .(.(N), .(), 4);
  .(.(N)+4, .(), 4)
;

(H+, M+: 32);

  U, V, W, S: 32;
  , : ;
  i, : ;

  .(.(H), .(U), 32);
  .(.(M), .(V), 32);
 
    i := 0 7 2
      := 0 7
        W[] := (U[], V[])
      ;
      [0] := ((((W[0], 255), .((W[2], 255), 8)),
       .((W[4], 255), 16)), .((W[6], 255), 24));
      [1] := (((.((W[0], 65280), -8), (W[2], 65280)),
       .((W[4], 65280), 8)), .((W[6], 65280), 16));
      [2] := (((.((W[0], 16711680), -16), .((W[2], 16711680), -8)),
       (W[4], 16711680)), .((W[6], 16711680), 8));
      [3] := (((.((W[0], -16777216), -24), .((W[2], -16777216), -16)),
       .((W[4], -16777216), -8)), (W[6], -16777216));
      [4] := ((((W[1], 255), .((W[3], 255), 8)),
       .((W[5], 255), 16)), .((W[7], 255), 24));
      [5] := (((.((W[1], 65280), -8), (W[3], 65280)),
       .((W[5], 65280), 8)), .((W[7], 65280), 16));
      [6] := (((.((W[1], 16711680), -16), .((W[3], 16711680), -8)),
       (W[5], 16711680)), .((W[7], 16711680), 8));
      [7] := (((.((W[1], -16777216), -24), .((W[3], -16777216), -16)),
       .((W[5], -16777216), -8)), (W[7], -16777216));
      := H[i]; := H[i+1];
      (, );
      S[i] := ; S[i+1] := ;
      i = 6 ;
      := (U[0], U[2]);
      := (U[1], U[3]);
      := 0 5 U[] := U[+2] ;
      U[6] := ; U[7] := ;
      i = 2
        U[0] := (U[0], -16711936);
        U[1] := (U[1], -16711936);
        U[2] := (U[2], 16711935);
        U[3] := (U[3], 16711935);
        U[4] := (U[4], 16776960);
        U[5] := (U[5], -16776961);
        U[6] := (U[6], 255);
        U[7] := (U[7], -16711681)
      ;
      := V[0];
      := V[2];
      V[0] := V[4];
      V[2] := V[6];
      V[4] := (, );
      V[6] := (V[0], );
      := V[1];
      := V[3];
      V[1] := V[5];
      V[3] := V[7];
      V[5] := (, );
      V[7] := (V[1], );
    ;
   
  ;
  U[0] := (M[0], S[6]);
  U[1] := (M[1], S[7]);
  U[2] := ((((((((((
    M[2], .(S[0], 16)), .(S[0], -16)), (S[0], 65535)),
    (S[1], 65535)), .(S[1], -16)), .(S[2], 16)), S[6]), .(S[6], 16)),
    (S[7], -65536)), .(S[7], -16));
  U[3] := ((((((((((((((
    M[3], (S[0], 65535)), .(S[0], 16)), (S[1], 65535)),
    .(S[1], 16)), .(S[1], -16)), .(S[2], 16)), .(S[2], -16)),
    .(S[3], 16)), S[6]), .(S[6], 16)), .(S[6], -16)), (S[7], 65535)),
    .(S[7], 16)), .(S[7], -16));
  U[4] := ((((((
    (((((((((
    M[4], (S[0], -65536)), .(S[0], 16)), .(S[0], -16)),
    (S[1], -65536)), .(S[1], -16)), .(S[2], 16)), .(S[2], -16)),
    .(S[3], 16)), .(S[3], -16)), .(S[4], 16)), .(S[6], 16)),
    .(S[6], -16)), (S[7], 65535)), .(S[7], 16)), .(S[7], -16));
  U[5] := (((((((
    (((((((((
    M[5], .(S[0], 16)), .(S[0], -16)), (S[0], -65536)),
    (S[1], 65535)), S[2]), .(S[2], -16)), .(S[3], 16)), .(S[3], -16)),
    .(S[4], 16)), .(S[4], -16)), .(S[5], 16)),  .(S[6], 16)),
    .(S[6], -16)), (S[7], -65536)), .(S[7], 16)), .(S[7], -16));
  U[6] := (((((((((((((
    M[6], S[0]), .(S[1], -16)), .(S[2], 16)), S[3]), .(S[3], -16)),
    .(S[4], 16)), .(S[4], -16)), .(S[5], 16)), .(S[5], -16)), S[6]),
    .(S[6], 16)), .(S[6], -16)), .(S[7], 16));
  U[7] := ((((((((((((((
    M[7], (S[0], -65536)), .(S[0], 16)), (S[1], 65535)),
    .(S[1], 16)), .(S[2], -16)), .(S[3], 16)), S[4]), .(S[4], -16)),
    .(S[5], 16)), .(S[5], -16)), .(S[6], -16)), (S[7], 65535)),
    .(S[7], 16)), .(S[7], -16));
  := 0 6
    V[] := ((H[], .(U[+1], 16)), .(U[], -16))
  ;
  V[7] := (((((((
    H[7], (U[0], -65536)), .(U[0], 16)), .(U[7], -16)),
    (U[1], -65536)), .(U[1], 16)), .(U[6], 16)), (U[7], -65536));
  H[0] := (((((((((((((
    (V[0], -65536), .(V[0], 16)), .(V[0], -16)), .(V[1], -16)),
    (V[1], -65536)), .(V[2], 16)), .(V[3], -16)), .(V[4], 16)),
    .(V[5], -16)), V[5]), .(V[6], -16)), .(V[7], 16)), .(V[7], -16)),
    (V[7], 65535));
  H[1] := ((((((((((((
    .(V[0], 16), .(V[0], -16)), (V[0], -65536)), (V[1], 65535)),
    V[2]), .(V[2], -16)), .(V[3], 16)), .(V[4], -16)), .(V[5], 16)),
    .(V[6], 16)), V[6]), (V[7], -65536)), .(V[7], -16));
  H[2] := ((((((((((((((
    (V[0], 65535), .(V[0], 16)), .(V[1], 16)), .(V[1], -16)),
    (V[1], -65536)), .(V[2], 16)), .(V[3], -16)), V[3]), .(V[4], 16)),
    .(V[5], -16)), V[6]), .(V[6], -16)), (V[7], 65535)), .(V[7], 16)),
    .(V[7], -16));
  H[3] := ((((((((((((((
    .(V[0], 16), .(V[0], -16)), (V[0], -65536)),
    (V[1], -65536)), .(V[1], -16)), .(V[2], 16)), .(V[2], -16)), V[2]),
    .(V[3], 16)), .(V[4], -16)), V[4]), .(V[5], 16)), .(V[6], 16)),
    (V[7], 65535)), .(V[7], -16));
  H[4] := (((((((((((((
    .(V[0], -16), .(V[1], 16)), V[1]), .(V[2], -16)), V[2]),
    .(V[3], 16)), .(V[3], -16)), V[3]), .(V[4], 16)), .(V[5], -16)),
    V[5]), .(V[6], 16)), .(V[6], -16)), .(V[7], 16));
  H[5] := (((((((((
    (((((((((
    .(V[0], 16), (V[0], -65536)), .(V[1], 16)), .(V[1], -16)),
    (V[1], -65536)), .(V[2], 16)), V[2]), .(V[3], -16)), V[3]),
    .(V[4], 16)), .(V[4], -16)), V[4]), .(V[5], 16)), .(V[6], 16)),
    .(V[6], -16)), V[6]), .(V[7], 16)), .(V[7], -16)), (V[7], -65536));
  H[6] := ((((((((((((((
    V[0], V[2]), .(V[2], -16)), V[3]), .(V[3], 16)), V[4]),
    .(V[4], -16)), .(V[5], 16)), .(V[5], -16)), V[5]), .(V[6], 16)),
    .(V[6], -16)), V[6]), .(V[7], 16)), V[7]);
  H[7] := ((((((((((((((
    V[0], .(V[0], -16)), .(V[1], 16)), .(V[1], -16)), .(V[2], 16)),
    .(V[3], -16)), V[3]), .(V[4], 16)), V[4]), .(V[5], -16)), V[5]),
    .(V[6], 16)), .(V[6], -16)), .(V[7], 16)), V[7])
;

(+: );

  ()
;

(h+: ; b-: ; , t: );

  i, j: ;
  a, c: ;
  m: 32;
  : ;

  j := 0;
  c := 0;
  i := 0 7
    .(.(b)+j+, .(a), 4);
    (j, 4);
    m[i] := a;
    c := 32(32(a, c, ), h.s[i], );
    (a = -1) (h.s[i] = -1)
      h.s[i] := c;
      c := 1
   
      h.s[i] := c;
      32(c, a) c := 1 c := 0
   
  ;
  (h.h, m);
  h.l[0] := 32(h.l[0], t, );
  (h.l[1])
;

(h+: ; b-: ; l: );

  i, j: ;

  i := h.b;
  j := 0;
  (i < 32) (j < l)
    h.p[i] := b[j];
    (i); (j);
  ;
  i < 32
    h.b := i;
   
  ;
  (h, h.p, 0, 256);
  (j + 32) < l
    (h, b, j, 256);
    (j, 32)
  ;
  i := 0;
  j < l
    h.p[i] := b[j];
    (i); (j)
  ;
  h.b := i
;

(h+: ; +: );

  i, j: ;
  a: ;

  h.b > 0
    i := 0 32 - h.b - 1 h.p[h.b+i] := 0 ;
    (h, h.p, 0, .(h.b, 3))
  ;
  (h.h, h.l);
  (h.h, h.s);
  j := 0;
  i := 0 7
    a := h.h[i];
    .(.(a), .([j]), 1);
    a := .(a, -8);
    .(.(a), .([j + 1]), 1);
    a := .(a, -8);
    .(.(a), .([j + 2]), 1);
    a := .(a, -8);
    .(.(a), .([j + 3]), 1);
    (j, 4)
 
;

(-: );

  : .;
  : ;

  := .();
  = -1 .("^: .^"); (0) ;
  # 128 .("^: .^"); (0) ;
  := .();
  = .("^: .^"); (0) ;
  .(, , 128);
  .()
;

(-: );

  : ;

  := 0 31 .("%.2x", [], 0, 0, 0)
;

;

  : ;
  (: );
  [ 16, 16] := ; ()
  ;

  := 0;
  (4); (10); (9); (2); (13); (8); (0); (14); (6); (11); (1); (12); (7); (15); (5); (3);
  (14); (11); (4); (12); (6); (13); (15); (10); (2); (3); (8); (1); (0); (7); (5); (9);
  (5); (8); (1); (13); (10); (3); (4); (2); (14); (15); (12); (7); (6); (0); (9); (11);
  (7); (13); (10); (1); (0); (8); (9); (15); (14); (4); (6); (12); (11); (2); (5); (3);
  (6); (12); (7); (1); (5); (15); (13); (8); (4); (10); (9); (14); (0); (3); (11); (2);
  (4); (11); (10); (0); (7); (2); (1); (13); (3); (6); (8); (5); (9); (12); (15); (14);
  (13); (11); (4); (1); (3); (15); (5); (9); (0); (10); (14); (7); (6); (8); (2); (12);
  (1); (15); (13); (0); (5); (7); (10); (4); (9); (2); (3); (14); (6); (11); (8); (12);
;

;

  : ;

  := 0;
  .()
    .(, [], 1);
    ();
    = 100H (, , 100H); := 0
  ;
  (, , )
;


  . <= 1
    .(" .")
 
    .(1, );
    := .();
    = .(" .")
      ;
      ();
      ;
      .();
      (, );
      ()
   
 

341194.
    .