/mobile Handheld Friendly website

 performance measurements

Each table row shows performance measurements for this ATS program with a particular command-line input value N.

 N  CPU secs Elapsed secs Memory KB Code B ≈ CPU Load
250,0000.020.03?2593  0% 0% 25% 100%
2,500,0000.220.233602593  0% 100% 0% 8%
25,000,0001.881.883642593  0% 1% 0% 100%

Read the ↓ make, command line, and program output logs to see how this program was run.

Read fasta-redux benchmark to see what this program should do.

 notes

ATS/Anairiats version 0.2.9

 fasta-redux ATS #4 program source code

(*
** The Computer Language Benchmarks Game
** http://benchmarksgame.alioth.debian.org/
** 
** Author: Hongwei Xi
** Author: Zhiqiang Ren
**
** compilation command:
**   atscc -O3 fasta4.dats -msse2 -mfpmath=sse -o fasta4
*)

(* ****** ****** *)

%{^
#define likely(x) __builtin_expect((x), 1)
#define unlikely(x) __builtin_expect((x), 0)
%} // end of [{%^]
extern fun unlikely0 (x: bool): bool = "mac#unlikely"

(* ****** ****** *)

staload "libc/SATS/stdio.sats"
  
(* ****** ****** *)

macdef IM = 139968U
macdef IA = 3877U
macdef IC = 29573U

#define BUFLEN 60
#define LOOKUP_SIZE 4096
macdef LOOKUP_SCALE = (float_of)(LOOKUP_SIZE - 1)

(* ****** ****** *)

typedef random_t = uint // unsigned int
extern typedef "random_t" = random_t

extern fun random_init
  (seed: &random_t? >> random_t):<> void = "random_init"

implement random_init (seed) = seed := 42U

fn random_next_lookup
  (seed: &random_t): float = let
  val () = seed := (seed * IA + IC) mod IM
in
  (float_of)seed * (LOOKUP_SCALE / (float_of)IM)
end // end of [random_next_lookup]

(* ****** ****** *)

typedef amino_acid =
  $extype_struct "amino_acid" of {
  sym= char, prob= float, cprob_lookup= float
} // end of [amino_acid]

typedef aminoarr (n:int) = @[amino_acid][n]

(* ****** ****** *)

extern fun fwrite_substring {m,p,n:nat | p + n <= m}
  (str: string m, beg: size_t p, n: size_t n, out: FILEref): void
  = "fwrite_substring"

extern
fun repeat_fasta {len:nat} {n:nat}
  (out: FILEref, str: string len, n: size_t n): void
  = "repeat_fasta"
  
implement repeat_fasta
  {len} {n} (out, str, n): void = let
  macdef BUFLEN_sz = size1_of_int1 (BUFLEN)
  val len = string1_length str
  val () = assert (len >= BUFLEN_sz)
  fun loop {n,pos:nat | pos <= len}
    (out: FILEref, n: size_t n, pos: size_t pos):<cloref1> void =
    if n > BUFLEN_sz then let
      val left = len - pos in
      if left >= BUFLEN_sz then let
        val () = fwrite_substring (str, pos, BUFLEN_sz, out)
        val _err = fputc_err ('\n', out)
      in
        loop (out, n - BUFLEN_sz, pos + BUFLEN_sz)
      end else let
        val () = fwrite_substring (str, pos, left, out)
        val () = fwrite_substring (str, 0, BUFLEN_sz - left, out)
        val _err = fputc_err ('\n', out)
      in
        loop (out, n - BUFLEN_sz, BUFLEN_sz - left)
      end // end of [if]
    end else let
      val left = len - pos in
      if left >= n then let
        val () = fwrite_substring (str, pos, n, out)
        val _err = fputc_err ('\n', out)
      in
        // nothing
      end else let
        val () = fwrite_substring (str, pos, left, out)
        val () = fwrite_substring (str, 0, n-left, out)
        val _err = fputc_err ('\n', out)
      in
        // nothing
      end // end of [if]
    end (* end of [if] *)
  // end of [loop]
in
  loop (out, n, 0)
end // end of [repeat_fasta]

(* ****** ****** *)

fun fill_lookuparr {n0:pos} (
    lookuparr: &(@[ptr?][LOOKUP_SIZE]) >> @[ptr][LOOKUP_SIZE]
  , aminoarr: &aminoarr(n0), n0: size_t n0
  ) : void = let
  typedef T = amino_acid
  fun loop1 {n:nat} {l:addr} .<n>.
    (pf: !array_v (T, n, l) | p: ptr l, n: size_t n, acc: float):<> void =
    if n > 0 then let
      prval (pf1, pf2) = array_v_uncons {T} (pf)
      val acc = acc + p->prob
      val () = p->cprob_lookup := acc * LOOKUP_SCALE
      val () = loop1 (pf2 | p + sizeof<T>, n-1,  acc)
      prval () = pf := array_v_cons {T} (pf1, pf2)
    in
      // nothing
    end // end of [if]
  // end of [loop1]
  val () = loop1 (view@ aminoarr | &aminoarr, n0, (float_of)0.0)
  val () = aminoarr.[n0-1].cprob_lookup := LOOKUP_SCALE
  fun loop2 {n:nat} {l:addr} .<n>. (
      pf: !array_v (ptr?, n, l) >> array_v (ptr, n, l)
    | aminoarr: &(@[T][n0]), p: ptr l, n: size_t n, fi: float, j0: natLt n0
    ) : void =
    if n > 0 then let
      var j: natLt n0 = j0
      val () = while*
        {j:nat | j < n0} (j: int j): (j: natLt n0) =>
        (aminoarr.[j].cprob_lookup < fi) let
        prval () = _meta_info () where {
          extern praxi _meta_info (): [j+1 < n0] void
        } // end of [prval]
      in
        j := j + 1
      end // end of [val]
      prval (pf1, pf2) = array_v_uncons {ptr?} (pf)
      val () = !p := &aminoarr.[j]
      val () = loop2 (pf2 | aminoarr, p+sizeof<ptr>, n-1, fi+(float_of)1, j)
    in
      pf := array_v_cons {ptr} (pf1, pf2)
    end else let
      prval () = array_v_unnil {ptr?} pf
      prval () = pf := array_v_nil {ptr} ()
    in
      // nothing
    end // end of [if]
  // end of [loop2]
  val () = loop2 (view@ lookuparr | aminoarr, &lookuparr, LOOKUP_SIZE, (float_of)0.0, 0)
in
  // nothing
end // end of [fill_lookuparr]

(* ****** ****** *)

typedef lookuparr = @[ptr][LOOKUP_SIZE]

(* ****** ****** *)

extern
fun randomize {n0:pos} {n:nat} (
    aminoarr: &aminoarr(n0), n0: size_t n0, n: int n, seed: &random_t
  ) : void
  = "randomize"
 
implement randomize
  (aminoarr, n0, n, seed) = () where {
//
  extern fun fwrite_byte
    (buf: ptr, n: int, out: FILEref):<> void = "fwrite_byte"
  // end of [fwrite_byte]
//
  var !p_lookuparr with pf_lookuparr = @[ptr][LOOKUP_SIZE]()
  var !p_buf with pf_buf = @[char?][BUFLEN+1]()
  val () = p_buf->[BUFLEN] := '\n'
  val () = fill_lookuparr (!p_lookuparr, aminoarr, n0)
  var i: Nat = 0 and j: natLte (BUFLEN) = 0
  val () = while (i < n) let
    val () = if :(j: natLt (BUFLEN)) =>
      (j = BUFLEN) then
      (fwrite_byte (p_buf, BUFLEN+1, stdout_ref); j := 0)
    // end of [if]
//
    val r = random_next_lookup (seed)
    val ri = int_of_float (r)
    val [ri:int] ri = int1_of_int (ri)
    prval () = _meta_info () where {
      extern praxi _meta_info (): [0 <= ri && ri < LOOKUP_SIZE] void
    } // end of [prval]
//
    typedef T = amino_acid
    var u: ptr = p_lookuparr->[ri]
//
    extern castfn __cast (u: ptr)
      :<> [l:addr] (T @ l, T @ l -<lin,prf> void | ptr l)
    val () = while (true) let
      val (pf, fpf | u1) = __cast (u)
      val r1 = u1->cprob_lookup
      prval () = fpf (pf)
    in
      if unlikely0(r1 < r) then u := u + sizeof<T> else break
    end // end of [val]
//
    val (pf, fpf | u1) = __cast (u)
    val () = p_buf->[j] := u1->sym
    prval () = fpf (pf)
//
  in
    i := i + 1; j := j + 1
  end // end of [while]
  val () = p_buf->[j] := '\n'
  val () = fwrite_byte (p_buf, j+1, stdout_ref)
} // end of [randomize]

(* ****** ****** *)

implement main_dummy () = ()

(* ****** ****** *)

%{$

#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0]))

ats_void_type
mainats (
  ats_int_type argc, ats_ptr_type argv0
) {
  char **argv = (char**)argv0 ;
  int n = argc > 1 ? atoi( argv[1] ) : 512;
  random_t rand;
  random_init(&rand);
//
  fprintf(stdout, ">ONE Homo sapiens alu\n");
  repeat_fasta((ats_ref_type)stdout, (ats_ptr_type)alu, n*2);
//
  fprintf(stdout, ">TWO IUB ambiguity codes\n");
  randomize(aminoacids, ARRAY_SIZE(aminoacids), n*3, &rand);
//
  fprintf(stdout, ">THREE Homo sapiens frequency\n");
  randomize(homosapiens, ARRAY_SIZE(homosapiens), n*5, &rand);
//
  return;
} // end of [mainats]
                                                    
%}

(* ****** ****** *)

%{^

typedef
struct _amino_acid {
  char sym;
  float prob;
  float cprob_lookup;
} amino_acid ;

//
// let us do initialization in C to avoid many hassels
//
         
amino_acid aminoacids[] = {
   { 'a', 0.27 },
   { 'c', 0.12 },
   { 'g', 0.12 },
   { 't', 0.27 },
//            
   { 'B', 0.02 },
   { 'D', 0.02 },
   { 'H', 0.02 },
   { 'K', 0.02 },
   { 'M', 0.02 },
   { 'N', 0.02 },
   { 'R', 0.02 },
   { 'S', 0.02 },
   { 'V', 0.02 },
   { 'W', 0.02 },
   { 'Y', 0.02 },
} ;
                                             
amino_acid homosapiens[] = {
  { 'a', 0.3029549426680 },
  { 'c', 0.1979883004921 },
  { 'g', 0.1975473066391 },
  { 't', 0.3015094502008 },
} ;
                                                         
static const char alu[] =
"GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG"
"GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA"
"GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA"
"AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT"
"CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC"
"CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG"
"CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA";

//

ats_void_type
fwrite_substring (
  ats_ptr_type str, ats_size_type beg
, ats_size_type len, ats_ptr_type out
) {
  fwrite_unlocked(((char*)str)+beg, 1, len, (FILE*)out) ; return ;
} // end of [fwrite_substring]

ats_void_type
fwrite_byte
  (ats_ptr_type buf, ats_int_type n, ats_ptr_type fil) {
   fwrite_unlocked ((void*)buf, (size_t)1, (size_t)n, (FILE*)fil) ;
   return ;
} // end of [fasta_fwrite_byte]
                                                                              
//

static ats_void_type
  mainats (ats_int_type argc, ats_ptr_type argv) ;

%} // end of [%{^]

(* ****** ****** *)

(* end of [fasta4.dats] *)

 make, command-line, and program output logs

Tue, 22 Jan 2013 19:20:33 GMT

MAKE:
/usr/local/src/ats-lang-anairiats-0.2.9/bin/atscc  -pipe -Wall -O3 -fomit-frame-pointer -march=native -mfpmath=sse -msse3 fastaredux.dats -o fastaredux.ats-4.ats_run 
/usr/local/src/ats-lang-anairiats-0.2.9/bin/atsopt --output fastaredux_dats.c --dynamic fastaredux.dats
In file included from fastaredux_dats.c:19:0:
/usr/local/src/ats-lang-anairiats-0.2.9/prelude/CATS/basics.cats: In function ‘atspre_fprint_newline’:
/usr/local/src/ats-lang-anairiats-0.2.9/prelude/CATS/basics.cats:271:11: warning: variable ‘n2’ set but not used [-Wunused-but-set-variable]
/usr/local/src/ats-lang-anairiats-0.2.9/prelude/CATS/basics.cats:271:7: warning: variable ‘n1’ set but not used [-Wunused-but-set-variable]
fastaredux_dats.c: In function ‘random_init’:
fastaredux_dats.c:196:1: warning: label ‘__ats_lab_random_init’ defined but not used [-Wunused-label]
fastaredux_dats.c: In function ‘random_next_lookup_1’:
fastaredux_dats.c:218:1: warning: label ‘__ats_lab_random_next_lookup_1’ defined but not used [-Wunused-label]
fastaredux_dats.c: In function ‘repeat_fasta’:
fastaredux_dats.c:360:1: warning: label ‘__ats_lab_repeat_fasta’ defined but not used [-Wunused-label]
fastaredux_dats.c: In function ‘loop2_6’:
fastaredux_dats.c:438:1: warning: label ‘__ats_lab_1’ defined but not used [-Wunused-label]
fastaredux_dats.c: In function ‘fill_lookuparr_4’:
fastaredux_dats.c:471:1: warning: label ‘__ats_lab_fill_lookuparr_4’ defined but not used [-Wunused-label]
fastaredux_dats.c: In function ‘randomize’:
fastaredux_dats.c:569:1: warning: label ‘__ats_lab_3’ defined but not used [-Wunused-label]
fastaredux_dats.c:515:1: warning: label ‘__ats_lab_randomize’ defined but not used [-Wunused-label]
In file included from fastaredux_dats.c:29:0:
fastaredux_dats.c: At top level:
/usr/local/src/ats-lang-anairiats-0.2.9/prelude/CATS/pointer.cats:52:14: warning: ‘atspre_null_ptr’ defined but not used [-Wunused-variable]
In file included from fastaredux_dats.c:30:0:
/usr/local/src/ats-lang-anairiats-0.2.9/prelude/CATS/printf.cats:57:1: warning: ‘atspre_fprintf_err’ defined but not used [-Wunused-function]
/usr/local/src/ats-lang-anairiats-0.2.9/prelude/CATS/printf.cats:69:1: warning: ‘atspre_fprintf_exn’ defined but not used [-Wunused-function]
/usr/local/src/ats-lang-anairiats-0.2.9/prelude/CATS/printf.cats:87:1: warning: ‘atspre_printf_exn’ defined but not used [-Wunused-function]
/usr/local/src/ats-lang-anairiats-0.2.9/prelude/CATS/printf.cats:105:1: warning: ‘atspre_prerrf_exn’ defined but not used [-Wunused-function]
In file included from fastaredux_dats.c:33:0:
/usr/local/src/ats-lang-anairiats-0.2.9/prelude/CATS/string.cats:351:14: warning: ‘atspre_stropt_none’ defined but not used [-Wunused-variable]
fastaredux_dats.c:341:1: warning: ‘loop_3_closure_make’ defined but not used [-Wunused-function]
gcc -I/usr/local/src/ats-lang-anairiats-0.2.9/ -I/usr/local/src/ats-lang-anairiats-0.2.9/ccomp/runtime/ -L/usr/local/src/ats-lang-anairiats-0.2.9/ccomp/lib64/ /usr/local/src/ats-lang-anairiats-0.2.9/ccomp/runtime/ats_prelude.c -pipe -Wall -O3 -fomit-frame-pointer -march=native -mfpmath=sse -msse3 fastaredux_dats.c -o fastaredux.ats-4.ats_run -lats 
0.36s to complete and log all make actions

COMMAND LINE:
./fastaredux.ats-4.ats_run 25000000

(TRUNCATED) PROGRAM OUTPUT:
>ONE Homo sapiens alu
GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
ACAGAGCGAGACTCCGTCTCAAAAAGGCCGG

Revised BSD license

  Home   Conclusions   License   Play